Quantcast
Channel: 小蓝博客
Viewing all articles
Browse latest Browse all 3145

Ubuntu20环境下Noetic与cartographer_ros编译部署

$
0
0

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

  3. 安装依赖库和工具
  4. 编译 ROS 工作空间
  5. 安装 Cartographer_ros

  6. 配置 Cartographer_ros

  7. 部署与测试

  8. 常见问题及解决方法
  9. 总结
  10. 原理解释图

系统环境准备

在开始安装和编译之前,确保您的系统满足以下要求:

  • 操作系统:Ubuntu 20.04 LTS(Focal Fossa)
  • CPU:推荐多核处理器以加快编译速度
  • 内存:至少 8GB
  • 存储:建议至少 20GB 可用空间
  • 网络:稳定的互联网连接,用于下载软件包和依赖

确保系统已更新到最新状态:

sudo apt update
sudo apt upgrade -y

安装 ROS Noetic

配置软件源

  1. 设置 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 -
  2. 添加 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-rosinstallpython3-rosinstall-generatorpython3-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 工作空间

  1. 创建工作空间

    创建一个用于存放 ROS 包的工作空间目录,例如 catkin_ws

    mkdir -p ~/catkin_ws/src
    cd ~/catkin_ws/
    catkin_make

    解释

    • catkin_make:构建 ROS 工作空间中的包。
  2. 设置工作空间环境变量

    将工作空间的 setup.bash 文件添加到环境变量中。

    echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
    source ~/.bashrc

安装 Cartographer_ros

克隆 Cartographer_ros 仓库

  1. 导航到工作空间的 src 目录

    cd ~/catkin_ws/src
  2. 克隆 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

  1. 导航到工作空间根目录

    cd ~/catkin_ws/
  2. 编译工作空间

    catkin_make_isolated --install --use-ninja

    解释

    • catkin_make_isolated:独立编译每个包,适用于具有多个依赖关系的项目。
    • --install:将编译后的文件安装到工作空间的 install 目录。
    • --use-ninja:使用 Ninja 作为构建系统,加快编译速度。
  3. 设置环境变量

    将安装后的环境变量添加到 bash 配置文件中。

    echo "source ~/catkin_ws/install_isolated/setup.bash" >> ~/.bashrc
    source ~/.bashrc

配置 Cartographer_ros

创建配置文件

Cartographer_ros 需要配置文件来定义传感器信息、地图参数等。通常,这些配置文件以 .lua 格式存在。

  1. 创建配置目录

    mkdir -p ~/catkin_ws/src/cartographer_ros/config
  2. 编写配置文件

    创建一个名为 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_buildertrajectory_builder:引用基础构建模块。
    • map_frametracking_frame 等:定义坐标系和帧之间的关系。
    • TRAJECTORY_BUILDER_2D:配置2D建图参数,如传感器范围等。

调整参数设置

根据实际应用场景和传感器参数,调整配置文件中的各项参数,以优化建图效果。例如:

  • 传感器范围:根据激光雷达的最小和最大探测距离调整 min_rangemax_range
  • 数据积累:调整 num_accumulated_range_data 以控制数据积累的数量。

部署与测试

启动 ROS 核心

在开始运行 Cartographer_ros 之前,需要启动 ROS 核心。

roscore

解释

  • roscore:启动 ROS 主节点,包括参数服务器和 ROS 通信管理。

运行 Cartographer 节点

在另一个终端中,运行 Cartographer_ros 节点,加载配置文件并开始建图。

  1. 启动 Cartographer 节点

    roslaunch cartographer_ros demo_backpack_2d.launch

    解释

    • demo_backpack_2d.launch:示例启动文件,适用于2D建图。实际应用中应根据需求编写自定义启动文件。
  2. 发布传感器数据

    确保传感器数据(如激光雷达、里程计)正确发布到相应的 ROS 话题。例如:

    rosrun rosserial_python serial_node.py /dev/ttyUSB0

    解释

    • rosserial_python:将串口数据转换为 ROS 消息,具体命令根据传感器类型和连接方式调整。

可视化建图结果

使用 RViz 进行建图结果的可视化。

  1. 启动 RViz

    rosrun rviz rviz
  2. 配置 RViz

    • 添加 MapLaserScanRobotModel 等显示项。
    • 设置固定框架为 map
    • 调整视图以观察实时建图效果。

解释

  • RViz:ROS 的可视化工具,用于显示传感器数据、机器人模型和建图结果。

常见问题及解决方法

1. 编译错误:找不到依赖包

原因:某些依赖包未正确安装或 rosdep 未覆盖所有依赖。

解决方法

  • 确认所有依赖库已安装。
  • 手动安装缺失的依赖包。例如:

    sudo apt install ros-noetic-some-package

2. 启动 Cartographer 节点时报错

原因:配置文件错误或传感器数据未正确发布。

解决方法

  • 检查配置文件的语法和参数设置。
  • 确认传感器数据正在正确发布到相应的话题,可以使用 rostopic listrostopic echo 进行验证。

3. RViz 无法显示建图结果

原因:RViz 配置错误或话题未正确订阅。

解决方法

  • 确认 RViz 的固定框架设置为 map
  • 检查 Map 显示项订阅了正确的话题。
  • 确认 Cartographer 节点正在发布地图数据。

4. 性能问题:建图速度慢或占用过多资源

原因:参数设置不当或硬件资源不足。

解决方法

  • 优化配置文件中的参数,如减少数据积累数量。
  • 升级硬件资源,如增加内存或使用更快的处理器。
  • 使用更高效的编译选项或优化代码。

5. 连接问题:传感器无法连接或数据传输不稳定

原因:物理连接问题或驱动配置错误。

解决方法

  • 检查传感器与计算机之间的物理连接。
  • 确认传感器驱动已正确安装并配置。
  • 使用 dmesglsusb 命令检查传感器连接状态。

解决方法总结表

问题可能原因解决方法
找不到依赖包依赖包未安装或 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,为机器人项目的开发和研究奠定坚实的基础。


Viewing all articles
Browse latest Browse all 3145

Trending Articles