一、ROS是什么
ROS是机器人操作系统(Robot Operating System)的英文缩写,是用于编写机器人软件程序的一种具有高度灵活性的软件架构。
ROS提供一些标准操作系统服务,例如硬件抽象,底层设备控制,常用功能实现,进程间消息以及数据包管理。
ROS是基于一种图状架构,从而不同节点的进程能接受,发布,聚合各种信息(例如传感,控制,状态,规划等等)。
ROS可以分成两层,低层是上面描述的操作系统层,高层则是广大用户群贡献的实现不同功能的各种软件包,例如定位绘图,行动规划,感知,模拟等等。
可以查询ROS机器人元老 PR2、在国际空间站的Robonaut (R2)、2018年狗年跨年基于ROS的百度Apollo无人车等资料进行深入的了解
二、ROS设计框架
ROS是用于编写机器人软件程序的一种具有高度灵活性的软件架构。它包含了大量工具软件、库代码和约定协议,旨在简化跨机器人平台创建复杂、鲁棒的机器人行为这一过程的难度与复杂度。
ROS = Plumbing + Tools + Capabilities + Ecosystem
通讯机制、工具软件包、机器人高层技能以及机器人生态系统的集合体
一个目标:提高机器人研发中的软件复用率
五个特点:
(1)点对点的设计
节点单元、分布式网络、RPC+TCP/UDP通信系统、适合多机协同
(2)多语言支持
python、C++、Java等、语言无关的接口定义
(3)架构精简、集成度高
每个功能节点都可以单独编译、集成众多开源项目、接口统一提高软件复用性
(4) 组件化工具包丰富
3D可视化工具(rivz)、物理仿真环境(gazebo)、数据记录工具(rosbag)、Qt工具箱(rqt_*)
(5) 免费并且开源
BSD许可,可修改,复用,商用、软件包数量指数级增加,良好的生态环境
四位一体:
ROS=通讯机制+开发工具+应用功能+生态系统
三、开发环境搭建
知识树:
1、虚拟机VMware、Ubuntu、Linux
都学ros了,这些应该比较熟悉,在这里就不赘述了,要有基础才能更好的学
其中分区有如下建议:
swap区:
设为逻辑分区、作用跟电脑内存类似,大小也可以和电脑内存一样大;
/boot区:
设为主分区,引导系统的,分配20OM-50OM就可以,条件好些分配1G,开过一般200M就可以;
/.区(主分区):
设为主分区,存放系统,类似windows系统的C盘,大小根据电脑性能分配,一般建议存储空间的20%-35%;
/home区:
设为逻辑分区,储存用户数据文档的,剩下的存储空间全部给它就可以。
2、ROS系统
安装时遇到的各种问题可参考:
学习ROS初始遇到的各种问题及解决方法
Linux软件更新时出现的问题及解决方法
可以暂时跳过(6)(8)步骤
(1)在正式的安装前,先检查下Ubuntu初始环境是否配置正确
打开ubuntu的设置->软件与更新->ubuntu软件->勾选关键字universe , restricted , multiverse三项。如图所示:
(2)Ctrl+alt+T打开终端,输入指令
sudo gedit /etc/apt/sources.list
添加源,或者直接输入指令:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu$(lsb_release -sc) main" >/etc/apt/sources.list.d/ros-latest.list'
(3)添加秘钥,不能用了从网上再找一下
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
(4)更新软件源
sudo apt update
在这里出现问题可参考上面给的链接
(5)安装ros(看好版本,版本不同指令不同)
查看版本Ubuntu版本:lsb_release -a
或者cat /etc/issue
找到对应版本
我的是ubuntu20.04安装ROS Noetic指令如下
sudo apt install ros-noetic-desktop-full
#也可以安装某个指定的 ROS 软件包(使用软件包名称替换掉下面的PACKAGE)
sudo apt install ros-noetic-PACKAGE
在这里出现问题可参考上面给的链接
(6)初始化 rosdep
在使用 ROS 之前,需要初始化 rosdep。
rosdep 可安装想要被编译的源代码,或被某些 ROS 核心组件需要的系统依赖。
sudo apt install python3-rosdep2
sudo rosdep init
rosdep update
在这里出现问题可参考上面给的链接
(7)设置环境
用户在使用 ROS 的功能包前,需要添加 ROS 环境变量,这样系统才能找到相应的ROS 功能包。
下面的命令就是在当前 bash 会话中添加 ROS 环境变量,但其只在当前会话中有效,每次打开新的终端时,都要重新设置,所以不建议使用此法。
source /opt/ros/noetic/setup.bash
可以将配置命令写入到用户的.bashrc 文件中,然后使用 source 命令将该配置文件生效,
这样每次新开 bash 会话(如打开终端) ROS 环境变量自动添加,很方便:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
(8)构建工厂依赖
安装 rosinstall 和其他构建 ROS 包的依赖项,终端运行下面命令:
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install python3-rosdep
或者
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
为了创建和管理自己的 ROS 工作区,需要有各种各样的工具。
例如: rosinstall 是一个经常使用的命令行工具,它使你能够轻松地从一个命令下载许多 ROS 包的源树。
(9)启动节点管理器
启动小乌龟程序,执行的第一条ros指令是roscore,其作用就是用于节点管理,在一个ros系统中,有且只有一个,它是ros节点运行的前提,所以在执行启动ros节点前,第一步都需要执行roscore。
roscore
正常情况是这样的:
(10)启动小海龟仿真器包
pacakge即包,一个包可以包含多个节点,ros应用程序发布时,通常都是以包为单位,在小乌龟实例中,包即是turtlesim
ctrl+alt+t打开一个新的终端,输入
rosrun turtlesim turtlesim_node
(11)
ctrl+alt+t再打开一个新的终端,输入
rosrun turtlesim turtle_teleop_key
出现下图且可用键盘操作小海龟即ros安装成功
(12)查看所有的文件包
rospack list
(13)查看所有功能包
apt-cache search ros-kinetic
(14)查看 ROS 环境
在安装 ROS 期间,会看到提示说需要 source 多个 setup.*sh 文件中的某一个,或者甚至提示添加这条’source’命令到启动脚本里面。这些操作是必须的,因为 ROS 是依赖于某种组合空间的概念,而这种概念就是通过配置脚本环境来实现的。这可以让针对不同版本或者不同软件包集的开发更加容易。如果在查找和使用 ROS 软件包方面遇到了问题,首先要检查脚本环境是否配置正确。
一个检查像 ROS_ROOT 和 ROS_PACKAGE_PATH 这样的环境变量的方法是,通过
以下命令查看:
env | grep ROS
由上图所示,可以看到的ROS 环境变量, ROS 的功能包路径, ROS 安装的根目录, ROS 版本等
(13)卸载ROS
sudo apt-get purge ros-* # *功能包的名字 卸载功能包
sudo apt-get autoremove # 卸载包的依赖包