一、准备
本文是基于《Learning_ROS_for_Robotics_Programming_2nd_edition》中chapter7_tutorials功能包学习gazebo仿真,因此需要首先下载代码包到已经建立的ROS工作空间ros_ws/src文件夹下
二、在gazebo中添加机器人模型
$ cd chapter7_tutorials/robot1_description/urdf
$ check_urdf robot1.urdf #检查urdf语法
$ urdf_to_graphiz robot1.urdf
$ evince origins.pdf
在gazebo中使用urdf模型:
重新打开一个终端窗口,启动ros
$ roscore
打开一个新的终端窗口,运行launch文件,model指向display.launch文件路径,可将文件直接拖入终端,即可自动显示文件路径
$ roslaunch robot1_description display.launch model:="../ros_ws/src/learning_gazebo/chapter7_tutorials/robot1_description/urdf/robot1.urdf"
可以看到已经打开了rviz,但是场景中并没有任何东西
点击左下角Add按钮,在 by display type中添加RobotModel,点击OK;然后左上Fixed Frame中map改为base_link:
可以看到rviz中已经成功显示机器人模型
这里可能会报一个关于“joint_state_publisher”的错误,是因为没有joint_state_publisher包,重新打开一个终端下载:
$ sudo apt-get install ros-melodic-joint-state-publisher-gui
然后把launch文件中的“joint_state_publisher”全部改为“joint_state_publisher_gui”,如图:
重新运行display.launch文件,可以看到rviz打开了一个“joint_state_publisher_gui"小插件:
滑动“joint_state_publisher_gui”插件上的滑动条可以控制机器人对应关节的旋转:
三、添加传感器
$ roslaunch robot1_gazebo gazebo.launch model:="../ros_ws/src/learning_gazebo/chapter7_tutorials/robot1_description/urdf/robot1_base_04.xacro"
$ rostopic list
$ rostopic echo /robot/laser/scan
$ rosrun image_view image_view image:=robot/camera1/image_raw
四、添加地图
$ roslaunch gazebo_ros willowgarage_world.launch
gazebo显示一个空的办公室:
代码包中已经创建了加载机器人和地图的文件,运行launch文件:
$ roslaunch robot1_gazebo gazebo_wg.launch
机器人已经出现在办公室场景中:
五、控制机器人移动
$ sudo apt-get install ros-melodic-teleop-twist-keyboard
$ rosstack profile
$ rospack profile
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
u-加速 j-左转 k-减速/停止 l-右转 i-前进 ,-后退
打开rviz
$ rviz
在rviz中订阅传感器topic即可看到模拟传感器发送的数据