рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреЛрд╕реНрдЯ:
8. рд╣рдо рдлреЛрди-рдЖрд░рдУрдПрд╕ рдХрдВрдЯреНрд░реЛрд▓, рдЬреАрдкреАрдПрд╕-рдиреЛрдб рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ7. рд░реЛрдмреЛрдЯ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг: рдЬреАрдПрдордкреА, рдПрдПрдорд╕реАрдПрд▓, рдХрдорд░реЗ рдХреЗ рдирдХреНрд╢реЗ рдкрд░ рд╕рдВрджрд░реНрдн рдмрд┐рдВрджреБ6. рдкрд╣рд┐рдпрд╛ рдПрдирдХреЛрдбрд░, рдХрдорд░реЗ рдХреЗ рдирдХреНрд╢реЗ, рд▓рд┐рдбрд╛рд░ рдХреЗ рд╕рд╛рде рдУрдбреЛрдореЗрдЯреНрд░реА5. рд╣рдо rviz рдФрд░ gazebo рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ: xacro, рдирдП рд╕реЗрдВрд╕рд░ред4. rviz рдФрд░ gazebo рд╕рдВрдкрд╛рджрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░реЛрдмреЛрдЯ рд╕рд┐рдореБрд▓реЗрд╢рди рдмрдирд╛рдПрдВред3. рддреЗрдЬреА рд▓рд╛рдиреЗ, рдХреИрдорд░рд╛ рдмрджрд▓рдиреЗ, рдЧреЗрдЯ рдХреЛ рдареАрдХ рдХрд░реЗрдВ2. рд╕реЙрдлреНрдЯрд╡реЗрдпрд░1. рд▓реЛрд╣рд╛рдПрдХ рдЫреЛрдЯрд╛ рд░реЛрдмреЛрдЯ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреА рдирд┐рд░рдВрддрд░рддрд╛ред рдЗрд╕ рдмрд╛рд░ рд╣рдо рд╕рд┐рдореБрд▓реЗрд╢рди рдореЗрдВ рд░реЛрдмреЛрдЯ рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рджреГрд╢реНрдп рдЖрд░рдУрдПрд╕ рд╡рд╛рддрд╛рд╡рд░рдг rviz рдФрд░ рдЧрдЬрд╝реЗрдмреЛ (рдЗрд╕рдХреЗ рдмрд╛рдж "рд╕рдВрдкрд╛рджрдХреЛрдВ" рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рдВрдкрд╛рджрдХреЛрдВ рдореЗрдВ рдХрд╛рдо рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреА рдЫрд╡рд┐ рдкрд╣рд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдереАред рдЬрдм рд╕реЗ рд╣рдо рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдПрдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд░реЛрдмреЛрдЯ рдХрд╛рд░реНрдЯ рдХреЛ рдЦреБрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ:
1.
рднрд╛рдЧ 32.
рднрд╛рдЧ 23.
рднрд╛рдЧ 1рдореВрд▓ urdf рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдирд╛
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдПрдХ рд░реЛрдмреЛрдЯ рдХреЛ рд╕рд░рд▓реАрдХреГрдд рддрд░реАрдХреЗ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдорддреМрд░ рдкрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░рдг рд╣реЛрддреЗ рд╣реИрдВ:
1. рдПрдХ рд░реЛрдмреЛрдЯ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ред
2. рд╕рд┐рдореБрд▓реЗрд╢рди рдореЗрдВ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ред
3. рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЛрдмреЛрдЯ рдореЙрдбрд▓ рдмрдирд╛рдирд╛ред
4. рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдгред
рдЖрд░рдУрдПрд╕ рд╕рдВрдкрд╛рджрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдЬреЛ рднрд╡рди рдирд┐рд░реНрдорд╛рдг рдореЙрдбрд▓ рдФрд░ рдЖрднрд╛рд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рд╛рди рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд░реЛрдмреЛрдЯ рдореЙрдбрд▓ рд╣рдореЗрд╢рд╛ рдЕрдкрдиреЗ рд╢рд╛рдорд┐рд▓ рднрд╛рдЗрдпреЛрдВ рдХреА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдпрд╣рд╛рдВ рдЖрднрд╛рд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбрд▓ рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рдордп рдХрд╛ рдРрд╕рд╛ рдЙрдкрд╣рд╛рд░, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдкреНрд░рд╕рд┐рджреНрдз рд╡реНрдпрдХреНрддрд┐ рдиреЗ рдХрд╣рд╛, рди рдХреЗрд╡рд▓ рд╕рдм рдХреБрдЫ рдмрд░реНрджрд╛рд╢реНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рдкрд┐рдЫрд▓реЗ рдкрджреЛрдВ рдореЗрдВ рд░реЛрдмреЛрдЯрд┐рдХреНрд╕ рдХрд╛ рдХреНрд░рдо рдмрд╛рдзрд┐рдд рд╣реЛ рдЧрдпрд╛ рдерд╛: рдкрд╣рд▓рд╛, рд░реЛрдмреЛрдЯ рдХрд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЙрдбрд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рд╣рдо рдЗрд╕рдХреЗ рд╡рд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдмреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдПред
Urdf рдмрдирд╛рдПрдВ
рдЧрдЬрд╝реЗрдмреЛ рдореЗрдВ рд╕рд┐рдореБрд▓реЗрд╢рди рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЖрдирдВрдж рд▓реЗрдиреЗ рдФрд░ рд░реЛрдмреЛрдЯ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд░реЛрдмреЛрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдпреВрдЖрд░рдбреАрдПрдл рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред
рдпреВрдЖрд░рдбреАрдПрдл рдлрд╝рд╛рдЗрд▓ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрдВрдХрд╛рд▓ рдХрдВрдХрд╛рд▓ рд╣реИред
рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдПрдХ рдпреВрдЖрд░рдбреАрдПрдл рдлрд╝рд╛рдЗрд▓ рдПрдХ рд░реЛрдмреЛрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рд╣реИред
рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд╣рд╛ рдЧрдпрд╛ рдерд╛, рд╡реАрдПрдорд╡реЗрдпрд░ рд╡рд░реНрдХрд╕реНрдЯреЗрд╢рди рдЫрд╡рд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕ рдкрд░ рдЖрд░рдУрдПрд╕ (рдЙрдмрдВрдЯреВ 16.04, рдЖрд░рдУрдПрд╕-рдХрд╛рдЗрдиреЗрдЯрд┐рдХ) рдФрд░ рджреГрд╢реНрдп рд╕рдВрдкрд╛рджрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рд╕рднреА рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рдЬрдирди рдпреЛрдЧреНрдп рд╣реИрдВред
рдПрдХ rosbots_description рдирд╛рдордХ ROS рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдБред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ catkin_ws / src рдХреЗ рд╕рд╛рде рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ ROS рдореЗрдВ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
roscd; cd ..; cd src; catkin_create_pkg rosbots_description rospy
* рдпрджрд┐ roscd рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ; cd ..; рд╕реАрдбреА src; рдпрджрд┐ рдЖрдк catkin_ws рдореЗрдВ рдирд╣реАрдВ рдЖрддреЗ рд╣реИрдВ, рддреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдИ рд╡рд╛рддрд╛рд╡рд░рдг рд╣реЛрдВред рдЖрд╡рд╢реНрдпрдХ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, catkin_ws рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдБ: source devel / setup.bashред рдЦреЛ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдпрджрд┐ рдЖрдк рдПрдХ рдЫрд╡рд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд░реВрдЯ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕реАрдбреА ~; рд╕реАрдбреА catkin_ws
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ rosbots_description рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдФрд░ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ catkin_ws / src рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ? рдФрд░ рдпрд╣ рдХреИрд╕реА рд░рд╕реНрд╕рд╛рдХрд╕реА рд╣реИ?
рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджреЛ рдФрд░ рдлрд╛рдЗрд▓реЗрдВ рднреА рд▓рд┐рдЦрдиреА рд╣реЛрдВрдЧреА рдЬреЛ ROS рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: CMakeLists.txt рдФрд░ package.xmlред
рд╡реЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВ:

рдЙрдирдХрд╛ рдЖрд░рдУрдПрд╕ рдЕрдкрдиреЗ рдЖрдк рдмрдирддрд╛ рд╣реИред рдЬрдмрдХрд┐ рд╣рдо рдЙрдирдХреА рд╕рд╛рдордЧреНрд░реА рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред
рдЖрджреЗрд╢ рдХреЗ рдЕрдВрдд рдореЗрдВ рд░рд╕реНрд╕рд┐рдпреЛрдВ рдХрд╛ рдЕрд░реНрде рд╣реИ рдирд┐рд░реНрднрд░рддрд╛ рдкреИрджрд╛ рдХрд░рдирд╛, рдЕрдЬрдЧрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ред
рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рдирдП рдмрдирд╛рдП рдЧрдП rosbots_description рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░, urdf рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ, рдФрд░ рдЗрд╕рдореЗрдВ rosbots.xacro рдлрд╝рд╛рдЗрд▓ред
roscd rosbots_description mkdir urdf; cd urdf; touch rosbots.xacro chmod +x rosbots.xacro
рдЖрд░рдУрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЦреВрдмреА рдпрд╣ рд╣реИ рдХрд┐ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд┐рд╕ рдлреЛрд▓реНрдбрд░ рдореЗрдВ рдЖрдк рд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рдЖрдк рддреБрд░рдВрдд рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЕрдкрдирд╛ рдирд╛рдо roscd рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдЯрд╛рдЗрдк рдХрд░рдХреЗ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм рдирдИ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдбрд╛рд▓реЗрдВ:
rosbots.xacro <?xml version="1.0" encoding="utf-8"?> <robot name="rosbots" xmlns:xacro="http://www.ros.org/wiki/xacro"> <link name="base_footprint"/> <joint name="base_joint" type="fixed"> <origin xyz="0 0 0.05" rpy="0 0 0" /> <parent link="base_footprint"/> <child link="base_link" /> </joint> <link name="base_link"> <visual> <geometry> <mesh filename="package://rosbots_description/meshes/base.dae"/> </geometry> <origin xyz="-0.52 -0.4 0.43" rpy="0 0 0"/> </visual> <collision> <geometry> <mesh filename="package://rosbots_description/meshes/base.dae"/> </geometry> <origin xyz="-0.52 -0.4 0.43" rpy="0 0 0"/> </collision> <inertial> <origin xyz="0.0 0 0."/> <mass value="0.5"/> <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.03" /> </inertial> </link> <joint name="second_level_joint" type="fixed"> <origin xyz="0 0 0.68" rpy="0 0 0" /> <parent link="base_link"/> <child link="base_second_link" /> </joint> <link name="base_second_link"> <visual> <geometry> <mesh filename="package://rosbots_description/meshes/base.dae"/> </geometry> <origin xyz="-0.52 -0.4 0.0" rpy="0 0 0"/> </visual> <collision> <geometry> <mesh filename="package://rosbots_description/meshes/base.dae"/> </geometry> <origin xyz="-0.52 -0.4 0.0" rpy="0 0 0"/> </collision> <!--inertial> <origin xyz="0.01 0 0.7"/> <mass value="1.0"/> <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.03" /> </inertial--> </link> <joint name="mcu_joint" type="fixed"> <origin xyz="0.02 0.12 0.73" rpy="0 0 0" /> <parent link="base_link"/> <child link="mcu_link" /> </joint> <link name="mcu_link"> <visual> <geometry> <mesh filename="package://rosbots_description/meshes/rasp.dae" scale="0.14 0.14 0.14"/> </geometry> <origin xyz="0.9 -1.25 0" rpy="0 0 1.57"/> </visual> <collision> <geometry> <mesh filename="package://rosbots_description/meshes/rasp.dae" scale="0.14 0.14 0.14"/> </geometry> <origin xyz="0.9 -1.25 0" rpy="0 0 1.57"/> </collision> <!-- inertial> <origin xyz="0.01 0 0"/> <mass value="1.0"/> <inertia ixx="0.019995" ixy="0.0" ixz="0.0" iyy="0.019995" iyz="0.0" izz="0.03675" /> </inertial--> </link> <joint name="mcu_joint_1" type="fixed"> <origin xyz="0.02 0.12 0.83" rpy="0 0 0" /> <parent link="base_link"/> <child link="mcu_link_1" /> </joint> <link name="mcu_link_1"> <visual> <geometry> <mesh filename="package://rosbots_description/meshes/rasp.dae" scale="0.14 0.14 0.14"/> </geometry> <origin xyz="0.9 -1.25 0" rpy="0 0 1.57"/> </visual> <collision> <geometry> <mesh filename="package://rosbots_description/meshes/rasp.dae" scale="0.14 0.14 0.14"/> </geometry> <origin xyz="0.9 -1.25 0" rpy="0 0 1.57"/> </collision> <!-- inertial> <origin xyz="0.01 0 0"/> <mass value="1.0"/> <inertia ixx="0.019995" ixy="0.0" ixz="0.0" iyy="0.019995" iyz="0.0" izz="0.03675" /> </inertial--> </link> <joint name="stand_mcu1_joint" type="fixed"> <origin xyz="0.02 0.25 0.78" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_mcu1_link" /> </joint> <link name="stand_mcu1_link"> <visual> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> </link> <joint name="stand_mcu2_joint" type="fixed"> <origin xyz="0.02 -0.1125 0.78" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_mcu2_link" /> </joint> <link name="stand_mcu2_link"> <visual> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> </link> <joint name="stand_mcu3_joint" type="fixed"> <origin xyz="0.25 0.25 0.78" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_mcu3_link" /> </joint> <link name="stand_mcu3_link"> <visual> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> </link> <joint name="stand_mcu4_joint" type="fixed"> <origin xyz="0.25 -0.1125 0.78" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_mcu4_link" /> </joint> <link name="stand_mcu4_link"> <visual> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.1" radius="0.01"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> </link> <joint name="batery_joint" type="fixed"> <origin xyz="1.2 0.2 0.43" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="batery_link" /> </joint> <link name="batery_link"> <visual> <geometry> <mesh filename="package://rosbots_description/meshes/battery.dae" scale="13.0 6.0 6.0"/> </geometry> <origin xyz="0 4.5 0.05" rpy="1.57 0 1.57"/> </visual> <collision> <geometry> <mesh filename="package://rosbots_description/meshes/battery.dae" scale="13.0 6.0 6.0"/> </geometry> <origin xyz="0 4.5 0.05" rpy="1.57 0 1.57"/> </collision> <!-- inertial> <origin xyz="0.01 0 0"/> <mass value="1.0"/> <inertia ixx="0.01" ixy="0.0" ixz="0.0" iyy="0.01" iyz="0.0" izz="0.03" /> </inertial--> </link> <joint name="stand_1_joint" type="fixed"> <origin xyz="0.5 0.4125 0.58" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_1_link" /> </joint> <link name="stand_1_link"> <visual> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> <!--inertial> <origin xyz="0.0 0 0"/> <mass value="1.0"/> <inertia ixx="0.019995" ixy="0.0" ixz="0.0" iyy="0.019995" iyz="0.0" izz="0.03675" /> </inertial--> </link> <joint name="stand_2_joint" type="fixed"> <origin xyz="0.5 -0.2625 0.58" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_2_link" /> </joint> <link name="stand_2_link"> <visual> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> <!--inertial> <origin xyz="0.0 0 0"/> <mass value="1.0"/> <inertia ixx="0.019995" ixy="0.0" ixz="0.0" iyy="0.019995" iyz="0.0" izz="0.03675" /> </inertial--> </link> <joint name="wheel_left_joint" type="continuous"> <parent link="base_link"/> <child link="wheel_left_link"/> <origin xyz="0.15 0.4125 0.30" rpy="-1.57 0 0"/> <axis xyz="0 0 1"/> </joint> <link name="wheel_left_link"> <collision> <geometry> <cylinder length="0.20" radius="0.23"/> </geometry> <origin rpy="0.0 0.0 0" xyz="0 0 0.1"/> </collision> <visual name="visual"> <geometry> <!-- cylinder length="0.0206" radius="0.0550"/--> <!--cylinder length="0.20" radius="0.26"/--> <mesh filename="package://rosbots_description/meshes/wheel.dae" scale="8.0 8.0 8.0"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0"/> </visual> <inertial> <mass value="0.4" /> <origin xyz="0 0 0" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link> <joint name="wheel_right_joint" type="continuous"> <parent link="base_link"/> <child link="wheel_right_link"/> <origin xyz="0.15 -0.5625 0.30" rpy="-1.57 0 0"/> <axis xyz="0 0 1"/> </joint> <link name="wheel_right_link"> <collision> <geometry> <cylinder length="0.20" radius="0.23"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.195"/> </collision> <visual name="visual"> <geometry> <!--cylinder length="0.20" radius="0.26"/--> <mesh filename="package://rosbots_description/meshes/wheel.dae" scale="8.0 8.0 8.0"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0"/> </visual> <inertial> <mass value="0.4" /> <origin xyz="0 0.0 0.3" /> <inertia ixx="0.001" ixy="0.0" ixz="0.0" iyy="0.001" iyz="0.0" izz="0.001" /> </inertial> </link> <joint name="caster_back_joint" type="fixed"> <parent link="base_link"/> <child link="caster_back_link"/> <origin xyz="-0.4 0.1 0.26" rpy="0 0 0"/> </joint> <link name="caster_back_link"> <collision> <geometry> <!-- cylinder length="0.05" radius="0.19"/--> <sphere radius="0.19"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> </collision> <visual> <geometry> <!--cylinder length="0.05" radius="0.19"/--> <sphere radius="0.19"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> </visual> <inertial> <mass value="0.1" /> <origin xyz="0 0 0" /> <inertia ixx="0.001023539" ixy="0.0" ixz="0.0" iyy="0.001023539" iyz="0.0" izz="0.001023539" /> </inertial> </link> <joint name="stand_3_joint" type="fixed"> <origin xyz="-0.4 0.4125 0.58" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_3_link" /> </joint> <link name="stand_3_link"> <visual> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> </link> <joint name="stand_4_joint" type="fixed"> <origin xyz="-0.4 -0.2625 0.58" rpy="0 0 1.57" /> <parent link="base_link"/> <child link="stand_4_link" /> </joint> <link name="stand_4_link"> <visual> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </visual> <collision> <geometry> <cylinder length="0.20" radius="0.03"/> </geometry> <origin rpy="0.0 0 0" xyz="0 0 0.0"/> </collision> </link> </robot>
рдпрджрд┐ рдХреЛрдб рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рддреЛ рд╕рднреА рдлрд╛рдЗрд▓реЗрдВ рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ (рдореЗрд╣рд░рд╛рдмреЛрдВ) рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдкреИрдХреЗрдЬ рдХреЗ рд▓реЙрдиреНрдЪ рдХреЗ рджреМрд░рд╛рди рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣рд╛рдВ рдореЗрд╣рд░рд╛рдмреЗрдВ рд▓реА рдЬрд╛ рд╕рдХрддреА
рд╣реИрдВрдФрд░ rosbots_description рдореЗрдВ рдЕрдирдкреИрдХ рдХрд┐рдП рдЧрдП mech рдлрд╝реЛрд▓реНрдбрд░ рдбрд╛рд▓реЗрдВред
рдпрджрд┐ рдЖрдк рдХреЛрдб рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдПрдХ рдорд╛рдирдХ xml рдлрд╝рд╛рдЗрд▓ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреНрд▓реЙрдХ рд╣реИрдВ:
- рджреГрд╢реНрдп
- рдЯрдХреНрдХрд░
- рдЬрдбрд╝рддрд╛
рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдЕрдкрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ: рджреГрд╢реНрдп рд░реЛрдмреЛрдЯ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╣реИ, рдХреЛрдИ рдФрд░ рдирд╣реАрдВ, рдЯрдХрд░рд╛рд╡ рдФрд░ рдЬрдбрд╝рддрд╛ рд░реЛрдмреЛрдЯ рдХреА рднреМрддрд┐рдХреА рд╣реИ, рдХреИрд╕реЗ рд╕рдм рдХреБрдЫ рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░реЗрдЧрд╛ - рдЯрдХрд░рд╛рд╡, рдЬрдбрд╝рддрд╛ред
рдЬреЛрдбрд╝ - рддрддреНрд╡ рдЬреЛ рд░реЛрдмреЛрдЯ рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЛрдВ (рд▓рд┐рдВрдХ) рдХреЗ рдмреАрдЪ рдХреА рдЧрддрд┐ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╣рд┐рдпрд╛ (рдкрд╣рд┐рдпрд╛) рдХреА рдЧрддрд┐ рдлреНрд░реЗрдо рдХреЛ рдПрдХ рдкреВрд░реЗ (рдЪреЗрд╕рд┐рд╕) рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИред
рдореВрд▓ xyz x, y, z axes рдХреЗ рд╕рд╛рде рд╡рд╕реНрддреБ рдХрд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реНрдерд╛рди рд╣реИред
рдкреИрд░реЗрдВрдЯ рд▓рд┐рдВрдХ рдФрд░ рдЪрд╛рдЗрд▓реНрдб рд▓рд┐рдВрдХ рдХреНрд░рдорд╢рдГ рдкреИрд░реЗрдВрдЯ рдФрд░ рдЪрд╛рдЗрд▓реНрдб рд▓рд┐рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдХрд┐рд╕ рд╕реЗ рдмрдврд╝рддрд╛ рд╣реИред
рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рднреА рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ: рдкреНрд░рдХрд╛рд░ = "рдирд┐рд░рдВрддрд░", рдкреНрд░рдХрд╛рд░ = "рдирд┐рд╢реНрдЪрд┐рдд"ред рдпрд╣ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдШреВрдо рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдирд╣реАрдВред рддреЛ рдкрд╣рд┐рдП рдирд┐рд░рдВрддрд░ рд╣реИрдВред рдФрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, batery_joint рддрдп рд╣реИред
рдХреЛрдб рдореЗрдВ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдкрд╛рдЗрдерди рдореЗрдВ рдЙрддрдирд╛ рд╣реА рдЕрд░реНрдердкреВрд░реНрдг рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдк рдЯреИрдм рдФрд░ рд╕реНрдкреЗрд╕ рдХреЗ рд╕рд╛рде рд╣рд╕реНрддрдХреНрд╖реЗрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рд▓реЗ рдЬрд╛рдПрдВред рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд░реНрдгрддрд╛рд╡рд╛рджреА рдХреЗ рд╕реНрд╡рд░реНрдЧ рдФрд░ рджреГрд╢реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдПрдХ рд░реЛрдмреЛрдЯ рдореЙрдбрд▓ рд╣реИред
Rviz рдкрд░ рдХрд╛рдо рдХрд░реЗрдВ
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХреНрдпрд╛ рд╣реБрдЖред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдЬреЛ ROS рдкреИрдХреЗрдЬ рдЪрд▓рд╛рдПрдЧреАред
рдЗрд╕рдХреЗ рд▓рд┐рдП, рддрдерд╛рдХрдерд┐рдд рд▓реЙрдиреНрдЪ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд░рдУрдПрд╕ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЙрдиреНрдЪ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕рд╛рд░ рд╕рднреА рддрд░реНрдХреЛрдВ рдФрд░ рдЕрдиреНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╢реЙрд░реНрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдб, рдХрдорд╛рдВрдб, рдпрд╛ рдХрдИ рдиреЛрдб рдХреЗ рд▓реЙрдиреНрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╣реИред
Rviz.launch рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде rosbots_description рдореЗрдВ рдПрдХ рд▓реЙрдиреНрдЪ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдБ:
roscd rosbots_description mkdir launch; cd launch; touch rviz.launch
* рдпрд╣ рдФрд░ рдмрд╛рдж рдХрд╛ рд╕рдордп, рдЖрд░рдУрдПрд╕ рдкреИрдХреЗрдЬ рдмрдирд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдм рд╕рд┐рд╕реНрдЯрдо рдЦреБрдж рд╣реА рдкреИрдХреЗрдЬ рдХреЗ рдЕрдВрджрд░ рдХреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ "рджреЗрдЦреЗрдЧрд╛"ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред
рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╛рдордЧреНрд░реА рд╕реЗ рднрд░реЗрдВ -
rviz.launch <?xml version="1.0"?> <launch> <param name="robot_description" command="cat '$(find rosbots_description)/urdf/rosbots.xacro'"/> <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"> <param name="use_gui" value="False"/> </node> <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/> <node name="rviz" pkg="rviz" type="rviz" /> </launch>
рдпрд╣рд╛рдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо rosbots.xacro рдореЗрдВ рдПрдХ рдореЙрдбрд▓ рд╡рд┐рд╡рд░рдг рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдпрд╣ 3 рдиреЛрдбреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛: joint_state_publisher рд╕реЗ joint_state_publisher рдкреИрдХреЗрдЬ, robot_state_publisher рд░реЛрдмреЙрдЯ_state_publisher рд╕реЗ, rviz рд╕реЗ rvizред рдкреНрд░рдХрд╛рд░ рдиреЛрдб рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдкрд╛рдпрдерди рдпрд╛ рд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдмрд┐рдирд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред
рдЪрд▓рд╛рдПрдБ:
1 рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ, ROS рдорд╛рд╕реНрдЯрд░ рдЪрд▓рд╛рдПрдБ:
roscore
2 рдореЗрдВ:
roslaunch rosbots_description rviz.launch
* рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реБрдИ
ROS_MASTER_URI [http: //192.168.1 ....: 11311] рд╣реЛрд╕реНрдЯ рдЗрд╕ рдорд╢реАрди рдкрд░ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИ
, рддреЛ рдЖрдкрдХреЛ bashrc рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЬрд┐рд╕ рдкрд░ IP ROS рдЪрд▓ рд░рд╣рд╛ рд╣реИ:
nano ~/.bashrc
bashrc рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЖрдИрдкреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣):
export ROS_MASTER_URI=http://192.168.1.114:11311
рдмрд╢рд░реНрддреЗ рдЖрдЧреЗ рдкрдврд╝реЗрдВ:
source ~/.bashrc
рдпрд╛ рд░рд┐рдмреВрдЯ
**
рдпрджрд┐ roslaunch рдЕрднреА рднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЖрдк catkin_ws рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬрд╛рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд╕реНрд░реЛрдд devel / setup .bash
Rviz рдореЗрдВ рдбрд╛рдЗрд╡рд┐рдВрдЧ
рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрд░рд╡реАрдЬрд╝ рд╕рдВрдкрд╛рджрдХ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЦреЛрд▓ рдЦреБрд▓рддрд╛ рд╣реИред
рджреГрд╢реНрдп рдкреНрд░рд╕реНрддреБрддрд┐ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рд▓рдЧрднрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛:

рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЙрд▓рдо рдореЗрдВ рдмрд╛рдИрдВ рдУрд░, рдЖрдк ROS рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХреЗрдВрджреНрд░ рдореЗрдВ - рд░реЛрдмреЛрдЯ рдХреА рдЫрд╡рд┐, рджрд╛рдИрдВ рдУрд░ - рдПрдХ рд░реЛрдмреЛрдЯ-рдЬреИрд╕рд╛ рдХреИрдорд░рд╛ рд╡рд╛рд▓рд╛ рдХреЙрд▓рдоред рдореБрдЭреЗ рддреБрд░рдВрдд рдпрд╣ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд░рд╛рдЗрдЬрд╝ рдХреЗ рд╕рд╛рде 3-рд╡реНрд╣реАрд▓ рдорд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдорд╛рдЙрд╕ рдмрдЯрди рдпрд╣рд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдмрд╛рдИрдВ рдУрд░ рдкрдХрдбрд╝рдХрд░, рдЖрдк рдкреНрд░рджрд░реНрд╢рд┐рдд рдХреА рдЧрдИ рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рде рдЦрд┐рдбрд╝рдХреА рдореЗрдВ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рдШреБрдорд╛ рд╕рдХрддреЗ рд╣реИрдВ, рджрд╛рдПрдВ - рдЬрд╝реВрдо рдЗрди / рдЖрдЙрдЯ, рджреЛрдиреЛрдВ рдЪрд╛рдмрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдХрд░ - рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЛ рд░реЛрдмреЛрдЯ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдо рдкрд╣рд▓реЗ рджреЛ рдХреЙрд▓рдо рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ: рд░реЛрдмреЛрдЯ рдХреЗ рджреГрд╢реНрдп рдФрд░ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред
рдЪрд▓реЛ рдПрдХ рд░реЛрдмреЛрдЯ рдХреА рдирдЬрд╝рд░ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ
рдЪрд▓реЛ "рдлрд┐рдХреНрд╕реНрдб рдлрд╝реНрд░реЗрдо" рдЪреБрдиреЗрдВ - рд▓рд╛рдЗрди рдореЗрдВ "рдЖрдзрд╛рд░ рд▓рд┐рдВрдХ":

рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдмреЛрдЯ рд╡рд┐рд╡рд░рдг рдЬреЛрдбрд╝реЗрдВ:
"рдЬреЛрдбрд╝реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рд╕реВрдЪреА рдореЗрдВ "RobotModel" рдЪреБрдиреЗрдВ:

"
рдЕрдм рд╕рд┐рдореБрд▓реЗрд╢рди рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЖрдк рдЙрд╕ рд░реЛрдмреЛрдЯ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ rviz.xacro рдореЙрдбрд▓ рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:

"
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдПрдХ рджреГрд╢реНрдп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрдм рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ rviz рдХреЗрд╡рд▓ рд╕рд┐рдореБрд▓реЗрд╢рди
рдХрд╛ рдПрдХ
рджреГрд╢реНрдп рд╣реИ , рд▓реЗрдХрд┐рди рд╕рд┐рдореБрд▓реЗрд╢рди рд╣реА рдирд╣реАрдВред
рдпрд╛рдиреА рднреМрддрд┐рдХреА рдпрд╣рд╛рдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреАред
рдЕрдиреБрдХреГрддрд┐ рдЦреБрдж рдЧрдЬрд╝реЗрдмреЛ рдирд╛рдордХ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рд░рд╣рддреА рд╣реИрдВред
gazebo
рдмрдирд╛рдП рдЧрдП рдореЙрдбрд▓ рдХреЛ рдЧрдЬрд╝реЗрдмреЛ рдореЗрдВ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓реЙрдиреНрдЪ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдФрд░ рд▓реЙрдиреНрдЪ рдлрд╝рд╛рдЗрд▓ - рд╕реНрдкреЙрди.рд▓рд╛рдВрдЪ рдмрдирд╛рдПрдВред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 2 рд▓реЙрдиреНрдЪ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ!
spawn.launch <?xml version="1.0" encoding="UTF-8"?> <launch> <param name="robot_description" command="cat '$(find rosbots_description)/urdf/rosbots.xacro'" /> <arg name="x" default="0"/> <arg name="y" default="0"/> <arg name="z" default="0.5"/> <node name="mybot_spawn" pkg="gazebo_ros" type="spawn_model" output="screen" args="-urdf -param robot_description -model rosbots -x $(arg x) -y $(arg y) -z $(arg z)" /> </launch>
рдпрд╣рд╛рдВ рд╣рдо рдореЙрдбрд▓ рднреА рдкрдврд╝рддреЗ рд╣реИрдВ, рдлрд┐рд░ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╣рдо рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдХреЛ x, y, z axes рдХреЗ рд╕рд╛рде рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдХреЗрд╡рд▓ рдПрдХ рдиреЛрдб рдЪрд▓рд╛рдПрдБ - mybot_spawn gazebo_ros рдкреИрдХреЗрдЬ рд╕реЗред
* рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рд╕рдВрдХреБрд▓ рдХреЛ рдкреБрдирдГ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рдЖрдк рдЗрди рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдПрдХ рд╣реА рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ: roscdред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП roscd gazebo_rosред
рдЕрдм рдЯрд░реНрдорд┐рдирд▓ 1 рдореЗрдВ рд░реЛрд╕-рдорд╛рд╕реНрдЯрд░ рдХреЛ рд░реЛрдХреЗрдВ:
CTRL+C
рдФрд░ рдЧрдЬрд╝реЗрдмреЛ рд╕рдВрдкрд╛рджрдХ рдЪрд▓рд╛рдПрдВ:
roslaunch gazebo_ros empty_world.launch
рдЯрд░реНрдорд┐рдирд▓ 2 рдореЗрдВ, рдирдИ рдмрдирд╛рдИ рдЧрдИ рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдБ:
roslaunch rosbots_description spawn.launch
рдЕрдм рд╣рдо рдЕрдкрдиреЗ рд░реЛрдмреЛрдЯ рдХреЛ рдЧрдЬрд╝реЗрдмреЛ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдЕрдиреБрдХрд░рдг рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ:

* рдЕрдЧрд░ рдЖрдкрд╕реЗ рдХреЛрдИ рдЧрд▓рддреА рд╣реБрдИ рд╣реИ:
Waiting for service /gazebo/spawn_urdf_model
рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд▓реЙрдиреНрдЪ рдХреЗ рдЖрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░рддреЗ рд╣реБрдП рдкрд╣рд▓реА рдмрд╛рд░ рдЧрдЬрд╝реЗрдмреЛ рдХреЛ рд╢реБрд░реВ рдХрд┐рдП рдмрд┐рдирд╛ рдореЙрдбрд▓ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ред
рдЪрд▓реЛ рдЧрдЬрд╝реЗрдмреЛ рд╕рд┐рдореБрд▓реЗрд╢рди рдкрд░ рдЬрд╛рдПрдВред
рдЕрдм рд╕рдорд╛рдкрди рдХреЛрдб рд╕реЗ рдкрд╣рд▓реЗ rosbots.xacro рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
рдХреЛрдб <gazebo> <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"> <legacyMode>false</legacyMode> <alwaysOn>true</alwaysOn> <publishWheelTF>true</publishWheelTF> <publishTf>1</publishTf> <publishWheelJointState>true</publishWheelJointState> <updateRate>100.0</updateRate> <leftJoint>wheel_left_joint</leftJoint> <rightJoint>wheel_right_joint</rightJoint> <wheelSeparation>1.1</wheelSeparation> <wheelDiameter>0.52</wheelDiameter> <wheelAcceleration>1.0</wheelAcceleration> <torque>20</torque> <commandTopic>/part2_cmr/cmd_vel</commandTopic> <odometryTopic>odom</odometryTopic> <odometryFrame>odom</odometryFrame> <robotBaseFrame>base_link</robotBaseFrame> </plugin> </gazebo>
рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдЧрдЬрд╝реЗрдмреЛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рдЧрдЬрд╝реЗрдмреЛ рд╕рдВрдкрд╛рджрдХ рд╕реЗ рдореЙрдбрд▓ рд╣рдЯрд╛рдПрдВ:
rosservice call /gazebo/delete_model "model_name: 'rosbots'"
рдпрд╛ рдмрд╕ рд╕рдВрдкрд╛рджрдХ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВред
* рдЧрдЬрд╝реЗрдмреЛ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдХреНрд░реИрдВрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рднреА рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ CTRL + C рдХреЛ рдХрднреА-рдХрднреА рдорд╛рдлрд╝ рдХрд░ рджреЗрддреЗ рд╣реИрдВред
рд╕рдВрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдореЙрдбрд▓ рдХреЛ рдЧрдЬрд╝реЗрдмреЛ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд░рдЦреЗрдВ:
roslaunch rosbots_description spawn.launch
рдпрджрд┐ рдЖрдк рдЕрдм ROS рд╡рд┐рд╖рдпреЛрдВ рдХреА рд╕реВрдЪреА рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рд╣реИрдВ
/part2_cmr/cmd_vel

рдЕрдм рдПрдХ рдЕрд▓рдЧ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдирд┐рдпрдВрддреНрд░рдг рдЪрд▓рд╛рдХрд░ рд╕рд┐рдореБрд▓реЗрд╢рди рдореЗрдВ рд░реЛрдмреЛрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
rosrun teleop_twist_keyboard teleop_twist_keyboard.py /cmd_vel:=/part2_cmr/cmd_vel
рдЯрд░реНрдорд┐рдирд▓ рд╡рд┐рдВрдбреЛ рдореЗрдВ "рдЖрдЗ", "рдПрд▓", "рдЬреЗ", "рдХреЗ", "," рдХрдВрдЯреНрд░реЛрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдФрд░ рджрдмрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг, рдЖрдк рдЧрдЬрд╝реЗрдмреЛ рдПрдбрд┐рдЯрд░ рдХреЗ рд╕рд┐рдореБрд▓реЗрд╢рди рдореЗрдВ рд░реЛрдмреЛрдЯ рдХреЗ рдЖрдВрджреЛрд▓рди рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдХреЛрдб -
рдбрд╛рдЙрдирд▓реЛрдб ред
рдЬрд╛рд░реА рд░рдЦрд╛ рдЬрд╛рдПред