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通信基础设施实现松耦合连接。其设计本质是去中心化的,避免了传统中心化架构(如基于服务器)在跨网络连接时的单点故障问题。
- 
分布式进程框架 
 • ROS以节点(Nodes)为基本单元,支持运行时独立设计与松耦合连接。节点可组合为功能包(Packages)和堆栈(Stacks),便于共享与分发。• 通过联合代码仓库系统实现分布式协作开发,从文件系统到社区层级均支持独立决策,最终由ROS基础设施工具整合。 
- 
支持协作的次级目标 
 • 轻量化:ROS避免侵入主函数(不封装main()),确保代码可移植至其他框架(如已集成OpenRAVE、Orocos等)。• 框架无关库:提倡开发不依赖ROS的纯净库,仅通过清晰接口与ROS交互。 • 多语言支持:已原生支持Python、C++、Lisp,实验性提供Java/Lua库。 • 测试友好性:内置rostest框架,简化测试环境的搭建与销毁。 • 可扩展性:适配大型运行时系统与开发流程。 
ROS的通信模式
ROS支持三种核心通信机制,覆盖不同应用场景:
- 
服务(Services) 
 • 同步RPC调用:采用请求-响应模式,适用于需要即时反馈的操作(如机械臂控制指令)。• 示例:客户端节点请求路径规划服务,服务器节点返回规划结果。 
- 
话题(Topics) 
 • 异步数据流:基于发布/订阅模型,适用于持续数据传输(如激光雷达点云)。• 优势:生产者和消费者解耦,支持多对多通信。 
- 
参数服务器(Parameter Server) 
 • 全局数据存储:集中管理动态配置参数(如机器人PID系数),支持节点间共享与修改。
ROS安装
当前可用于Ubuntu(Focal Fossa)系统的Debian包是Ros2 Galactic Geochelone。
设置源
- 
将下载服务器http://us.archive.ubuntu.com更换为国内源。 
 ![]() 
- 
现在将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
 ![]() 
- 
然后将存储库添加到源列表中。 
 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软件包
- 
设置存储库后,更新apt存储库缓存. 
 sudo apt update
- 
ROS 2软件包建立在经常更新的Ubuntu系统上。 
 在安装新软件包之前,始终建议您确保您的系统是最新的.
 sudo apt upgrade
- 
推荐桌面安装: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。
- Source the setup files
 您需要在打开的每个新shell上运行此命令,才能访问ROS 2命令,如下所示:
 source /opt/ros/galactic/setup.bash
- Add sourcing to your shell startup script
 如果您不希望每次打开新shell时都必须source安装文件(跳过任务1),则可以将该命令添加到shell启动脚本中:
 echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc
- 检查环境变量
 获取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安装
rosdep是ROS管理依赖项的实用程序,可以与ROS包和外部库一起工作。
rosdep是一个命令行实用程序,用于识别和安装构建或安装包的依赖项。
sudo apt install python3-rosdep2

关于rosdep update访问超时问题的解决方案:
通过使用代理加速rosdep对github Raw的访问.
- 修改下载rosdep数据函数
 定位函数:/download_rosdep_datasudo vi /usr/lib/python3/dist-packages/rosdep2/sources_list.py
 添加代码:url="https://ghproxy.com/"+url
- 修改常量DEFAULT_INDEX_URL
 修改代码:sudo vi /usr/lib/python3/dist-packages/rosdistro/__init__.pyDEFAULT_INDEX_URL='https://ghproxy.com/https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
- 修改下列文件,为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

 
                     
                    
                 
                    
                





 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号