想在ROS系统中对我们自定义的机器人进行仿真,需要使用Gazebo,其是一种适用于复杂室内环境和室外环境的仿真环境。
gazebo独立于ROS,并可以在Ubuntu中以独立功能包安装。我的ROS系统(melodic)是完整安装包,所以包含了gazebo,版本为9.0.0,在此省略了安装步骤。
查询版本命令如下:
dpkg -l | grep gazebo
可以使用如下命令启动gazebo,确认是否安装:
gazebo
结果遇到如下错误:
解决方法,使用如下命令打开文件config.yaml:
sudo gedit ~/.ignition/fuel/config.yaml
添加如下一行:
url: https://api.ignitionrobotics.org
可以正常启动gazebo了。
切换到catkin_ws/src目录下,如下:
catkin_create_pkg mbot_sim_gazebo urdf xacro
切换到catkin_ws目录下,编译该功能包,如下:
catkin_make mbot_sim_gazebo
在该功能包下创建include、src、launch、urdf文件夹,在urdf文件下创建urdf文件夹和xacro文件夹。
robot_base.xacro文件内容如下:
Gazebo/Gray
transmission_interface/SimpleTransmission
hardware_interface/VelocityJointInterface
hardware_interface/VelocityJointInterface
1
Gazebo/Black
false
Gazebo/Blue
Debug
true
/
1
true
true
100.0
true
left_wheel_joint
right_wheel_joint
${wheel_joint_y*2}
${2*wheel_radius}
1
30
1.8
cmd_vel
odom
odom
base_footprint
上一篇我们只添加了摄像头外观,在这里我们添加摄像头属性,更新robot_camera.xacro文件内容如下:
Gazebo/Black
30.0
1.3962634
1280
720
R8G8B8
0.02
300
gaussian
0.0
0.007
true
0.0
/camera
image_raw
camera_info
camera_link
0.07
0.0
0.0
0.0
0.0
0.0
通过plugin标签,在gazebo中插入激光雷达的相关插件,更新robot_lidar.xacro文件内容如下:
0 0 0 0 0 0
false
40
720
1
-1.570796
1.570796
0.10
30.0
0.01
gaussian
0.0
0.01
/scan
hokuyo_link
由于机器人主体宏定义的名字改了,因此robot.xacro更新如下:
launch文件需要加入gazebo的设置,并将rviz相关设置去掉:
运行如下命令,仿真效果如下:
roslaunch mbot_sim_gazebo robot.launch
rqt_image_view
首先尝试加载柳树库公司(Willow Garage)办公室的地图,这张地图在ROS中是默认安装的,这个3D模型保存在/usr/share/gazebo-9/worlds中。我们使用如下命令加载:
roslaunch gazebo_ros willowgarage_world.launch
发现界面一直卡在这里,效果如下:
这是因为模型加载失败,解决方法如下:
切换到/usr/share/gazebo-9/目录下,执行如下命令:
sudo chmod 777 models
再切换到/usr/share/gazebo-9/models/目录下,执行如下命令:
sudo wget http://file.ncnynl.com/ros/gazebo_models.txt
sudo wget -i gazebo_models.txt
ls model.tar.g* | xargs -n1 tar xzvf
再次运行柳树库公司办公室的launch文件,效果如下:
现在要做的是创建一个新的launch文件来同时加载地图和机器人,在launch文件夹下创建robot_gazebo_wg.launch,文件内容如下:
通过如下命令运行:
roslaunch mbot_sim_gazebo robot_gazebo_wg.launch
rqt_image_view
此时,摄像头是有内容的,效果如下:
此时,通过如下命令,可以查看激光雷达的数据:
rostopic echo /scan
截止到目前,我们为自定义的机器人模型,添加了摄像头和激光雷达 ,又为其添加了地图,下一篇开始介绍如何控制机器人在仿真环境下的移动。