目录
0 专栏介绍
本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。
🚀详情:《ROS2从入门到精通》
1 什么是机器人操作系统?
ROS(Robot Operating System)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括
- 硬件抽象
- 底层设备控制
- 常用函数的实现
- 进程间消息传递
- 包管理
- 用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数
ROS 的主要目标是为机器人研究和开发提供代码复用的支持。简单来说就是避免重复造轮子。
为什么ROS可以提高代码复用率?
因为ROS有程序包和功能包概念,类比与C++
或python
的库的概念,这些包易于被分享和发布,而且ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现完全模块化,同时,所有的工程都可以被ROS的基础工具整合在一起。
除此之外,ROS还有以下优势:
- 精简:ROS被设计为尽可能精简,易于与其他机器人软件框架集成
- 语言独立性:为了支持更多应用开发和移植,ROS设计为一种语言弱相关的框架结构,中立的定义语言描述模块间的消息接口,
Java
、C++
、Python
都可以进行ROS开发。 - 大型应用:ROS适用于大型运行时系统和大型开发流程
- 丰富的组件化工具包:ROS可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用,如RVIZ、Gazebo等,后面都会介绍。
- 免费且开源:开发者众多,功能包多
这里再收藏几个重要的ROS全球社区网站:
answers.ros.org
:ROS问答网站,大家可以在上边提出任何关于ROS的问题,全球很多开发者都很乐意回答我们的问题wiki.ros.org
:ROS的维基百科,记录了ROS教程和各种功能包的使用discourse.ros.org
:ROS论坛,关于ROS开发的新鲜事都可以在这里发表和查看,比如ROS的活动、新功能包的发布等等index.ros.org
:ROS资源索引网站packages.ros.org
:ROS功能包存储数据库
2 ROS的发展历程
ROS是一个由来已久、贡献者众多的大型软件项目。
在ROS诞生之前,很多学者认为,机器人研究需要一个开放式的协作框架,并且已经有不少类似的项目致力于实现这样的框架。
2007年,柳树车库(Willow Garage)提供了大量资源,用于将斯坦福大学机器人项目中的软件系统进行扩展与完善,同时,在无数研究人员的共同努力下,ROS的核心思想和基本软件包逐渐得到完善。
ROS的发行版本指ROS软件包的版本,其与Linux的发行版本(如Ubuntu)的概念类似。推出ROS发行版本的目的在于使开发人员可以使用相对稳定的代码库,直到其准备好将所有内容进行版本升级为止。因此,每个发行版本推出后,ROS开发者通常仅对这一版本的bug进行修复,同时提供少量针对核心软件包的改进。
随着ROS被越来越多机器人使用,受限于当初设计的局限性,ROS的问题也逐渐暴露。为了能够真正设计一款适用于所有机器人的操作系统,ROS2在2017年底正式发布,历经多年迭代,我们终于在2022年5月底,迎来了ROS2第一个长期支持版——ROS2 Humble
,ROS2已经成熟,我们也进入了一个全新的ROS2时代。
3 ROS2与ROS1的区别
随着ROS的普及,应用ROS的机器人类型已经和最初那款PR2家庭机器人有了天壤之别,那原本针对PR2设计的软件框架,就会出现一些问题,比如:
- 要在资源有限的嵌入式系统中运行;
- 要在有干扰的地方保证通信的可靠性;
- 要做成产品走向市场,甚至用在自动驾驶汽车和航天机器人上
与ROS1相比,ROS2针对当今机器人应用需求,引入了非常多现代化的特性:
- 操作系统支持:ROS1仅支持Linux系统,而ROS2支持Linux、Windows、MacOS和实时操作系统RTOS,ROS2的跨平台和可移植特性为构建复杂机器人系统提供了基础
- 系统架构。ROS2采用基于
DDS
的分布式架构,取消了ROS1中的Master节点,节点之间通过DDS进行通信,因而支持更灵活的通信机制,如实时数据流和快速通信,具体什么是DDS架构?请参考ROS2从入门到精通1-2:图解ROS2的DDS通信机制 - 产品化:ROS2不仅可以用于机器人研发阶段,还可以直接搭载在产品中,走向消费市场,这对ROS2的稳定性、强壮性也提除了巨大挑战
- 安全性:ROS2引入了更多的安全机制,可以对通信进行加密和认证。
- API升级:ROS1原有的接口已经无法满足需求,ROS2结合C++最新标准和Python3语言特性,设计了更具通用性的API,虽然导致原有ROS1的代码无法直接在ROS2中运行,但是尽量保留了类似的使用方法,同时提供了大量移植的说明
- 编译系统:ROS1中使用的
rosbuild
和catkin
问题诸多,尤其是针对代码较多的大项目以及Python编写的项目,编译、链接经常会出错,ROS2对这些问题也进行了优化,重新优化后的编译系统叫做ament
和colcon
,它是catkin
编译系统进一步演化的版本。
4 ROS2安装
4.1 基本安装
ROS2安装步骤如下所示:
-
设置编码
sudo apt update && sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8 export LANG=en_US.UTF-8
-
添加软件源
sudo apt update && sudo apt install curl gnupg lsb-release 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
如果被
raw.githubusercontent.com
拒绝访问,则登录https://www.ipaddress.com查询raw.githubusercontent.com
域名
将搜索结果中展示的ip地址和域名拷贝系统hosts
文件中sudo vim /etc/hosts
添加下面一行,保存退出即可
185.199.109.133 raw.githubusercontent.com
-
更新源
sudo apt update sudo apt upgrade
-
安装ROS2
sudo apt install ros-humble-desktop
-
设置环境变量
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc
4.2 测试ROS2
4.2.1 测试一:发布者与订阅者
在终端A中启动发布者
ros2 run demo_nodes_cpp talker
在终端B中启动订阅者
ros2 run demo_nodes_cpp listener
如下所示,若节点间正常通信则说明测试通过
4.2.2 测试二:海龟仿真器
接着进行经典的海龟测试,启动两个终端,分别运行如下指令:
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
将鼠标聚焦在第操作终端窗口上,然后通过键盘上的方向键,操作小海龟移动,并在屏幕上留下轨迹
至此表明ROS基本安装、配置成功。
5 常见问题
-
添加ROS2源时出现
curl: (7) Failed to connect to raw.githubusercontent.com port 443 after 16 ms: Connection refused
解决方案: 这个问题是因为国内用户无法正常连接
raw.githubusercontent.com
导致,采用国内清华源可以解决sudo curl -sSL https://mirrors.tuna.tsinghua.edu.cn/rosdistro/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
🔥 更多精彩专栏: