1.官网教程链接(一定要看!!不然不知道我在说啥)
https://wiki.ros.org/cn/navigation/Tutorials/RobotSetup/Sensors
2.主要内容 ros下导航功能包接收的两种传感器数据格式sensor_msgs/LaserScan和sensor_msgs/PointCloud的消息发布代码案例。
https://wiki.ros.org/sensor_msgs 包含传感器信息格式
3.学习过程记录 1)在完成laserscan的消息发布之后,我运行了
rosrun robot_setup_tf laserscan_broadcaster
rostopic echo /scan
注:这里省略了功能包建立+Cmake文件编辑+文件编译,请参考我的上一篇文档ros_navigation学习① 机器人配置TF 查看了 节点发布的话题消息的内容,这样是有助于对代码的理解的。 2)第二部分是点云数据结构 所有代码语句和雷达的是一样的,但是PointCloud的消息格式比较简单,这里我粘贴一下两种消息格式
/LaserScan Header header float32 angle_min # scan的开始角度 [弧度] float32 angle_max # scan的结束角度 [弧度] float32 angle_increment # 测量的角度间的距离 [弧度] float32 time_increment # 测量间的时间 [秒] float32 scan_time # 扫描间的时间 [秒] float32 range_min # 最小的测量距离 [米] float32 range_max # 最大的测量距离 [米] float32[] ranges # 测量的距离数据 [米] (注意: 值 < range_min 或 > range_max 应当被丢弃) float32[] intensities # 强度数据 [device-specific units]
/PointCloud Header header geometry_msgs/Point32[] points #3d点的阵列 ChannelFloat32[] channels #每个通道应该有与点阵列相同数量的元素,每个通道中的数据应该与每个点1:1对应。
(啊啊啊啊啊我电脑中文输入法瘫痪了,在用平板写) ①出现数据访问错误 一般是访问了数据结构溢出或者没有定义的属性 这是在编译时不会报的错 ②通过
rostopic echo /cloud
可以看出确实ros::Rate r(0.5) 代表频率为0.5hz 以及代码的注释理解都正确 ③小数点后第七位开始出现电脑计算误差(根据我的设置应该均为0)
|