最近使用stage_ros进行仿真,将点云投影到map坐标系下可视化的时候,发现在free区域也返回激光数据点。用rostopic echo查看scan消息后注意到,stage模拟的激光传感器在free区域也会返回range值,但intensity值为0。用intensity滤去之后就正常了。事实上,当模拟的激光束没有击中障碍物时,返回的range值为激光传感器的最大测量值。因此,用开区间传感测量范围对range值进行滤除也是可以的。
再者,按照stage的说明,在.world文件里用Position模型定义机器人时,将localization设为gps,localication_origin设为[0 0 0 0],订阅/odom消息可以得到位姿估计的真值。然而在实际测试过程中发现,在这种配置下,得到的位姿并不是真值,将点云投影到世界坐标系下,有明显的偏差。所以如果不考虑定位算法,想直接获取位姿估计的真值,还是得老老实实订阅/base_pose_ground_truth消息。还有一点需要注意的是,从/base_pose_ground_truth得到的速度信息和/odom是不一样的。如果是做运动规划/导航的话,当前速度信息只能从/odom获取。因此,如果既想得到位姿估计的真值又想获取机器人的当前速度,还需要用message_filter对/base_pose_ground_truth和/odom进行消息同步。