Gazebo模拟传感器
以libgazebo_ros_ray_sensor.so为例,它用于模拟一个激光雷达传感器。
1. 在URDF/SDF文件中设置topic
1 | <sensor name="laser" type="ray"> |
我们改写一下
1 | <plugin name='laser' filename='libgazebo_ros_ray_sensor.so'> |
重新编译,运行
增加了–ros-args –remap 参数,表示要将topic重命名为out,此时topic名称为/demo/laser/out
再改写一下
1 | <plugin name='laser' filename='libgazebo_ros_ray_sensor.so'> |
此处取消了namespace的设置,话题名称被重命名为scan
1 | <ros> |
如果不去重命名topic
1 | <ros> |
默认话题名称为/laser/out
再改写一下
1 | <ros> |
用argument取代remapping,结果为
2. 在Launch文件中设置topic
1 | spawn_entity = Node(package='gazebo_ros', node_executable='spawn_entity.py', |
在arguments参数列表中,第二个参数’demo’代表命名空间,因此在孵化机器人模型的过程中会为机器人的参数如topic添加该命名空间,并且此处设置的topic的命名空间优先级高于SDF或者URDF文件中的配置。
需要将第二个参数设置为空
Gazebo与Rviz仿真同步
问题:将turtlebot3的burger模型与turtlebot3_world世界导入到自定义的孵化器中,在Gazebo中运行该模型,接下来运行turtlebotbot3_navigation,发现无论如何操纵rviz中的2D Pose Estimate去初始化机器人的位置都不成功,自然向Nav2 Goal更是不可能完成。
具体操作步骤:
从turtlebot3_gazebo源码中拷贝models文件夹中turtlebot3_burger以及turtlebot3_common文件夹到自定义工程的models文件夹下
拷贝turtlebot3的世界turtlebot3_world文件夹到自定义工程的models文件夹下
修改自定义工程中的.world文件,此处名为warehouse.world
修改自定义工程中的launch文件
编译运行后,Gazebo正常加载世界与机器人模型,但如果启动nav2却无法加载机器人模型,更无法与Gazebo同步
原因:
turtlebot3的模型由SDF格式来完成,rviz无法解析SDF文件,rviz只能解析URDF文件
解决方法:
拷贝turtlebot3_gazebo源码models文件夹下的urdf文件夹到自定义工程的models文件夹下
修改自定义工程的launch文件,需要启动robot state publisher节点去接卸turtlebot3的urdf文件。拷贝turtlebot3_gazebo源码中的robot_state_publiser.launch.py到自定义工程的launch文件夹下,修改gazebo_world.launch.py文件
重新编译,运行,然后在新的terminal中启动nav2(自定义或者turtlebot3的nav2都行)

注意
warehouse.world文件中physics属性的设置会影响机器人的运行速度
其中max_step_size设置过大,机器人会加速运行,而real_time_update_rate设置越大,整体运行速度越慢。