Loading... # 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,帮助开发者快速搭建和配置开发环境。 ## 目录 1. [系统环境准备](#系统环境准备) 2. [安装 ROS Noetic](#安装-ros-noetic) - [配置软件源](#配置软件源) - [安装 ROS Noetic 基础包](#安装-ros-noetic-基础包) - [初始化 rosdep](#初始化-rosdep) - [设置环境变量](#设置环境变量) - [安装 ROS Noetic 常用工具](#安装-ros-noetic-常用工具) 3. [安装依赖库和工具](#安装依赖库和工具) 4. [编译 ROS 工作空间](#编译-ros-工作空间) 5. [安装 Cartographer_ros](#安装-cartographer_ros) - [克隆 Cartographer_ros 仓库](#克隆-cartographer_ros-仓库) - [安装 Cartographer 依赖](#安装-cartographer-依赖) - [编译 Cartographer_ros](#编译-cartographer_ros) 6. [配置 Cartographer_ros](#配置-cartographer_ros) - [创建配置文件](#创建配置文件) - [调整参数设置](#调整参数设置) 7. [部署与测试](#部署与测试) - [启动 ROS 核心](#启动-ros-核心) - [运行 Cartographer 节点](#运行-cartographer-节点) - [可视化建图结果](#可视化建图结果) 8. [常见问题及解决方法](#常见问题及解决方法) 9. [总结](#总结) 10. [原理解释图](#原理解释图) ## 系统环境准备 在开始安装和编译之前,确保您的系统满足以下要求: - **操作系统**:Ubuntu 20.04 LTS(Focal Fossa) - **CPU**:推荐多核处理器以加快编译速度 - **内存**:至少 8GB - **存储**:建议至少 20GB 可用空间 - **网络**:稳定的互联网连接,用于下载软件包和依赖 确保系统已更新到最新状态: ```bash sudo apt update sudo apt upgrade -y ``` ## 安装 ROS Noetic ### 配置软件源 1. **设置 ROS 软件源的密钥** 首先,导入 ROS 软件源的密钥,以确保软件包的安全性。 ```bash sudo apt install curl gnupg lsb-release -y curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - ``` 2. **添加 ROS 软件源** 将 ROS 软件源添加到系统的 `sources.list` 文件中。 ```bash 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 的基础包。 ```bash sudo apt update sudo apt install ros-noetic-desktop-full -y ``` **解释**: - `ros-noetic-desktop-full`:安装 ROS Noetic 的完整桌面版本,包括常用工具和仿真环境。 ### 初始化 rosdep `rosdep` 是 ROS 的一个依赖管理工具,用于自动安装系统依赖。 ```bash sudo apt install python3-rosdep -y sudo rosdep init rosdep update ``` **解释**: - `rosdep init`:初始化 rosdep 数据库。 - `rosdep update`:更新 rosdep 数据库信息。 ### 设置环境变量 为了方便在每次终端会话中使用 ROS 命令,需要将 ROS 的环境变量添加到 bash 配置文件中。 ```bash echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` **解释**: - `source /opt/ros/noetic/setup.bash`:加载 ROS 环境变量。 - `~/.bashrc`:Bash 的启动脚本,每次打开终端时执行。 ### 安装 ROS Noetic 常用工具 安装一些常用的 ROS 工具和依赖。 ```bash 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 之前,需要安装一些依赖库和工具。 ```bash 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 工作空间 1. **创建工作空间** 创建一个用于存放 ROS 包的工作空间目录,例如 `catkin_ws`。 ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` **解释**: - `catkin_make`:构建 ROS 工作空间中的包。 2. **设置工作空间环境变量** 将工作空间的 `setup.bash` 文件添加到环境变量中。 ```bash echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc ``` ## 安装 Cartographer_ros ### 克隆 Cartographer_ros 仓库 1. **导航到工作空间的 `src` 目录** ```bash cd ~/catkin_ws/src ``` 2. **克隆 Cartographer_ros 和 Cartographer 仓库** ```bash 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 所需的所有依赖。 ```bash 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 1. **导航到工作空间根目录** ```bash cd ~/catkin_ws/ ``` 2. **编译工作空间** ```bash catkin_make_isolated --install --use-ninja ``` **解释**: - `catkin_make_isolated`:独立编译每个包,适用于具有多个依赖关系的项目。 - `--install`:将编译后的文件安装到工作空间的 `install` 目录。 - `--use-ninja`:使用 Ninja 作为构建系统,加快编译速度。 3. **设置环境变量** 将安装后的环境变量添加到 bash 配置文件中。 ```bash echo "source ~/catkin_ws/install_isolated/setup.bash" >> ~/.bashrc source ~/.bashrc ``` ## 配置 Cartographer_ros ### 创建配置文件 Cartographer_ros 需要配置文件来定义传感器信息、地图参数等。通常,这些配置文件以 `.lua` 格式存在。 1. **创建配置目录** ```bash mkdir -p ~/catkin_ws/src/cartographer_ros/config ``` 2. **编写配置文件** 创建一个名为 `cartographer_config.lua` 的配置文件,并根据具体传感器和需求进行调整。 ```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 核心。 ```bash roscore ``` **解释**: - `roscore`:启动 ROS 主节点,包括参数服务器和 ROS 通信管理。 ### 运行 Cartographer 节点 在另一个终端中,运行 Cartographer_ros 节点,加载配置文件并开始建图。 1. **启动 Cartographer 节点** ```bash roslaunch cartographer_ros demo_backpack_2d.launch ``` **解释**: - `demo_backpack_2d.launch`:示例启动文件,适用于2D建图。实际应用中应根据需求编写自定义启动文件。 2. **发布传感器数据** 确保传感器数据(如激光雷达、里程计)正确发布到相应的 ROS 话题。例如: ```bash rosrun rosserial_python serial_node.py /dev/ttyUSB0 ``` **解释**: - `rosserial_python`:将串口数据转换为 ROS 消息,具体命令根据传感器类型和连接方式调整。 ### 可视化建图结果 使用 RViz 进行建图结果的可视化。 1. **启动 RViz** ```bash rosrun rviz rviz ``` 2. **配置 RViz** - 添加 `Map`、`LaserScan`、`RobotModel` 等显示项。 - 设置固定框架为 `map`。 - 调整视图以观察实时建图效果。 **解释**: - `RViz`:ROS 的可视化工具,用于显示传感器数据、机器人模型和建图结果。 ## 常见问题及解决方法 ### 1. 编译错误:找不到依赖包 **原因**:某些依赖包未正确安装或 `rosdep` 未覆盖所有依赖。 **解决方法**: - 确认所有依赖库已安装。 - 手动安装缺失的依赖包。例如: ```bash 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 正在发布地图数据 | | 性能问题:建图速度慢或占用过多资源 | 参数设置不当或硬件资源不足 | 优化配置参数,升级硬件资源,使用更高效的编译选项 | | 传感器连接问题 | 物理连接问题或驱动配置错误 | 检查物理连接,确认传感器驱动正确安装和配置,使用相关命令检查连接状态 | **解释**: 1. **系统环境准备**:确保操作系统和基本工具的安装与更新。 2. **安装 ROS Noetic**:配置软件源,安装 ROS 基础包,初始化 `rosdep`,设置环境变量。 3. **安装依赖库和工具**:安装编译和运行 Cartographer_ros 所需的系统库。 4. **编译 ROS 工作空间**:创建并编译 ROS 工作空间,为后续的包安装做好准备。 5. **安装 Cartographer_ros**:克隆代码仓库,安装依赖并编译 Cartographer_ros。 6. **配置 Cartographer_ros**:编写和调整配置文件,以适应具体应用需求。 7. **部署与测试**:启动 ROS 核心,运行 Cartographer 节点,使用 RViz 进行可视化。 8. **常见问题及解决方法**:提供常见问题的诊断和解决方案。 9. **总结**:概括整个编译部署过程,强调关键步骤和注意事项。 ## 总结 在 Ubuntu 20.04 环境下编译部署 ROS Noetic 与 Cartographer_ros 是一个系统性工程,涉及多个步骤和配置。通过本文的详细指南,您可以顺利完成 ROS Noetic 的安装,配置并编译 Cartographer_ros,最终实现机器人导航和环境建图的功能。 关键步骤包括: 1. **系统环境准备**:确保操作系统和基本工具的更新与安装。 2. **安装 ROS Noetic**:配置软件源,安装 ROS 基础包,初始化依赖管理工具。 3. **安装依赖库和工具**:安装编译和运行 Cartographer_ros 所需的系统库和工具。 4. **编译 ROS 工作空间**:创建并编译 ROS 工作空间,为后续的包安装做好准备。 5. **安装 Cartographer_ros**:克隆代码仓库,安装依赖并编译 Cartographer_ros。 6. **配置 Cartographer_ros**:编写和调整配置文件,以适应具体应用需求。 7. **部署与测试**:启动 ROS 核心,运行 Cartographer 节点,使用 RViz 进行可视化建图。 8. **常见问题及解决方法**:提供常见问题的诊断和解决方案,确保系统的稳定运行。 在实际应用中,开发者应根据具体的机器人硬件和应用场景,调整和优化配置参数,以获得最佳的建图和导航效果。同时,保持系统和软件包的定期更新,确保兼容性和安全性。 通过遵循本文的指导,您将能够在 Ubuntu 20.04 上成功编译和部署 ROS Noetic 及 Cartographer_ros,为机器人项目的开发和研究奠定坚实的基础。 最后修改:2024 年 09 月 21 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏