lego loam学习日记7月26 rosmsg以及话题通信msg

正在学习lego loam。由于是转行的,对ros、C++、SLAM并不熟悉。直接啃slam,走了很多弯路。这个笔记用于记录日常学习琐碎的知识点。

#c 如何理解imageProjection.cpp中,订阅到的消息<sensor_msgs::PointCloud2>?

subLaserCloud = nh.subscribe<sensor_msgs::PointCloud2>(pointCloudTopic, 10, &ImageProjection::cloudHandler, this);
//(pointcloudtopic是bag的topic,4是消息积压队列长度,cloudHandler是回调函数)

#d sensor_msgs::PointCloud2的定义
sensor_msgs::PointCloud2是一种话题通信的msg。

(base) ubuntu@yin:~/project/RQslam/test$ 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
bool is_dense

初看这个数据结构,感到很复杂。当我们使用这个msg时,和使用C++实例化对象时一模一样。我们直接把这个sensor_msgs/PointCloud2东西当做类。(msg一般是模板结构体,结构体和类差不多,我开始学的是Python,早期一直没有结构体的概念…不过这不影响msg的学习)
类是什么?类无非就是一些基本的数据类型+函数,建构出的一个高阶数据类型。对于sensor_msgs/PointCloud2这个类更简单了,只有几个数据类型,甚至没有函数。
通过info,我们对msg进行拆分,结果如下:

std_msgs/Header header
uint32 height
uint32 width
sensor_msgs/PointField[] fields
bool is_bigendian
uint32 point_step
uint32 row_step
uint8[] data
bool is_dense

可以看到,sensor_msgs/PointCloud2是由这9个部分构成的。** 所有复杂的数据都是由简单的组合而成!**
这里面很多是不可再拆的类型,比如:

uint32 height
uint32 width
bool is_bigendian
uint32 point_step
uint32 row_step
uint8[] data
bool is_dense

还有2个较为复杂的。我们先拿一个进行分析:

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

在复杂程度上,sensor_msgs/PointField[]和sensor_msgs/PointCloud2是一样的。他们都是多个数据类型组成的高阶数据类型。
可以看到,sensor_msgs/PointField[]底层的构成依然简单。


突然发现,之前写完的,没有保存草稿。。。过段时间再补

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值