ROS学习01.初识ROS

tech2022-09-26  104

目录

1.1 ROS是什么1.1.1 ROS的起源1.1.2 ROS的设计目标1.1.3 ROS的特点 1.2 如何安装ROS1.2.1 操作系统和ROS版本选择1.2.2 配置系统软件源(Ubuntu 软件仓库)1.2.3 添加ROS软件源(修改sources.list)1.2.4 添加公钥1.2.5 安装ROS1.2.6 初始化 rosdep1.2.7 设置环境变量1.2.8 安装依赖 1.3 本章小结参考文献

1.1 ROS是什么

1.1.1 ROS的起源

ROS(Robot Operating System)是一种应用于机器人开发的通用软件框架。它集成了大量的工具、库、协议,提供了类似操作系统所提供的功能。 ROS最初应用于斯坦福大学人工智能实验室与机器人技术公Willow Garage合作的个人机器人项目(Personal Robots Program):

2008年后有Willow Garage维护。2010年,Willow Garage 正式以开放源码的形式发布了ROS框架,并很快在机器人研究领域掀起了ROS开发和应用的热潮。

在短短几年间,各大机器人平台几乎都支持ROS框架,如Pioneer、Aldebaran Nao、TurtleBot、Lego NXT、AscTec Quadrotor等。 ROS的迅猛发展已经使它成为机器人领域的事实标准。

1.1.2 ROS的设计目标

设计目标:提高机器人研发中的软件复用率。实现方法:被设计成一种分布式结构,使得框架中的每个功能模块都可以被单独设计、编译、并且在运行时以松散耦合的方式结合在一起。为机器人开发提供的功能:硬件抽象、底层驱动、消息传递、程序管理、应用原型等功能和机制。同时,整合了许多第三方工具和库文件,帮助用户快速完成机器人应用的建立、编写和多机整合。便于共享和分发的设计:将ROS中的功能模块都封装与独立的功能包(Package)或元功能包(Meta Package)中。

ROS的出现就是为了鼓励更多的开发者、实验室或研究机构共同协作来开发机器人软件。

1.1.3 ROS的特点

核心:分布式网络。使用了基于TCP/IP的通信方式,实现了模块间点对点的松耦合连接,可以执行若干种类型的通信,包括基于话题(Topic)的异步数据流通信,基于服务(Service)的同步数据流通信,还有参数服务器上的数据存储等。

点对点的设计:每个进程以一个节点的形式分布于不同主机上;节点通信通过一个带有发布和订阅功能的RPC传输系统实现;可以分散定位、导航等功能带来的实时计算压力,适应多机器人的协同工作。多语言支持:ROS被设计出一种语音弱相关的框架结构,支持更多应用的移植和开发。架构精简、集成度高:框架模块化,使得每个功能点可以进行单独编译,并且使用统一的消息接口让模块的移植、复用更加便捷;ROS开源社区中移植、集成了大量已有开源项目中的代码,开发者可以使用丰富的资源实现机器人应用的快速开发。组件化工具包丰富:ROS采用组件化的方法,将一些友好的可视化工具和仿真软件集成到系统中,并可以作为一个组件直接使用。此外,ROS中还有消息查看工具、物理仿真环境等组件,提高了机器人开发的效率。免费并且开源:ROS遵照BSD许可,允许使用者修改和重新发布其中的应用代码,甚至可以进行商业化的开发和销售。在ROS开源社区中,开发者可以下载、复用琳琅满目的机器人功能模块,大大加速了机器人的应用开发。

1.2 如何安装ROS

1.2.1 操作系统和ROS版本选择

ROS维基社区:http://wiki.ros.org/cn/community 操作系统选择:Ubuntu 18.04 LTS ROS版本选择:ROS针对不同操作系统,发布了相对于的版本。选择对应于Ubuntu 18.04 LTS的版本,ROS Melodic Morenia版本 安装方式: 参考:http://wiki.ros.org/cn/melodic/Installation/Ubuntu

软件源安装:直接安装编译好的软件包比从源码编译安装更加高效,这也是我们在 Ubuntu 上的首选安装方式。只要通过简单的命令即可从应用仓库中找到需要的软件并完成下载安装。源码编译安装(不推荐):相对复杂,需要手动解决繁杂的软件依赖关系,更适合那些对系统比较熟悉而且希望在未支持的平台上安装ROS的开发者。

1.2.2 配置系统软件源(Ubuntu 软件仓库)

配置你的 Ubuntu 软件仓库(repositories) 以允许 “restricted”、“universe” 和 "multiverse"这三种安装模式。 你可以按照 Ubuntu 中的配置指南来完成配置。 如下图所示: 图1-1 Ubuntu 系统软件源的设置

1.2.3 添加ROS软件源(修改sources.list)

sources.list是Ubuntu系统保存软件源地址的文件,位于/etc/apt目录下,在这一步中,我们需要将ROS的软件源地址添加到该文件中,确保后续安装可以正确找到ROS相关软件的下载地址:

添加ROS官方的软件源镜像:sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

为提高软件的下载、安装速度,也可以使用任意一种国内的镜像源: 中国科学技术大学(USTC)镜像源:

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list '

1.2.4 添加公钥

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

如果你无法连接到公钥服务器,尝试用 hkp://pgp.mit.edu:80 替换上述命令中的服务器地址。 你也可以使用 curl 替代 apt-key 命令,如果你在使用一个代理服务器的话这可能会有帮助:

curl -SSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -

1.2.5 安装ROS

首先,确保之前的软件源得以更新:sudo apt update

报错:The repository 'http://ppa.launchpad.net/v-launchpad-jochen-sprickerhof-de/pcl/ubuntu xenial Release 解决:

在/etc/apt/sources.list.d中将关于/v-launchpad-jochen-sprickerhof-de/pcl的文件删掉

在 ROS 中有很多不同的库和工具。我们提供了四种默认选项供你开始。你也可以单独安装 ROS 的软件包。

桌面完整版Desktop-Full(推荐):最为推荐的一种安装版本,除了包含ROS的基础功能(核心功能包、构建工具和通信机制)外、还包含丰富的机器人通用函数库、功能包(2D/3D感知功能、机器人地图建模、自主导航等)以及工具(rviz可视化工具、gazebo仿真环境、rqt工具箱等)。 sudo apt-get install ros-melodic-desktop-full 桌面版 DeskTop:完整版的精简,去掉了机器人功能包和部分工具,仅包含ROS基础功能、机器人通用函数库、rqt工具箱和rviz可视化工具。 sudo apt-get install ros-melodic-desktop ROS-基础包 ROS-Base:基础版精简了机器人通用函数库、功能包和工具,仅保留了没有任何GUI的基础功能(核心功能包、构建工具和通信机制)。该版本的软件规模最小,也是ROS需求的“自小系统”,非常适合直接安装在对性能和空间要求较高的控制器之上,为嵌入式系统使用ROS提供了可能。 sudo apt-get install ros-melodic-ros-base 独立功能包安装(Individual Package):在后期的使用中,根据需要使用如下命令安装独立的功能包: (使用软件包名称替换掉下面的PACKAGE): sudo apt-get install ros-melodic-PACKAGE

如:sudo apt-get install ros-melodic-slam-gmapping

查找可用软件包:apt search ros-melodic

1.2.6 初始化 rosdep

rosdep是ROS中自带的工具,主要功能是为某些功能包安装系统依赖,同时也是某些ROS核心功能包必须用到的工具。 初始化rosdep并更新:

sudo rosdep init rosdep update

报错1:sudo: rosdep:找不到命令提示 解决:

sudo apt-get install python-rosdep python-wstool ros-melodic-ros

报错2:sudo rosdep init ERROR: cannot download default sources list from 解决:

#打开hosts文件 sudo gedit /etc/hosts #在文件末尾添加 151.101.84.133 raw.githubusercontent.com #保存后退出再尝试

1.2.7 设置环境变量

目前ROS已经成功安装的计算机中,默认在/opt路径下。

将 ROS 环境变量自动添加到新 bash 会话会很方便: echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc source ~/.bashrc 如果你只想设置当前 bash 会话的 ROS 环境变量,只需要输入: source /opt/ros/melodic/setup.bash 如果想在当前终端使用不同版本的ROS,只需要输入: source /opt/ros/ROS-RELEASE/setup.bash

其中ROS-RELEASE代表希望使用的ROS版本。

如果使用的终端是zsh,则需要将以上命令中的bash都修改为zsh: echo "source /opt/ros/melodic/setup.bash" >> ~/.zshrc source ~/.zshrc 终极方法:使得重新打开的所有终端都符合修改版本 打开 ~/.bashrc或者 ~/.zshrc文件,找到设置环境变量的命令,然后修改对应的ROS版本,保存退出。

查看ROS环境参数:

printenv | grep ROS

1.2.8 安装依赖

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

运行:roscore 显示如下,安装成功:

lxr@lxr-HP-ZBook-15-G3:~$ roscore ... logging to /home/lxr/.ros/log/fc0c69b0-edb2-11ea-b8d1-34f39ad897df/roslaunch-lxr-HP-ZBook-15-G3-18445.log Checking log directory for disk usage. This may take a while. Press Ctrl-C to interrupt Done checking log file disk usage. Usage is <1GB. started roslaunch server http://lxr-HP-ZBook-15-G3:36269/ ros_comm version 1.14.9 SUMMARY ======== PARAMETERS * /rosdistro: melodic * /rosversion: 1.14.9 NODES auto-starting new master process[master]: started with pid [18455] ROS_MASTER_URI=http://lxr-HP-ZBook-15-G3:11311/ setting /run_id to fc0c69b0-edb2-11ea-b8d1-34f39ad897df process[rosout-1]: started with pid [18466] started core service [/rosout]

报错:roscore command not found 解决:检查 /opt/ros/melodic/bin/检查一下这个目录里有没有roscore 显示没有,重新安装ROS,输入:sudo apt-get install ros-melodic-desktop-full 直到完全安装。

1.3 本章小结

记录了在Ubuntu18.04操作系统上,搭建最新的ROS Melodic Morenia版本的开发环境,使用的安装命令和遇到的错误解决过程。

参考文献

[1] 胡春旭编著.ROS机器人开发实现[M].机械工业出版社.2018:1-10 [2] 在 Ubuntu 中安装 ROS Melodic [3] Ubuntu 中的配置指南 [4] 安装ROS时执行到sudo rosdep init时出现sudo: rosdep:找不到命令提示 [5] sudo rosdep init ERROR: cannot download default sources list from:【closed】 [6] 基于Ubuntu18.04的ROS Melodic环境详细配置(含各种大坑及填坑) [7] 如何解决ROS “roscore command not found”

最新回复(0)