рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЖрд░рдУрдПрд╕ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ - рднрд╛рдЧ 3

рд╢реБрдн рджреЛрдкрд╣рд░, рд╣реЗрдмрд░ рдХреЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ!

рдореИрдВ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ ( рдкрд╣рд▓рд╛ рд▓реЗрдЦ , рджреВрд╕рд░рд╛ рд▓реЗрдЦ ) рдкрд░ рдЖрд░рдУрдПрд╕ рдХреЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реВрдВ ред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреАрдмреЛрд░реНрдб рдкрд░ рдЪрд╛рдмрд┐рдпрд╛рдБ рджрдмрд╛рдХрд░ рд░реЛрдмреЛрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ros-teleop рд╕реНрдЯреИрдХ рд╕реЗ teleop_twist_keyboard рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ ред Ros-teleop рд╕реНрдЯреИрдХ рдореЗрдВ рдЗрд╕ рдкреИрдХреЗрдЬ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рдФрд░ рдкреИрдХреЗрдЬ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдХреМрди рдмрд┐рд▓реНрд▓реА рдХреЗ рдиреАрдЪреЗ, рдХреГрдкрдпрд╛ teleop_twist_keyboard рдЕрдзреНрдпрдпрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

Tmux рдХреЗ рд╕рд╛рде рдмрд╣реБрдкрд░рдд


рдЗрд╕ рдмреАрдЪ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдЯреНрд░рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдЯрд░реНрдорд┐рдирд▓реЛрдВ рдореЗрдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ SSH рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрд░рдПрдордЖрдИ рдкрд░ tmux рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

$ sudo apt-get install tmux

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЪрд▓рд╛рдПрдБ:

$ tmux

рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╣рд░реЗ рд░рдВрдЧ рдХреА рдкрдЯреНрдЯреА рджрд┐рдЦрд╛рдИ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдЦрд┐рдбрд╝рдХреА рдХреА рд╕рдВрдЦреНрдпрд╛ 0.
tmux рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореИрдиреЗрдЬрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ (рдЕрд▓рдЧ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ (рд╡рд┐рдВрдбреЛ)), рд╡рд┐рдВрдбреЛ рдкреИрдирд▓ рдореЗрдВ рд░рдЦрдХрд░ рдПрдХ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдлрд▓рдХ)) рдФрд░ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдХреАрдмреЛрд░реНрдб рдкрд░ Ctrl + B рдФрд░ C рджрдмрд╛рдПрдВред рдирдВрдмрд░ 1 рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдПред Ctrl + B рдФрд░% рдХреЗ рд╕рдВрдпреЛрдЬрди рдХреЛ рднреА рдЖрдЬрд╝рдорд╛рдПрдВред рд╡рд░реНрддрдорд╛рди рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдХреЛ рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рд╣рд░реА рдкрдЯреНрдЯреА рджреНрд╡рд╛рд░рд╛ рджреЛ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ (рдлрд▓рдХ) рдореЗрдВ рдмреАрдЪ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдЖрдк рд╕рдВрдпреЛрдЬрди Ctrl + B рджрдмрд╛рддреЗ рд╣реИрдВ, рдФрд░ "рд╡рд┐рднрд╛рдЬрди рд╡рд┐рдВрдбреЛ" рджрд░реНрдЬ рдХрд░реЗрдВ, рддреЛ рдЦрд┐рдбрд╝рдХреА рдХреНрд╖реИрддрд┐рдЬ рд░реВрдк рд╕реЗ рджреЛ рд╕рдорд╛рди рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рдПрдЧреАред рдПрдХ рдкреИрдирд▓ (рдлрд▓рдХ) рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдпреЛрдЬрди Ctrl + B, X рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ Y рджрдмрд╛рдПрдВред рдЙрд╕реА рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреИрдирд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдпреЛрдЬрди Ctrl + B, O рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╡рд┐рдВрдбреЛ рдирдВрдмрд░ рджреНрд╡рд╛рд░рд╛ рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдпреЛрдЬрди Ctrl + рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдмреА, <рд╡рд┐рдВрдбреЛ рдирдВрдмрд░>ред

рдЕрдм рдЬрдм рдЖрдк рдПрдХ рдирдпрд╛ рдЯрд░реНрдорд┐рдирд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рддреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ ~ / .bashrc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝ рджреЗрдВред рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

[[ $TERM != "screen" ]] && exec tmux


Teleop_twist_keyboard рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛


рдЕрдм рдЖрдЗрдП teleop_twist_keyboard рдкреИрдХреЗрдЬ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВред
Teleop_twist_keyboard.py рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ teleop_twist_keyboard рдкреИрдХреЗрдЬ рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд ROS рдиреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдПрдБ:

$ roscore
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py

рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдорд┐рд▓рддрд╛ рд╣реИ:

Reading from the keyboard  and Publishing to Twist!
---------------------------
Moving around:
   u    i    o
   j    k    l
   m    ,    .

q/z : increase/decrease max speeds by 10%
w/x : increase/decrease only linear speed by 10%
e/c : increase/decrease only angular speed by 10%
anything else : stop

CTRL-C to quit

рдЖрдЗрдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╕рднреА рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдВ:

$ rostopic list

рд╡рд┐рд╖рдп / cmd_vel рд╕реВрдЪреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░, teleop_twist_keyboard рдиреЛрдб рдХреАрдмреЛрд░реНрдб рдкрд░ рд╣рд░ рдмрд╛рд░ рдПрдХ рдХреБрдВрдЬреА рджрдмрд╛рдиреЗ рдкрд░ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рд╣рдо рд╡рд┐рд╖рдп / cmd_vel рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ:

$ rostopic echo cmd_vel

рдЖрд▓реЗрдЦреАрдп рд░реВрдк рдореЗрдВ ROS рдХрдореНрдкреНрдпреВрдЯреЗрдб рдЧреНрд░рд╛рдл рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП rqt_graph рдЪрд▓рд╛рдПрдВред рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЧреНрд░рд╛рдл рдЖрд░реЗрдЦ рд╕рднреА рд╕рдХреНрд░рд┐рдп рдиреЛрдбреНрд╕ рдФрд░ рд╡рд┐рд╖рдпреЛрдВ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред

$ rosrun rqt_graph rqt_graph

рдЫрд╡рд┐

рдпрд╣рд╛рдБ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ teleop_twist_keyboard рдиреЛрдб рд╡рд┐рд╖рдп / cmd_vel рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд░реЛрд╕реНрдЯреЛрдкрд┐рдХ рдиреЛрдб рдЗрд╕ рд╡рд┐рд╖рдп (rostopic echo рдХрдорд╛рдВрдб) рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИред
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдХрд┐рд╕ рд╡рд┐рд╖рдп рдкрд░ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ / cmd_vel:

$ rostopic type /cmd_vel

рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдЧреА:

geometry_msgs/Twist

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдорд╛рдирдХ ROS рдкреИрдХреЗрдЬ рдЬреНрдпрд╛рдорд┐рддрд┐_msgs рд╕реЗ рдЯрд╛рдЗрдк рдЯреНрд╡рд┐рд╕реНрдЯ рдХреЗ рд╣реИрдВред
рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ rosmsg рдХрдорд╛рдВрдб рд╕реЗ рднреА рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рд╕рдХрддреА рд╣реИ:

$ rosmsg show geometry_msgs/Twist


geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

рдХреНрд╖реЗрддреНрд░ 'рд░реИрдЦрд┐рдХ' рд░реИрдЦрд┐рдХ рд╡реЗрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, 'рдХреЛрдгреАрдп' рдХреЛрдгреАрдп рд╡реЗрдЧ рдХреЗ рд▓рд┐рдП рд╣реИред
'рдореИрдВ' рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ, рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ (рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдЬреБрдбрд╝рд╛):

linear: 
  x: 0.5
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 0.0
---

'K' рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ, рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ (рд░реЛрдХреЗрдВ):

linear: 
  x: 0.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 0.0
---

'рдпреВ' рдХреБрдВрдЬреА рджрдмрд╛рдПрдВ, рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛ (рдмрд╛рдПрдВ рдореБрдбрд╝реЗрдВ):

linear: 
  x: 0.5
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: 1.0
---

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЬрдм рдЖрдк 'рдУ' рдХреБрдВрдЬреА рджрдмрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдорд┐рд▓рддреЗ рд╣реИрдВ (рджрд╛рдПрдВ рдореБрдбрд╝реЗрдВ):

linear: 
  x: 0.5
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: -1.0
---

рдХреБрдВрдЬрд┐рдпрд╛рдБ 'j' рдФрд░ 'l', рдмрд╛рдПрдБ рдФрд░ рджрд╛рдПрдБ рдореБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ (рдмрд┐рдирд╛ рдЖрдЧреЗ рдмрдврд╝реЗ)ред

Teleop_twist_keyboard рдХреЗ рд╕рд╛рде рдХреАрдмреЛрд░реНрдб рд░реЛрдмреЛрдЯ рдирд┐рдпрдВрддреНрд░рдг


рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЪрд╛рдмрд┐рдпрд╛рдБ рджрдмрд╛рдХрд░ рд░реЛрдмреЛрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрд╕реЗрд░рд┐рд╢рд┐рдпрд▓ рд╕реНрдХреЗрдЪ рд▓рд┐рдЦрд╛ рд╣реИред рд╣рдо рдмрд╕ рд╡рд┐рд╖рдп / cmd_vel рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░, рдкреНрд░рддреНрдпреЗрдХ рдЧрддрд┐ рдХреЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЧрддрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдЖрджреЗрд╢ рджреЗрддреЗ рд╣реИрдВ (рдЖрдЧреЗ рдмрдврд╝рдирд╛, рд░реЛрдХрдирд╛, рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рдореБрдбрд╝рдирд╛)ред рд╕реНрдХреЗрдЪ рдпрд╣рд╛рдБ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдЖрдЗрдП рд╕реНрдХреЗрдЪ рдХреЛрдб рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред
рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдорд╛рдирдХ ros.h рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рджреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рдкреНрд░рдХрд╛рд░ geometry_msgs / Twist.h рдФрд░ geometry_msgs / рд╡реЗрдХреНрдЯрд░3.h рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

#include <geometry_msgs/Twist.h>
#include <geometry_msgs/Vector3.h>

рд╣рдо рдПрдХ рдиреЛрдб рд╣реИрдВрдбрд▓рд░ рдЖрд░рдУ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реИрдВ :: NodeHandle:

ros::NodeHandle nh;

рдореБрдЦреНрдп рдореВрд▓реНрдп рд╕рдВрджреЗрд╢ рд╡рд┐рдзрд┐ рд╣реИ:

void messageCb(const geometry_msgs::Twist& message) 
{
  geometry_msgs::Vector3 linear = message.linear;
  float forward_vel = float(linear.x);
  
  if(forward_vel == 0) { stop(); return; }
  
  geometry_msgs::Vector3 angular = message.angular;
  float ang_vel = float(angular.z);
  
  if(ang_vel > 0) { turnLeft(); }
  else if(ang_vel < 0) { turnRight(); }
  else { goForward(); }
}

рдЗрд╕ рд╡рд┐рдзрд┐ рдореЗрдВ, рд╣рдо рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреЛ cmd_vel рд╡рд┐рд╖рдп рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлреЙрд░рд╡рд░реНрдб_рд╡реЗрд▓ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╣рдо рд▓реАрдирд┐рдпрд░ рд╕реНрдкреАрдб, рдХреЛрдгреАрдп рд╡реЗрд░рд┐рдПрдмрд▓ - рдХреЛрдгреАрдп рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рд░реИрдЦрд┐рдХ рдЧрддрд┐ рд╣рдореЗрдВ рд╕реНрдЯреЙрдк рдХрдорд╛рдВрдб (рдорд╛рди 0) рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдХреЛрдгреАрдп рд╡реЗрдЧ рд░реЛрдЯреЗрд╢рди рдХреА рджрд┐рд╢рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ 0 рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ, рддреЛ рдмрд╛рдПрдВ рдореБрдбрд╝реЗрдВ, 0 рд╕реЗ рдХрдо - рджрд╛рдИрдВ рдУрд░, рдпрджрд┐ 0 - рдЖрдЧреЗ рдмрдврд╝реЗрдВ)ред
рд╡рд┐рд╖рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рдПрдВ / cmd_vel:

ros::Subscriber<geometry_msgs::Twist> sub("/cmd_vel", &messageCb);

рд╕рдВрджреЗрд╢ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╡рд┐рдзрд┐ (рд╕рдВрджреЗрд╢рд╕реАрдмреА) рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде - рдЬреНрдпрд╛рдорд┐рддрд┐_msgs :: рдЯреНрд╡рд┐рд╕реНрдЯред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ, rosserial_arduino рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╕реНрдХреЗрдЪ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ:

nh.initNode();
nh.subscribe(sub);
Serial.begin(57600);

рдЪрд▓рд╛рдПрдБ rosserial_arduino рд╕рд░реНрд╡рд░:

$ rosrun rosserial_python serial_node _port:=/dev/ttyACM0

рдФрд░ Arduino рдмреЛрд░реНрдб рдХреЛ рд╕реНрдХреЗрдЪ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВред

рдЙрд╕ рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ teleop_twist_keyboard рдиреЛрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдХреБрдВрдЬреА 'u', 'i', 'o' рдФрд░ 'k' рджрдмрд╛рдХрд░ рджреЗрдЦреЗрдВ рдФрд░ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ rosserial рд╕рд░реНрд╡рд░ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, teleop_twist_keyboard рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдЕрдм рдЖрдВрджреЛрд▓рди рдХрдорд╛рдВрдб рдХреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдХреЗ рд░реЛрдмреЛрдЯ рдХрд╛ рд╕рд░рд▓ рд░рд┐рдореЛрдЯ рдХрдВрдЯреНрд░реЛрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рдЖрдЧреЗ рдмрдврд╝рдирд╛, рд░реБрдХрдирд╛, рдмрд╛рдПрдВ рдпрд╛ рджрд╛рдПрдВ рдореБрдбрд╝рдирд╛ред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдЬреЙрдпрд╕реНрдЯрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░реЛрдмреЛрдЯ рдХреЛ рдХреИрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдЖрд░рдУрдПрд╕ рдореЗрдВ рдПрдХ рдФрд░ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд▓реЗрдХрд┐рди рдЙрд╕ рдкрд░ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВред

Source: https://habr.com/ru/post/hi390851/


All Articles