报错:
[ WARN] [1652516663.964101392]: MessageFilter [target=odom_combined ]: Dropped 100.00% of messages so far. Please turn the [ros.octomap_server.message_filter] rosconsole logger to DEBUG for more information.
报错原因:
启动octomap建图时,ros系统中的坐标转换(tf,transform frame)不正确,默认的frame_id“odom_combined”(上图箭头处),不能与tf树建立联系。
这里参考了这个进行分析,不过它不针对octomap这个问题:https://blog.csdn.net/just_do_it567/article/details/115673347
解决方法:
最简单的解决方法就是把octomap的坐标系直接换成激光雷达点云坐标系/其他传感器坐标系,或者定位、slam输出的坐标系,这里改成了kitti数据的坐标系
<!-- <param name="frame_id" type="string" value="odom_combined" /> 修改坐标系-->
<param name="frame_id" type="string" value="velo_link" />
修改后的octomap_mapping.launch文件如下:
<!--
Example launch file for octomap_server mapping:
Listens to incoming PointCloud2 data and incrementally builds an octomap.
The data is sent out in different representations.
Copy this file into your workspace and adjust as needed, see
www.ros.org/wiki/octomap_server for details
-->
<launch>
<node pkg="octomap_server" type="octomap_server_node" name="octomap_server">
<param name="resolution" value="0.05" />
<!-- fixed map frame (set to 'map' if SLAM or localization running!) -->
<!-- <param name="frame_id" type="string" value="odom_combined" /> 修改坐标系-->
<param name="frame_id" type="string" value="velo_link" />
<!-- maximum range to integrate (speedup!) 传感器数据半径,可能需要修改,默认为5.0可能有些小-->
<param name="sensor_model/max_range" value="35.0" />
<!-- data source to integrate (PointCloud2) 输入点云-->
<remap from="cloud_in" to="/points_ground" />
<!-- <remap from="cloud_in" to="/points_no_ground" /> -->
</node>
</launch>
参考链接:
ros wiki octomap_server:octomap_server - ROS Wiki