博文编辑中…
适用版本:ros-galactic
1. ROS2 安装 gazebo
默认安装的ros2
是不包含gazebo
的,首先我们安装gazebo11
:
1
| sudo apt-get install ros-galactic-gazebo-*
|
后续我们会使用Cartographer
进行SLAM
,所以还需要安装Cartographer
相关的功能包:
1 2
| sudo apt install ros-galactic-cartographer sudo apt install ros-galactic-cartographer-ros
|
接着安装Turtlebot3
相关功能包:
1 2
| sudo apt install ros-galactic-turtlebot3 sudo apt install ros-galactic-turtlebot3-simulations
|
2. 使用 gazebo 仿真
2.1 例程
配置gazebo的仿真模型路径:
1
| $ export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:'ros2 pkg \prefix turtlebot3_gazebo \'/share/turtlebot3_gazebo/models/
|
启动仿真环境:
1 2
| export TURTLEBOT3_MODEL=burger ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
|
运行SLAM功能:
1 2
| export TURTLEBOT3_MODEL=burger ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
|
运行键盘控制节点:
1 2
| export TURTLEBOT3_MODEL=burger ros2 run turtlebot3_teleop teleop_keyboard
|
2.2 自定义的 urdf 小车
本节内容基本根据古月居老师的《ROS2入门21讲》整理归纳
本节使用的小车即古月居老师例程中的mbot
,对于支撑轮的部分稍做了修改
2.2.1 需要修改的代码
古月居老师提供的mbot
在移动时会产生漂移以及阻塞感,经分析后确定是支撑轮的问题,将原本固定的支撑轮修改为无限旋转后即可解决:
1 2 3 4 5 6 7 8
| ... <joint name="${prefix}_caster_joint" type="continuous"> <origin xyz="${reflect*caster_joint_x} 0 ${-(base_length/2 + caster_radius)}" rpy="0 0 0"/> <parent link="base_link"/> <child link="${prefix}_caster_link"/> <axis xyz="0 1 0"/> </joint> ...
|
2.2.2 几个关键点
(1)差速转向插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| ... <plugin name="differential_drive_controller" filename="libgazebo_ros_diff_drive.so"> <update_rate>30</update_rate> <left_joint>left_wheel_joint</left_joint> <right_joint>right_wheel_joint</right_joint> <wheel_separation>${wheel_joint_y*2}</wheel_separation> <wheel_diameter>${2*wheel_radius}</wheel_diameter> <max_wheel_torque>20</max_wheel_torque> <max_wheel_acceleration>1.0</max_wheel_acceleration> <command_topic>cmd_vel</command_topic> <publish_odom>true</publish_odom> <publish_odom_tf>true</publish_odom_tf> <publish_wheel_tf>true</publish_wheel_tf> <odometry_topic>odom</odometry_topic> <odometry_frame>odom</odometry_frame> <robot_base_frame>base_footprint</robot_base_frame> <odometry_source>1</odometry_source> </plugin> ...
|
需要注意的是wheel_separation
轮距参数应为两轮中心点的距离,wheel_diameter
轮径应为轮子的直径。
附录
1 2 3 4
| gz topic -l
gz joint -m cart_front_steer -j wheel_front_left_steer_spin --vel-t 1
|
参考
- 《ROS2入门21讲》
- ROS2入门教程——30. 在Gazebo仿真环境中实现SLAM
- ROS虚拟仿真环境安装使用
- 【踩坑记录】Gazebo启动慢,画面卡“Preparing your world”