ROS2从入门到精通0-2:ROS2简介、对比ROS1与详细安装流程

2024-03-11 12:28

本文主要是介绍ROS2从入门到精通0-2:ROS2简介、对比ROS1与详细安装流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 0 专栏介绍
  • 1 什么是机器人操作系统?
  • 2 ROS的发展历程
  • 3 ROS2与ROS1的区别
  • 4 ROS2安装
    • 4.1 基本安装
    • 4.2 测试ROS2
      • 4.2.1 测试一:发布者与订阅者
      • 4.2.2 测试二:海龟仿真器
  • 5 常见问题

0 专栏介绍

本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。

🚀详情:《ROS2从入门到精通》


1 什么是机器人操作系统?

ROS(Robot Operating System)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括

  • 硬件抽象
  • 底层设备控制
  • 常用函数的实现
  • 进程间消息传递
  • 包管理
  • 用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数


在这里插入图片描述

ROS 的主要目标是为机器人研究和开发提供代码复用的支持。简单来说就是避免重复造轮子。

在这里插入图片描述
为什么ROS可以提高代码复用率?

因为ROS有程序包功能包概念,类比与C++python的库的概念,这些包易于被分享和发布,而且ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现完全模块化,同时,所有的工程都可以被ROS的基础工具整合在一起。

在这里插入图片描述

除此之外,ROS还有以下优势:

  • 精简:ROS被设计为尽可能精简,易于与其他机器人软件框架集成
  • 语言独立性:为了支持更多应用开发和移植,ROS设计为一种语言弱相关的框架结构,中立的定义语言描述模块间的消息接口,JavaC++Python都可以进行ROS开发。
  • 大型应用:ROS适用于大型运行时系统和大型开发流程
  • 丰富的组件化工具包:ROS可采用组件化方式集成一些工具和软件到系统中并作为一个组件直接使用,如RVIZGazebo等,后面都会介绍。
  • 免费且开源:开发者众多,功能包多

这里再收藏几个重要的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中使用的rosbuildcatkin问题诸多,尤其是针对代码较多的大项目以及Python编写的项目,编译、链接经常会出错,ROS2对这些问题也进行了优化,重新优化后的编译系统叫做amentcolcon,它是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
    
  • 添加软件源,这里为了避免无法访问https://raw.githubusercontent.com带来的一系列问题,采用清华源的ROS2库

    sudo apt update && sudo apt install curl gnupg lsb-release
    sudo curl -sSL https://mirrors.tuna.tsinghua.edu.cn/rosdistro/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] https://mirrors.tuna.tsinghua.edu.cn/ros2/ubuntu jammy main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
    
  • 更新源

    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 常见问题

  1. 添加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
    

🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

这篇关于ROS2从入门到精通0-2:ROS2简介、对比ROS1与详细安装流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/797801

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

Ubuntu向多台主机批量传输文件的流程步骤

《Ubuntu向多台主机批量传输文件的流程步骤》:本文主要介绍在Ubuntu中批量传输文件到多台主机的方法,需确保主机互通、用户名密码统一及端口开放,通过安装sshpass工具,准备包含目标主机信... 目录Ubuntu 向多台主机批量传输文件1.安装 sshpass2.准备主机列表文件3.创建一个批处理脚

Python屏幕抓取和录制的详细代码示例

《Python屏幕抓取和录制的详细代码示例》随着现代计算机性能的提高和网络速度的加快,越来越多的用户需要对他们的屏幕进行录制,:本文主要介绍Python屏幕抓取和录制的相关资料,需要的朋友可以参考... 目录一、常用 python 屏幕抓取库二、pyautogui 截屏示例三、mss 高性能截图四、Pill

Java Docx4j类库简介及使用示例详解

《JavaDocx4j类库简介及使用示例详解》Docx4j是一个强大而灵活的Java库,非常适合需要自动化生成、处理、转换MicrosoftOffice文档的服务器端或后端应用,本文给大家介绍Jav... 目录1.简介2.安装与依赖3.基础用法示例3.1 创建一个新 DOCX 并添加内容3.2 读取一个已存