关于URDF(Xacro)、Rviz 和 Gazebo 三者的关系,前面已有阐述: URDF 用于创建机器人模型、Rviz 可以显示机器人感知到的环境信息,Gazebo 用于仿真,可以模拟外界环境,以及机器人的一些传感器,如何在 Gazebo 中运行这些传感器,并显示这些传感器的数据(机器人的视角)呢?本节主要介绍的重点就是将三者结合:通过 Gazebo 模拟机器人的传感器,然后在 Rviz 中显示这些传感器感知到的数据。主要内容包括:
运动控制以及里程计信息显示
雷达信息仿真以及显示
摄像头信息仿真以及显示
kinect 信息仿真以及显示
**
**
gazebo 中已经可以正常显示机器人模型了,那么如何像在 rviz 中一样控制机器人运动呢?在此,需要涉及到ros中的组件: ros_control。
1.ros_control 简介
场景:同一套 ROS 程序,如何部署在不同的机器人系统上,比如:开发阶段为了提高效率是在仿真平台上测试的,部署时又有不同的实体机器人平台,不同平台的实现是有差异的,如何保证 ROS 程序的可移植性?ROS 内置的解决方式是 ros_control。
ros_control:是一组软件包,它包含了控制器接口,控制器管理器,传输和硬件接口。ros_control 是一套机器人控制的中间件,是一套规范,不同的机器人平台只要按照这套规范实现,那么就可以保证 与ROS 程序兼容,通过这套规范,实现了一种可插拔的架构设计,大大提高了程序设计的效率与灵活性。
gazebo 已经实现了 ros_control 的相关接口,如果需要在 gazebo 中控制机器人运动,直接调用相关接口即可
2.运动控制实现流程(Gazebo)
承上,运动控制基本流程:
已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加传动装置以及控制器
将此文件集成进xacro文件
启动 Gazebo 并发布 /cmd_vel 消息控制机器人运动
2.1 为 joint 添加传动装置以及控制器
两轮差速配置:
transmission_interface/SimpleTransmission
hardware_interface/VelocityJointInterface
hardware_interface/VelocityJointInterface
1
Debug
true
/
1
true
true
100.0
true
left_wheel2base_link
right_wheel2base_link
${base_link_radius * 2}
${wheel_radius * 2}
1
30
1.8
cmd_vel
odom
odom
base_footprint
2.2 xacro文件集成
最后还需要将上述 xacro 文件集成进总的机器人模型文件,代码示例如下:
当前核心: 包含 控制器以及传动配置的 xacro 文件
2.3 启动 gazebo并控制机器人运动
launch文件:
3.2 添加组件
执行 launch 文件后,在 Rviz 中添加图示组件:
二、激光雷达仿真
通过 Gazebo 模拟激光雷达传感器,并在 Rviz 中显示激光数据。
实现流程:
雷达仿真基本流程:
已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加雷达配置;
将此文件集成进xacro文件;
启动 Gazebo,使用 Rviz 显示雷达信息。
1.Gazebo 仿真雷达
1.1 新建 Xacro 文件,配置雷达传感器信息
0 0 0 0 0 0
true
5.5
360
1
-3
3
0.10
30.0
0.01
gaussian
0.0
0.01
/scan
laser
1.2 xacro 文件集成
将步骤1的 Xacro 文件集成进总的机器人模型文件,代码示例如下:
1.3启动仿真环境
编写launch文件,启动gazebo,此处略…
2.Rviz 显示雷达数据
先启动 rviz,添加雷达信息显示插件
三、摄像头信息仿真以及显示
通过 Gazebo 模拟摄像头传感器,并在 Rviz 中显示摄像头数据。
实现流程:
摄像头仿真基本流程:
已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加摄像头配置;
将此文件集成进xacro文件;
启动 Gazebo,使用 Rviz 显示摄像头信息。
1.Gazebo 仿真摄像头
1.1 新建 Xacro 文件,配置摄像头传感器信息
30.0
1.3962634
1280
720
R8G8B8
0.02
300
gaussian
0.0
0.007
true
0.0
/camera
image_raw
camera_info
camera
0.07
0.0
0.0
0.0
0.0
0.0
1.2 xacro 文件集成
将步骤1的 Xacro 文件集成进总的机器人模型文件,代码示例如下:
1.3启动仿真环境
编写launch文件,启动gazebo,此处略…
2.Rviz 显示摄像头数据
执行 gazebo 并启动 Rviz,在 Rviz 中添加摄像头组件。
四、 kinect信息仿真以及显示
通过 Gazebo 模拟kinect摄像头,并在 Rviz 中显示kinect摄像头数据。
实现流程:
kinect摄像头仿真基本流程:
已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加kinect摄像头配置;
将此文件集成进xacro文件;
启动 Gazebo,使用 Rviz 显示kinect摄像头信息。
1.Gazebo仿真Kinect
1.1 新建 Xacro 文件,配置 kinetic传感器信息
true
20.0
${60.0*PI/180.0}
R8G8B8
640
480
0.05
8.0
camera
true
10
rgb/image_raw
depth/image_raw
depth/points
rgb/camera_info
depth/camera_info
kinect link名称
0.1
0.0
0.0
0.0
0.0
0.0
0.4
1.2 xacro 文件集成
将步骤1的 Xacro 文件集成进总的机器人模型文件,代码示例如下:
1.3启动仿真环境
编写launch文件,启动gazebo,此处略…
2 Rviz 显示 Kinect 数据
启动 rviz,添加摄像头组件查看数据
五、补充:kinect 点云数据显示
在kinect中也可以以点云的方式显示感知周围环境,在 rviz 中操作如下:
问题:在rviz中显示时错位。
原因:在kinect中图像数据与点云数据使用了两套坐标系统,且两套坐标系统位姿并不一致。
解决:
1.在插件中为kinect设置坐标系,修改配置文件的标签内容:
support_depth
2.发布新设置的坐标系到kinect连杆的坐标变换关系,在启动rviz的launch中,添加: