导航相关消息

地图

地图相关的消息主要有两个:

nav_msgs/MapMetaData

  • 地图元数据,包括地图的宽度、高度、分辨率等。

nav_msgs/OccupancyGrid

  • 地图栅格数据,一般会在rviz中以图形化的方式显示。

nav_msgs/MapMetaData

调用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

nav_msgs/OccupancyGrid

调用 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

地图pgm文件中的每个像素的染色亮度值将被map_server读取并转换为nav_msgs::msg::OccupancyGrid类型中的栅格值,存储在data成员变量中;

地图图片中每个像素可能有多个颜色通道。比如:RGB。像素的明暗程度值是通过求取各个颜色通道的明暗程度值得到的。像素的明暗程度值的范围在0~1.0。

  1. 地图中的每一个像素通道取值在 [0,255] 之间,白色为 255,黑色为 0,透明度通道为0代表完全透明,1代表完全不透明

  2. 首先计算像素明暗程度shade,方法是对于每一个像素的所有通道取平均:

    p r = c o l o r . r e d 255.0 p g = c o l o r . g r e e n 255.0 p b = c o l o r . b l u e 255.0 p a = 1 − c o l o r . a l p h a d a r k = p a + p b + p c + p a 4 l i g h t = 1 − d a r k p_r = \dfrac{color.red}{ 255.0 }\\ p_g = \dfrac{color.green}{ 255.0 }\\ p_b = \dfrac{color.blue}{ 255.0 }\\ p_a = 1-color.alpha\\ dark=\dfrac{p_a+p_b+p_c+p_a}{4}\\ light=1-dark\\ pr=255.0color.redpg=255.0color.greenpb=255.0color.bluepa=1color.alphadark=4pa+pb+pc+palight=1dark

  3. 地图内容数据的转换格式

    • trinary模式
      p = { d a r k n e g a t e = 0 l i g h t n e g a t e = 1 d a t a = { 0 p < f r e e _ t h r e s h 100 p > o c c u p i e d _ t h r e s h − 1 O t h e r w i s e p=\begin{cases} dark & negate=0\\ light & negate=1 \end{cases}\\ data= \begin{cases} 0&p<free\_thresh\\ 100&p>occupied\_thresh\\ -1&Otherwise \end{cases} p={darklightnegate=0negate=1data= 01001p<free_threshp>occupied_threshOtherwise

    • scale模式 如果透明度不是1则

      p = { d a r k n e g a t e = 0 l i g h t n e g a t e = 1 d a t a = { − 1 c o l o r . a l p h a ! = 1 0 p < f r e e _ t h r e s h 100 p > o c c u p i e d _ t h r e s h 100 × p − f r e e _ t h r e s h o c c u p i e d _ t h r e s h − f r e e _ t h r e s h O t h e r w i s e p=\begin{cases} dark & negate=0\\ light & negate=1 \end{cases}\\ data= \begin{cases} -1 & color.alpha!=1\\ 0 & p<free\_thresh\\ 100 & p>occupied\_thresh\\ 100\times\dfrac{p-free\_thresh}{occupied\_thresh-free\_thresh} & Otherwise \end{cases} p={darklightnegate=0negate=1data= 10100100×occupied_threshfree_threshpfree_threshcolor.alpha!=1p<free_threshp>occupied_threshOtherwise

    • raw模式(negate参数不影响)
      p = r o u n d ( l i g h t × 255 )   ( i n   a b s o l u t e   v a l u e ) d a t a = { p 0 ⩽ l i g h t ⩽ 100 − 1 l i g h t ⩾ 101 p={\rm round}(light \times 255)\ (in\ absolute\ value) \\ data= \begin{cases} p & 0 \leqslant light \leqslant 100\\ -1 & light \geqslant 101 \end{cases} p=round(light×255) (in absolute value)data={p10light100light101

where free_thresh and occupied_thresh thresholds are expressed in percentage of maximum lightness/darkness level (255).

里程计

里程计相关消息是: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/tfMessagetf2_msgs/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 #扫描强度数据,如果设备不支持强度数据,该数组为空
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shilong Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值