一、地图消息
地图相关的消息主要有两个:
nav_msgs/MapMetaData 地图元数据,包括地图的宽度、高度、分辨率等。
nav_msgs/OccupancyGrid 地图栅格数据,一般会在rviz中以图形化的方式显示。
调用rosmsg info nav_msgs/MapMetaData
显示消息内容如下:
time map_load_time
float32 resolution #地图分辨率
uint32 width #地图宽度
uint32 height #地图高度
geometry_msgs/Pose origin #地图位姿数据
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
调用 rosmsg info nav_msgs/OccupancyGrid
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
#--- 地图元数据
nav_msgs/MapMetaData info
time map_load_time
float32 resolution
uint32 width
uint32 height
geometry_msgs/Pose origin
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
#--- 地图内容数据,数组长度 = width * height
int8[] data
二、里程计消息
里程计相关消息是:nav_msgs/Odometry,调用rosmsg info nav_msgs/Odometry
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/Pose pose #里程计位姿
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
float64[36] covariance
geometry_msgs/TwistWithCovariance twist
geometry_msgs/Twist twist #速度
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z
# 协方差矩阵
float64[36] covariance
三、坐标变换消息
坐标变换相关消息是: tf/tfMessage,调用rosmsg info tf/tfMessage
显示消息内容如下:
geometry_msgs/TransformStamped[] transforms #包含了多个坐标系相对关系数据的数组
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string child_frame_id
geometry_msgs/Transform transform
geometry_msgs/Vector3 translation
float64 x
float64 y
float64 z
geometry_msgs/Quaternion rotation
float64 x
float64 y
float64 z
float64 w
四、定位消息
定位相关消息是:geometry_msgs/PoseArray,调用rosmsg info geometry_msgs/PoseArray
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Pose[] poses #预估的点位姿组成的数组
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
五、目标点与路劲规划消息
目标点相关消息是:move_base_msgs/MoveBaseActionGoal,调用rosmsg info move_base_msgs/MoveBaseActionGoal
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
actionlib_msgs/GoalID goal_id
time stamp
string id
move_base_msgs/MoveBaseGoal goal
geometry_msgs/PoseStamped target_pose
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Pose pose #目标点位姿
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
路径规划相关消息是:nav_msgs/Path,调用rosmsg info nav_msgs/Path
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/PoseStamped[] poses #由一系列点组成的数组
std_msgs/Header header
uint32 seq
time stamp
string frame_id
geometry_msgs/Pose pose
geometry_msgs/Point position
float64 x
float64 y
float64 z
geometry_msgs/Quaternion orientation
float64 x
float64 y
float64 z
float64 w
六、激光雷达消息
激光雷达相关消息是:sensor_msgs/LaserScan,调用rosmsg info sensor_msgs/LaserScan
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
float32 angle_min #起始扫描角度(rad)
float32 angle_max #终止扫描角度(rad)
float32 angle_increment #测量值之间的角距离(rad)
float32 time_increment #测量间隔时间(s)
float32 scan_time #扫描间隔时间(s)
float32 range_min #最小有效距离值(m)
float32 range_max #最大有效距离值(m)
float32[] ranges #一个周期的扫描数据
float32[] intensities #扫描强度数据,如果设备不支持强度数据,该数组为空
七、相机消息
深度相机相关消息有:sensor_msgs/Image、sensor_msgs/CompressedImage、sensor_msgs/PointCloud2
sensor_msgs/Image 对应的一般的图像数据,sensor_msgs/CompressedImage 对应压缩后的图像数据,sensor_msgs/PointCloud2 对应的是点云数据(带有深度信息的图像数据)。
调用rosmsg info sensor_msgs/Image
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
uint32 height #高度
uint32 width #宽度
string encoding #编码格式:RGB、YUV等
uint8 is_bigendian #图像大小端存储模式
uint32 step #一行图像数据的字节数,作为步进参数
uint8[] data #图像数据,长度等于 step * height
调用rosmsg info sensor_msgs/CompressedImage
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
string format #压缩编码格式(jpeg、png、bmp)
uint8[] data #压缩后的数据
调用rosmsg info sensor_msgs/PointCloud2
显示消息内容如下:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
uint32 height #高度
uint32 width #宽度
sensor_msgs/PointField[] fields #每个点的数据类型
uint8 INT8=1
uint8 UINT8=2
uint8 INT16=3
uint8 UINT16=4
uint8 INT32=5
uint8 UINT32=6
uint8 FLOAT32=7
uint8 FLOAT64=8
string name
uint32 offset
uint8 datatype
uint32 count
bool is_bigendian #图像大小端存储模式
uint32 point_step #单点的数据字节步长
uint32 row_step #一行数据的字节步长
uint8[] data #存储点云的数组,总长度为 row_step * height
bool is_dense #是否有无效点
八、深度图像转激光数据
8.1、优缺点
**优点:**深度相机的成本一般低于激光雷达,可以降低硬件成本;
缺点: 深度相机较之于激光雷达无论是检测范围还是精度都有不小的差距,SLAM效果可能不如激光雷达理想。
8.2、安装
sudo apt-get install ros-melodic-depthimage-to-laserscan
8.3、节点说明
depthimage_to_laserscan 功能包的核心节点是:depthimage_to_laserscan ,为了方便调用,需要先了解该节点订阅的话题、发布的话题以及相关参数。
8.3.1订阅的Topic
image(sensor_msgs/Image) 输入图像信息。
camera_info(sensor_msgs/CameraInfo) 关联图像的相机信息。通常不需要重新映射,因为camera_info将从与image相同的命名空间中进行订阅。
8.3.2发布的Topic
scan(sensor_msgs/LaserScan) 发布转换成的激光雷达类型数据。
8.3.3参数
该节点参数较少,只有如下几个,一般需要设置的是: output_frame_id。
scan_height(int, default: 1 pixel) 设置用于生成激光雷达信息的象素行数。
scan_time(double, default: 1/30.0Hz (0.033s)) 两次扫描的时间间隔。
range_min(double, default: 0.45m) 返回的最小范围。结合range_max使用,只会获取 range_min 与 range_max 之间的数据。
range_max(double, default: 10.0m) 返回的最大范围。结合range_min使用,只会获取 range_min 与 range_max 之间的数据。
output_frame_id(str, default: camera_depth_frame) 激光信息的ID。
8.4、测试
编写launch文件执行,将深度信息转换成雷达信息
<launch>
<node pkg="depthimage_to_laserscan" type="depthimage_to_laserscan" name="depthimage_to_laserscan">
<remap from="image" to="/camera/depth/image_raw" />
<param name="output_frame_id" value="camera" />
</node>
</launch>
Copy
订阅的话题需要根据深度相机发布的话题设置,output_frame_id需要与深度相机的坐标系一致。
经过信息转换之后,深度相机也将发布雷达数据,为了不产生混淆,可以注释掉 xacro 文件中的关于激光雷达的部分内容。
启动gazebo仿真环境,如下: