前言
本人ROS小白,利用寒假时间学习ROS,在此以笔记的方式记录自己每天的学习过程。争取写满20篇(13/20)。
环境:Ubuntu20.04、ROS1:noetic
环境配置:严格按照下方学习链接的教程配置,基本一次成功。
学习链接:【Autolabor初级教程】ROS机器人入门
对应链接文档:ROS机器人入门课程《ROS理论与实践》
笔记绝大部分代码使用Python语言编写。
本期关键词:导航相关消息
1. 地图消息
nav_msgs/MapMetaData
包括地图的分辨率、宽度、高度等。
time map_load_time
float32 resolution #地图分辨率
uint32 width #地图宽度
uint32 height #地图高度
geometry_msgs/Pose origin #地图位姿数据geometry_msgs/Point position(地图原点坐标,2D地图的z为0)float64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w
nav_msgs/OccupancyGrid
地图栅格数据,一般在rviz中以图形化方式显示。
std_msgs/Header headeruint32 seqtime stampstring frame_id
#--- 地图元数据
nav_msgs/MapMetaData infotime map_load_timefloat32 resolutionuint32 widthuint32 heightgeometry_msgs/Pose origingeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w
#--- 地图内容数据,数组长度 = width * height
int8[] data
2. 里程计消息
nav_msgs/Odometry
包含了位姿信息和速度信息。
std_msgs/Header headeruint32 seqtime stampstring frame_id
string child_frame_id
geometry_msgs/PoseWithCovariance posegeometry_msgs/Pose pose #里程计位姿geometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 wfloat64[36] covariance # 协方差矩阵
geometry_msgs/TwistWithCovariance twistgeometry_msgs/Twist twist #速度geometry_msgs/Vector3 linearfloat64 xfloat64 yfloat64 zgeometry_msgs/Vector3 angularfloat64 xfloat64 yfloat64 z # 协方差矩阵float64[36] covariance
3. 坐标变换消息
tf/tfMessage
坐标变换消息,在之前“TF坐标变换”里也有提到。
geometry_msgs/TransformStamped[] transforms #包含了多个坐标系相对关系数据的数组std_msgs/Header headeruint32 seqtime stampstring frame_idstring child_frame_idgeometry_msgs/Transform transformgeometry_msgs/Vector3 translationfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion rotationfloat64 xfloat64 yfloat64 zfloat64 w
4. 定位消息
geometry_msgs/PoseArray
AMCL定位相关,rviz订阅后可显示箭头粒子群。
std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/Pose[] poses #预估的点位姿组成的数组geometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w
5. 目标点与路径规划消息
move_base_msgs/MoveBaseActionGoal
std_msgs/Header headeruint32 seqtime stampstring frame_id
actionlib_msgs/GoalID goal_idtime stampstring id
move_base_msgs/MoveBaseGoal goalgeometry_msgs/PoseStamped target_posestd_msgs/Header headeruint32 seqtime stampstring frame_idgeometry_msgs/Pose pose #目标点位姿geometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w
nav_msgs/Path
rviz订阅该话题可以在地图上显示导航路径。
std_msgs/Header headeruint32 seqtime stampstring frame_id
geometry_msgs/PoseStamped[] poses #由一系列点组成的数组std_msgs/Header headeruint32 seqtime stampstring frame_idgeometry_msgs/Pose posegeometry_msgs/Point positionfloat64 xfloat64 yfloat64 zgeometry_msgs/Quaternion orientationfloat64 xfloat64 yfloat64 zfloat64 w
6. 雷达消息
sensor_msgs/LaserScan
std_msgs/Header headeruint32 seqtime stampstring 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 #扫描强度数据,如果设备不支持强度数据,该数组为空;强度:扫描到不同材料,强度可能不同
7. 摄像头消息
sensor_msgs/Image
话题:/camera/rgb/image_raw
、/camera/image_raw
、/camera/depth/image_raw
都是使用sensor_msgs/Image
消息类型。
std_msgs/Header headeruint32 seqtime stampstring frame_id
uint32 height #高度
uint32 width #宽度
string encoding #编码格式:RGB、YUV等
uint8 is_bigendian #图像大小端存储模式
uint32 step #一行图像数据的字节数,作为步进参数
uint8[] data #图像数据,长度等于 step * height
sensor_msgs/CompressedImage
在sensor_msgs/Image的基础上压缩后的数据。
std_msgs/Header headeruint32 seqtime stampstring frame_id
string format #压缩编码格式(jpeg、png、bmp)
uint8[] data #压缩后的数据
sensor_msgs/PointCloud2
点云数据:带有深度信息的图像数据。
std_msgs/Header headeruint32 seqtime stampstring frame_id
uint32 height #高度
uint32 width #宽度
sensor_msgs/PointField[] fields #每个点的数据类型(datatype)uint8 INT8=1uint8 UINT8=2uint8 INT16=3uint8 UINT16=4uint8 INT32=5uint8 UINT32=6uint8 FLOAT32=7uint8 FLOAT64=8string nameuint32 offsetuint8 datatypeuint32 count
bool is_bigendian #图像大小端存储模式
uint32 point_step #单点的数据字节步长
uint32 row_step #一行数据的字节步长
uint8[] data #存储点云的数组,总长度为 row_step * height
bool is_dense #是否有无效点
往期内容
- ROS学习笔记1:基础知识
- ROS学习笔记2:话题通信
- ROS学习笔记3:服务通信与参数服务器
- ROS常用命令记录
- ROS学习笔记4:通信机制实操
- ROS学习笔记5:常用API和模块导入
- ROS学习笔记6:launch文件
- ROS学习笔记7:重名解决与名称设置
- ROS学习笔记8:TF坐标变换
- ROS学习笔记9:TF坐标变换实操
- ROS学习笔记10:rosbag与rqt
- ROS学习笔记11:URDF
- ROS学习笔记12:机器人导航实现(理论)