Ubuntu基于ROS 2 (Galactic Geochelone,银河系象龟)开发机器人

开发环境

  • OS : Ubuntu 20.04.05 LTS (Focal Fossa 专注的狸貓)
  • CE : Visual Studio Code 1.71
  • PL : C++ 11 && Python 3.8
  • frameworks : ROS2

ROS简介

ROS(Robot Operating System,机器人操作系统)是一个面向于机器人的开源元操作系统。它提供了操作系统应有的核心服务,为软件开发人员提供了一系列库和工具,用于构建机器人应用程序。该系统具备以下核心功能:

  • 硬件抽象层
  • 设备驱动程序
  • 功能库
  • 可视化工具
  • 消息传递机制
  • 软件包管理

它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。
在某些方面ROS相当于一种机器人(应用程序开发)框架(robot frameworks)。

ROS的设计哲学

ROS运行时"图"是由多个进程组成的对等网络(可跨多台机器分布),这些进程通过ROS通信基础设施实现松耦合连接。其设计本质是去中心化的,避免了传统中心化架构(如基于服务器)在跨网络连接时的单点故障问题。

  1. 分布式进程框架
    • ROS以节点(Nodes)为基本单元,支持运行时独立设计与松耦合连接。节点可组合为功能包(Packages)和堆栈(Stacks),便于共享与分发。

    • 通过联合代码仓库系统实现分布式协作开发,从文件系统到社区层级均支持独立决策,最终由ROS基础设施工具整合。

  2. 支持协作的次级目标
    • 轻量化:ROS避免侵入主函数(不封装main()),确保代码可移植至其他框架(如已集成OpenRAVE、Orocos等)。

    • 框架无关库:提倡开发不依赖ROS的纯净库,仅通过清晰接口与ROS交互。

    • 多语言支持:已原生支持Python、C++、Lisp,实验性提供Java/Lua库。

    • 测试友好性:内置rostest框架,简化测试环境的搭建与销毁。

    • 可扩展性:适配大型运行时系统与开发流程。

ROS的通信模式

ROS支持三种核心通信机制,覆盖不同应用场景:

  1. 服务(Services)
    • 同步RPC调用:采用请求-响应模式,适用于需要即时反馈的操作(如机械臂控制指令)。

    • 示例:客户端节点请求路径规划服务,服务器节点返回规划结果。

  2. 话题(Topics)
    • 异步数据流:基于发布/订阅模型,适用于持续数据传输(如激光雷达点云)。

    • 优势:生产者和消费者解耦,支持多对多通信。

  3. 参数服务器(Parameter Server)
    • 全局数据存储:集中管理动态配置参数(如机器人PID系数),支持节点间共享与修改。

ROS安装

当前可用于Ubuntu(Focal Fossa)系统的Debian包是Ros2 Galactic Geochelone。

设置源

  1. 将下载服务器http://us.archive.ubuntu.com更换为国内源。

  2. 现在将ROS 2 apt存储库添加到你的系统中。首先,使用apt授权我们的GPG密钥。
    gnupg和lsb-release是系统自带的最新版本
    打开/etc/hosts写入域名对应的IP地址“185.199.111.133 raw.githubusercontent.com”
    sudo apt update
    sudo apt install curl
    sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

  3. 然后将存储库添加到源列表中。
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

安装ROS 2软件包

  1. 设置存储库后,更新apt存储库缓存.
    sudo apt update

  2. ROS 2软件包建立在经常更新的Ubuntu系统上。
    在安装新软件包之前,始终建议您确保您的系统是最新的.
    sudo apt upgrade

  3. 推荐桌面安装:ROS、RViz、演示、教程。.
    sudo apt install ros-galactic-desktop

安装完成

sudo apt-cache search ros-galactic

环境设置

ROS2依赖于使用shell环境组合工作空间的概念。
“工作区”是一个ROS术语,表示您使用ROS 2开发系统的位置。
核心ROS 2工作区称为底层。
后续的本地工作区称为覆盖。
使用ROS 2进行开发时,通常会同时激活多个工作区。

组合工作区可以更容易地针对不同版本的ROS2或不同的包集进行开发。
它还允许在同一台计算机上安装多个ROS 2发行版(或“发行版”,如Dashing和Eloquent)并在它们之间切换。

可以通过在每次打开新shell时source设置文件来实现,或者将source命令添加到shell启动脚本中一次。
如果不寻找安装文件,将无法访问ROS 2命令,也无法找到或使用ROS 2软件包。
换句话说,将无法使用ROS2。

  1. Source the setup files
    您需要在打开的每个新shell上运行此命令,才能访问ROS 2命令,如下所示:
    source /opt/ros/galactic/setup.bash
  2. Add sourcing to your shell startup script
    如果您不希望每次打开新shell时都必须source安装文件(跳过任务1),则可以将该命令添加到shell启动脚本中:
    echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc
  3. 检查环境变量
    获取ROS 2安装文件将设置操作ROS 2所需的几个环境变量。
    如果您在查找或使用ROS 2软件包时遇到问题,请确保使用以下命令正确设置了您的环境:
    printenv | grep -i ROS

尝试一些例子

若你已成功安装ros-galactic-desktop,可通过以下步骤运行示例程序C++ talker
source /opt/ros/galactic/setup.bash
ros2 run demo_nodes_cpp talker

请在新终端中运行Python listener

source /opt/ros/galactic/setup.bash
ros2 run demo_nodes_py listener

您将会看到以下运行结果:
• talker节点显示"Publishing messages"(正在发布消息)

• listener节点显示"I heard those messages"(已接收消息)

这表明ROS 2的C++和Python接口均能正常工作。验证成功!

rosdep2安装

rosdepROS管理依赖项的实用程序,可以与ROS包和外部库一起工作。
rosdep是一个命令行实用程序,用于识别和安装构建或安装包的依赖项。
sudo apt install python3-rosdep2

关于rosdep update访问超时问题的解决方案:

通过使用代理加速rosdep对github Raw的访问.

  1. 修改下载rosdep数据函数
    sudo vi /usr/lib/python3/dist-packages/rosdep2/sources_list.py
    
    定位函数:/download_rosdep_data
    添加代码:
    url="https://ghproxy.com/"+url
    
  2. 修改常量DEFAULT_INDEX_URL
    sudo vi /usr/lib/python3/dist-packages/rosdistro/__init__.py
    
    修改代码:
    DEFAULT_INDEX_URL='https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
    
  3. 修改下列文件,为github地址添加代理前缀
    #!36行
    sudo vi /usr/lib/python3/dist-packages/rosdep2/gbpdistro_support.py
    #!72行
    sudo vi /usr/lib/python3/dist-packages/rosdep2/sources_list.py
    #!39行
    sudo vi /usr/lib/python3/dist-packages/rosdep2/rep3.py
    #!68行 119行
    sudo vi /usr/lib/python3/dist-packages/rosdistro/manifest_provider/github.py
    

更新rosdep

rosdep update

posted @ 2021-07-14 16:10  杨孝乾  阅读(637)  评论(0)    收藏  举报