第一次接触Cartographer时,我被它复杂的依赖关系搞得焦头烂额。经过多次实践,我总结出一套最稳定的安装流程。首先确保你的ROS版本是Melodic或Noetic,我强烈推荐使用Ubuntu 20.04搭配ROS Noetic,这是目前最稳定的组合。
安装基础工具时有个小技巧:先更新apt缓存再安装,可以避免很多奇怪的依赖问题。对于Noetic用户,记得把python-wstool换成python3-wstool:
bash复制sudo apt-get update
sudo apt-get install -y python3-wstool python3-rosdep ninja-build stow
初始化工作空间时最容易出错的是proto3和abseil的安装。这里有个坑我踩过三次:cartographer的package.xml里默认依赖libabsl-dev,但在Ubuntu 20.04上这会引发冲突。正确的做法是:
bash复制# 先注释掉package.xml中的<depend>libabsl-dev</depend>
src/cartographer/scripts/install_abseil.sh
激光雷达驱动安装也有讲究。以RPLiDAR为例,不同型号的启动文件参数差异很大。A1型号需要设置serial_baudrate为115200,而A3型号则需要256000。我建议先用ls /dev/ttyUSB*确认设备节点,再修改launch文件:
xml复制<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="serial_baudrate" type="int" value="115200"/>
让Cartographer同时处理激光雷达和Pixhawk的IMU数据时,最大的挑战是时间同步。我发现90%的定位漂移问题都源于时间戳不同步。解决方法是在launch文件中添加:
xml复制<param name="/use_sim_time" value="false" />
<node name="cartographer_node" pkg="cartographer_ros" type="cartographer_node" args="-configuration_directory $(find cartographer_ros)/configuration_files -configuration_basename cartographer.lua" output="screen">
<remap from="odom" to="/mavros/local_position/odom" />
<remap from="imu" to="/mavros/imu/data" />
</node>
在lua配置文件中,这几个参数对融合效果影响最大:
lua复制TRAJECTORY_BUILDER_2D.use_imu_data = true -- 必须设为true才能启用IMU
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.translation_weight = 0.2
TRAJECTORY_BUILDER_2D.ceres_scan_matcher.rotation_weight = 5
实测发现,当车辆快速转向时,适当提高rotation_weight能显著减少建图扭曲。我建议先用默认参数测试,然后根据实际场景微调:
要让Pixhawk正确接收Cartographer的定位数据,必须修改关键EKF参数。在Mission Planner中设置:
code复制AHRS_EKF_TYPE = 3 # 使用EKF3
EK2_ENABLE = 0 # 禁用EKF2
EK3_ENABLE = 1 # 启用EKF3
EK3_SRC1_POSXY = 6 # 视觉定位XY
EK3_SRC1_POSZ = 1 # 气压计Z
EK3_SRC1_VELXY = 6 # 视觉速度XY
EK3_SRC1_VELZ = 6 # 视觉速度Z
EK3_SRC1_YAW = 6 # 视觉偏航
这里有个隐藏坑点:必须在同一地点执行"Set EKF Origin"和"Set Home"。我遇到过因为两者不一致导致定位突然跳变的情况。正确流程是:
在RViz中正确显示Cartographer地图需要几个关键设置:
如果地图显示异常,可以按这个流程排查:
bash复制# 检查TF树
rosrun tf view_frames
# 检查激光数据
rostopic echo /scan --noarr
# 检查定位输出
rostopic echo /mavros/vision_pose/pose
我常用的调试技巧是在终端实时监控关键话题:
bash复制# 综合监控
rostopic hz /scan /mavros/imu/data /mavros/local_position/odom
# 详细检查
rosrun rqt_graph rqt_graph
当建图出现重影时,通常是时间同步问题。可以尝试:
在室外测试时,强烈建议先进行以下准备:
我遇到过最棘手的问题是"建图漂移",表现为长时间运行后地图整体偏移。解决方案包括:
对于室内环境,这些参数调整很有效:
lua复制TRAJECTORY_BUILDER_2D.min_range = 0.1
TRAJECTORY_BUILDER_2D.max_range = 8
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 5
最后提醒一个安全事项:永远先在仿真环境中测试新参数,我用Gazebo搭建的测试场景至少避免了十几次实地翻车事故。保存所有配置文件的版本也很重要,我习惯用git管理整个工作空间:
bash复制cd ~/mav_ws
git init
git add .
git commit -m "before field test 20230801"