Ubuntu 20 环境下 ROS Noetic 与 Cartographer_ros 的编译部署指南
引言
在机器人导航和建图领域,ROS(Robot Operating System)提供了强大的工具和框架,支持开发者高效构建复杂的机器人应用。其中,ROS Noetic 是 ROS 1 系列的最新长期支持版本,兼容 Ubuntu 20.04 LTS(Focal Fossa),而 Cartographer_ros 是 Google 开发的开源实时SLAM(Simultaneous Localization and Mapping)框架,广泛应用于机器人导航和环境建图。本文将详细介绍如何在 Ubuntu 20.04 环境下编译部署 ROS Noetic 及 Cartographer_ros,帮助开发者快速搭建和配置开发环境。
目录
系统环境准备
在开始安装和编译之前,确保您的系统满足以下要求:
- 操作系统:Ubuntu 20.04 LTS(Focal Fossa)
- CPU:推荐多核处理器以加快编译速度
- 内存:至少 8GB
- 存储:建议至少 20GB 可用空间
- 网络:稳定的互联网连接,用于下载软件包和依赖
确保系统已更新到最新状态:
sudo apt update
sudo apt upgrade -y
安装 ROS Noetic
配置软件源
设置 ROS 软件源的密钥
首先,导入 ROS 软件源的密钥,以确保软件包的安全性。
sudo apt install curl gnupg lsb-release -y curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
添加 ROS 软件源
将 ROS 软件源添加到系统的
sources.list
文件中。sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-noetic.list'
安装 ROS Noetic 基础包
更新软件包索引并安装 ROS Noetic 的基础包。
sudo apt update
sudo apt install ros-noetic-desktop-full -y
解释:
ros-noetic-desktop-full
:安装 ROS Noetic 的完整桌面版本,包括常用工具和仿真环境。
初始化 rosdep
rosdep
是 ROS 的一个依赖管理工具,用于自动安装系统依赖。
sudo apt install python3-rosdep -y
sudo rosdep init
rosdep update
解释:
rosdep init
:初始化 rosdep 数据库。rosdep update
:更新 rosdep 数据库信息。
设置环境变量
为了方便在每次终端会话中使用 ROS 命令,需要将 ROS 的环境变量添加到 bash 配置文件中。
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
解释:
source /opt/ros/noetic/setup.bash
:加载 ROS 环境变量。~/.bashrc
:Bash 的启动脚本,每次打开终端时执行。
安装 ROS Noetic 常用工具
安装一些常用的 ROS 工具和依赖。
sudo apt install python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y
解释:
python3-rosinstall
、python3-rosinstall-generator
、python3-wstool
:用于管理 ROS 工作空间的软件包。build-essential
:包含编译所需的基本工具,如 GCC、G++ 等。
安装依赖库和工具
在编译 ROS 包和 Cartographer_ros 之前,需要安装一些依赖库和工具。
sudo apt install cmake git libprotobuf-dev protobuf-compiler libprotoc-dev libeigen3-dev libboost-all-dev libgflags-dev libgoogle-glog-dev libgtest-dev libatlas-base-dev libsuitesparse-dev libyaml-cpp-dev -y
解释:
cmake
:跨平台的自动化构建系统。git
:版本控制系统,用于克隆代码仓库。- 其他库:提供编译和运行 Cartographer_ros 所需的数学、优化和解析功能。
编译 ROS 工作空间
创建工作空间
创建一个用于存放 ROS 包的工作空间目录,例如
catkin_ws
。mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make
解释:
catkin_make
:构建 ROS 工作空间中的包。
设置工作空间环境变量
将工作空间的
setup.bash
文件添加到环境变量中。echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc
安装 Cartographer_ros
克隆 Cartographer_ros 仓库
导航到工作空间的
src
目录cd ~/catkin_ws/src
克隆 Cartographer_ros 和 Cartographer 仓库
git clone https://github.com/cartographer-project/cartographer_ros.git git clone https://github.com/cartographer-project/cartographer.git
解释:
cartographer_ros
:ROS 包装器,用于集成 Cartographer 到 ROS 环境中。cartographer
:Cartographer 的核心代码库。
安装 Cartographer 依赖
使用 rosdep
安装 Cartographer_ros 所需的所有依赖。
cd ~/catkin_ws/
rosdep install --from-paths src --ignore-src --rosdistro noetic -y
解释:
--from-paths src
:指定源代码所在路径。--ignore-src
:忽略源代码中的依赖,只安装系统依赖。--rosdistro noetic
:指定 ROS 发行版为 Noetic。-y
:自动确认安装。
编译 Cartographer_ros
导航到工作空间根目录
cd ~/catkin_ws/
编译工作空间
catkin_make_isolated --install --use-ninja
解释:
catkin_make_isolated
:独立编译每个包,适用于具有多个依赖关系的项目。--install
:将编译后的文件安装到工作空间的install
目录。--use-ninja
:使用 Ninja 作为构建系统,加快编译速度。
设置环境变量
将安装后的环境变量添加到 bash 配置文件中。
echo "source ~/catkin_ws/install_isolated/setup.bash" >> ~/.bashrc source ~/.bashrc
配置 Cartographer_ros
创建配置文件
Cartographer_ros 需要配置文件来定义传感器信息、地图参数等。通常,这些配置文件以 .lua
格式存在。
创建配置目录
mkdir -p ~/catkin_ws/src/cartographer_ros/config
编写配置文件
创建一个名为
cartographer_config.lua
的配置文件,并根据具体传感器和需求进行调整。include "map_builder.lua" include "trajectory_builder.lua" options = { map_builder = MAP_BUILDER, trajectory_builder = TRAJECTORY_BUILDER, map_frame = "map", tracking_frame = "base_link", published_frame = "base_link", odom_frame = "odom", provide_odom_frame = true, publish_frame_projected_to_2d = false, use_odometry = false, use_nav_sat = false, use_landmarks = false, publish_to_tf = true, max_submaps_to_keep = 3, } MAP_BUILDER.use_trajectory_builder_2d = true TRAJECTORY_BUILDER_2D.min_range = 0.3 TRAJECTORY_BUILDER_2D.max_range = 30.0 TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1 return options
解释:
map_builder
和trajectory_builder
:引用基础构建模块。map_frame
、tracking_frame
等:定义坐标系和帧之间的关系。TRAJECTORY_BUILDER_2D
:配置2D建图参数,如传感器范围等。
调整参数设置
根据实际应用场景和传感器参数,调整配置文件中的各项参数,以优化建图效果。例如:
- 传感器范围:根据激光雷达的最小和最大探测距离调整
min_range
和max_range
。 - 数据积累:调整
num_accumulated_range_data
以控制数据积累的数量。
部署与测试
启动 ROS 核心
在开始运行 Cartographer_ros 之前,需要启动 ROS 核心。
roscore
解释:
roscore
:启动 ROS 主节点,包括参数服务器和 ROS 通信管理。
运行 Cartographer 节点
在另一个终端中,运行 Cartographer_ros 节点,加载配置文件并开始建图。
启动 Cartographer 节点
roslaunch cartographer_ros demo_backpack_2d.launch
解释:
demo_backpack_2d.launch
:示例启动文件,适用于2D建图。实际应用中应根据需求编写自定义启动文件。
发布传感器数据
确保传感器数据(如激光雷达、里程计)正确发布到相应的 ROS 话题。例如:
rosrun rosserial_python serial_node.py /dev/ttyUSB0
解释:
rosserial_python
:将串口数据转换为 ROS 消息,具体命令根据传感器类型和连接方式调整。
可视化建图结果
使用 RViz 进行建图结果的可视化。
启动 RViz
rosrun rviz rviz
配置 RViz
- 添加
Map
、LaserScan
、RobotModel
等显示项。 - 设置固定框架为
map
。 - 调整视图以观察实时建图效果。
- 添加
解释:
RViz
:ROS 的可视化工具,用于显示传感器数据、机器人模型和建图结果。
常见问题及解决方法
1. 编译错误:找不到依赖包
原因:某些依赖包未正确安装或 rosdep
未覆盖所有依赖。
解决方法:
- 确认所有依赖库已安装。
手动安装缺失的依赖包。例如:
sudo apt install ros-noetic-some-package
2. 启动 Cartographer 节点时报错
原因:配置文件错误或传感器数据未正确发布。
解决方法:
- 检查配置文件的语法和参数设置。
- 确认传感器数据正在正确发布到相应的话题,可以使用
rostopic list
和rostopic echo
进行验证。
3. RViz 无法显示建图结果
原因:RViz 配置错误或话题未正确订阅。
解决方法:
- 确认 RViz 的固定框架设置为
map
。 - 检查
Map
显示项订阅了正确的话题。 - 确认 Cartographer 节点正在发布地图数据。
4. 性能问题:建图速度慢或占用过多资源
原因:参数设置不当或硬件资源不足。
解决方法:
- 优化配置文件中的参数,如减少数据积累数量。
- 升级硬件资源,如增加内存或使用更快的处理器。
- 使用更高效的编译选项或优化代码。
5. 连接问题:传感器无法连接或数据传输不稳定
原因:物理连接问题或驱动配置错误。
解决方法:
- 检查传感器与计算机之间的物理连接。
- 确认传感器驱动已正确安装并配置。
- 使用
dmesg
或lsusb
命令检查传感器连接状态。
解决方法总结表
问题 | 可能原因 | 解决方法 |
---|---|---|
找不到依赖包 | 依赖包未安装或 rosdep 未覆盖 | 手动安装缺失的依赖包,运行 rosdep install |
启动 Cartographer 节点时报错 | 配置文件错误或传感器数据未正确发布 | 检查配置文件语法,确保传感器数据正确发布到对应话题 |
RViz 无法显示建图结果 | RViz 配置错误或话题未正确订阅 | 设置固定框架为 map ,检查话题订阅,确保 Cartographer 正在发布地图数据 |
性能问题:建图速度慢或占用过多资源 | 参数设置不当或硬件资源不足 | 优化配置参数,升级硬件资源,使用更高效的编译选项 |
传感器连接问题 | 物理连接问题或驱动配置错误 | 检查物理连接,确认传感器驱动正确安装和配置,使用相关命令检查连接状态 |
解释:
- 系统环境准备:确保操作系统和基本工具的安装与更新。
- 安装 ROS Noetic:配置软件源,安装 ROS 基础包,初始化
rosdep
,设置环境变量。 - 安装依赖库和工具:安装编译和运行 Cartographer_ros 所需的系统库。
- 编译 ROS 工作空间:创建并编译 ROS 工作空间,为后续的包安装做好准备。
- 安装 Cartographer_ros:克隆代码仓库,安装依赖并编译 Cartographer_ros。
- 配置 Cartographer_ros:编写和调整配置文件,以适应具体应用需求。
- 部署与测试:启动 ROS 核心,运行 Cartographer 节点,使用 RViz 进行可视化。
- 常见问题及解决方法:提供常见问题的诊断和解决方案。
- 总结:概括整个编译部署过程,强调关键步骤和注意事项。
总结
在 Ubuntu 20.04 环境下编译部署 ROS Noetic 与 Cartographer_ros 是一个系统性工程,涉及多个步骤和配置。通过本文的详细指南,您可以顺利完成 ROS Noetic 的安装,配置并编译 Cartographer_ros,最终实现机器人导航和环境建图的功能。
关键步骤包括:
- 系统环境准备:确保操作系统和基本工具的更新与安装。
- 安装 ROS Noetic:配置软件源,安装 ROS 基础包,初始化依赖管理工具。
- 安装依赖库和工具:安装编译和运行 Cartographer_ros 所需的系统库和工具。
- 编译 ROS 工作空间:创建并编译 ROS 工作空间,为后续的包安装做好准备。
- 安装 Cartographer_ros:克隆代码仓库,安装依赖并编译 Cartographer_ros。
- 配置 Cartographer_ros:编写和调整配置文件,以适应具体应用需求。
- 部署与测试:启动 ROS 核心,运行 Cartographer 节点,使用 RViz 进行可视化建图。
- 常见问题及解决方法:提供常见问题的诊断和解决方案,确保系统的稳定运行。
在实际应用中,开发者应根据具体的机器人硬件和应用场景,调整和优化配置参数,以获得最佳的建图和导航效果。同时,保持系统和软件包的定期更新,确保兼容性和安全性。
通过遵循本文的指导,您将能够在 Ubuntu 20.04 上成功编译和部署 ROS Noetic 及 Cartographer_ros,为机器人项目的开发和研究奠定坚实的基础。