1. 项目概述
最近在机器人导航领域,ROS2和Cartographer的组合越来越受到开发者青睐。作为一名在SLAM领域摸爬滚打多年的工程师,我想分享一套经过实战验证的ROS2 Humble版本与Cartographer安装配置方案,以及如何在Gazebo仿真环境中验证建图效果。
这个方案特别适合以下场景:
- 需要快速搭建ROS2+Cartographer开发环境的研究人员
- 想要评估Cartographer在不同仿真环境中的建图效果的开发者
- 准备将Cartographer应用于实际机器人项目的工程团队
2. 环境准备
2.1 系统要求与基础配置
推荐使用Ubuntu 22.04 LTS作为基础系统,这是ROS2 Humble官方支持的操作系统版本。在开始安装前,有几个关键的系统配置需要确认:
- 确保系统已启用UTF-8编码:
bash复制sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
- 检查并安装必要的依赖:
bash复制sudo apt install curl software-properties-common
注意:如果之前安装过其他版本的ROS,建议先彻底清理旧版本,避免冲突。特别是ROS1和ROS2混装的环境需要格外小心。
2.2 ROS2 Humble安装详解
官方提供了多种安装方式,这里推荐使用deb包安装,这是最稳定可靠的方法:
- 添加ROS2 apt仓库:
bash复制sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
- 安装完整版ROS2:
bash复制sudo apt update
sudo apt install ros-humble-desktop
- 环境变量配置:
bash复制source /opt/ros/humble/setup.bash
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
安装完成后,可以通过运行以下命令验证安装是否成功:
bash复制ros2 run demo_nodes_cpp talker
在另一个终端运行:
bash复制ros2 run demo_nodes_py listener
3. Cartographer安装与配置
3.1 源码编译安装
Cartographer目前没有现成的ROS2 deb包,需要从源码编译安装。以下是详细步骤:
- 安装依赖项:
bash复制sudo apt install -y git cmake python3-colcon-common-extensions libboost-dev libeigen3-dev libceres-dev liblua5.3-dev libprotobuf-dev protobuf-compiler
# 安装abseil-cpp库
sudo apt install -y libabsl-dev
- 创建工作空间并下载源码:
bash复制mkdir -p ~/cartographer_ws/src
cd ~/cartographer_ws/src
git clone https://github.com/cartographer-project/cartographer.git
git clone https://github.com/cartographer-project/cartographer_ros.git
- 使用vcs工具解决依赖:
bash复制sudo apt install -y python3-vcstool
cd ~/cartographer_ws
vcs import src < src/cartographer/ros2/cartographer_ros.repos
- 编译安装:
bash复制cd ~/cartographer_ws
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
提示:编译过程可能会比较耗时,特别是在性能较低的机器上。建议在编译时使用
-j参数指定并行编译任务数,如colcon build --parallel-workers 4。
3.2 环境配置与验证
编译完成后,需要配置环境变量:
bash复制source ~/cartographer_ws/install/setup.bash
echo "source ~/cartographer_ws/install/setup.bash" >> ~/.bashrc
验证安装是否成功:
bash复制ros2 pkg list | grep cartographer
应该能看到cartographer相关的包列表。
4. Gazebo仿真环境搭建
4.1 TurtleBot3仿真包安装
为了测试Cartographer的建图效果,我们使用TurtleBot3作为仿真平台:
- 安装依赖和仿真包:
bash复制sudo apt install -y ros-humble-gazebo-ros-pkgs ros-humble-turtlebot3* ros-humble-nav2*
- 设置TurtleBot3型号:
bash复制echo "export TURTLEBOT3_MODEL=waffle_pi" >> ~/.bashrc
source ~/.bashrc
4.2 启动仿真环境
- 启动Gazebo世界:
bash复制ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
- 在另一个终端启动Cartographer节点:
bash复制ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True
- 启动RViz可视化:
bash复制ros2 launch turtlebot3_cartographer rviz.launch.py
5. 建图与导航测试
5.1 手动建图流程
-
在RViz中,确保添加了以下显示项:
- LaserScan(显示激光数据)
- Map(显示构建的地图)
- TF(查看坐标变换)
-
使用键盘控制机器人移动:
bash复制ros2 run turtlebot3_teleop teleop_keyboard
- 通过WASD键控制机器人移动,观察地图构建过程。
5.2 保存与加载地图
- 保存构建好的地图:
bash复制ros2 run nav2_map_server map_saver_cli -f ~/map
- 加载已有地图进行定位:
bash复制ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True map:=~/map.yaml
6. 常见问题与解决方案
6.1 编译问题排查
-
Protobuf版本冲突:
如果遇到protobuf相关错误,可能是因为系统安装了多个版本的protobuf。解决方案:bash复制sudo apt remove libprotobuf-dev protobuf-compiler sudo apt install libprotobuf-dev=3.12.4-1ubuntu7 protobuf-compiler=3.12.4-1ubuntu7 -
abseil库问题:
如果遇到abseil相关错误,可以尝试:bash复制sudo apt install libabsl-dev=20210324.1-2
6.2 运行时问题
-
TF时间同步问题:
在仿真环境中,确保所有节点都使用相同的时钟源:bash复制ros2 param set /cartographer_node use_sim_time true -
地图不更新:
检查激光雷达数据是否正常发布:bash复制ros2 topic echo /scan如果没有数据,可能是Gazebo插件加载失败。
7. 性能优化技巧
7.1 Cartographer参数调优
Cartographer的性能很大程度上取决于配置文件中的参数。主要配置文件通常位于:
code复制~/cartographer_ws/src/cartographer_ros/cartographer_ros/configuration_files
几个关键参数:
num_range_data:影响建图的平滑度voxel_filter_size:点云降采样粒度optimize_every_n_nodes:优化频率
7.2 系统级优化
- 提高Gazebo性能:
bash复制export LIBGL_ALWAYS_SOFTWARE=1
export GALLIUM_DRIVER=llvmpipe
- 限制RViz刷新率:
在RViz的全局选项中,将Fixed Frame设置为odom,并降低刷新频率。
8. 进阶应用
8.1 多传感器融合
Cartographer支持多种传感器数据融合。要添加IMU数据:
- 修改
backpack_2d.lua配置文件:
lua复制TRAJECTORY_BUILDER_2D.use_imu_data = true
- 确保IMU数据通过
/imu话题发布。
8.2 3D建图配置
对于3D建图,需要使用不同的配置文件:
bash复制ros2 launch cartographer_ros demo_backpack_3d.launch.py bag_filename:=${HOME}/Downloads/b3-2016-04-05-13-54-42.bag
需要准备3D激光雷达数据或相应的仿真环境。
