本文是博主自己在用树莓派学习ros教程的记录,对于linux/unix系统应该是通用的,一方面参照官方教程的指导,另一方面也经过个人的实践。
后期同时在x86架构PC上做了实践和应用,对于过程中零散的技术点进行结构化梳理。

ROS基本概念

什么是ros

ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面ROS相当于一种“机器人框架(robot frameworks)”类似的“机器人框架”有:Player,YARP,Orocos,CARMEN,Orca,MOOS和 Microsoft Robotics Studio。

ROS 运行时的“蓝图”是一种基于ROS通信基础结构的松耦合点对点进程网络。ROS实现了几种不同的通信方式,包括基于同步RPC样式通信的服务(services)机制,基于异步流媒体数据的话题(topics)机制以及用于数据存储的参数服务器(Parameter Server)。

目的

很多人都在问“ROS与其它机器人软件平台有什么不同?”这是一个很难解答的问题。因为ROS不是一个集成了大多数功能或特征的框架。事实上,ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是节点)框架,这些进程被封装在易于被分享和发布的程序包和功能包集中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。

为了支持分享和协作的主要目的,ROS框架也有其它几个目标:

小型化:ROS尽可能设计的很小 – 我们不封装您的 main() 函数 – 所以为ROS编写的代码可以轻松的在其它机器人软件平台上使用。 由此得出的必然结论是ROS可以轻松集成在其它机器人软件平台:ROS已经可以与OpenRAVE,Orocos和Player集成。
ROS不敏感库:ROS的首选开发模型都是用不依赖ROS的干净的库函数编写而成。
语言独立:ROS框架可以简单地使用任何的现代编程语言实现。我们已经实现了Python版本,C++版本和 Lisp版本。同时,我们也拥有Java 和 Lua版本的实验库。

方便测试:ROS内建一个了叫做rostest的单元/集成测试框架,可以轻松安装或卸载测试模块。

可扩展:ROS可以适用于大型运行时系统和大型开发进程。
所以,“ROS与其它机器人软件平台有什么不同?”很难得到一个适用于所有情况的答案,但是,如果你选择使用其它机器人软件平台,我们希望你仍然可以使用到很多基于ROS发布的库函数。至于更多细节,这封Brian Gerkey(同时涉猎 Player 和 ROS)向ROS用户所写的关于ROS和Player区别的电子邮件(包括OpenCV 的集成)可以为我们提供一些比较:

这个问题的答案,和许多问题一样,视情况而定。特别是取悦于你想要干什么。Player非常适合简洁的非铰接的移动平台。它的设计为那些激光雷达的先锋提供了简单的传感器和电机操作方法。

然而,ROS是围绕着基于驱动传感器(倾斜式激光,盘式/斜试头部传感器,机械臂传感器)的复杂移动处理平台设计的。与Player相比,ROS可以更方便的借助分布式计算设备,而且我可以肯定,越高级的应用越适用于ROS而不是Player。换句话说,Player提供了更多的硬件驱动,而ROS提供了更多算法。

我认为,说ROS比Player更加灵活强大是公平的。但是,现实情况是,更加灵活强大意味着更加复杂。尽管我们很努力的使ROS更加简单易用,ROS仍然需要一个很长的学习过程。当然,熟悉Player会对学习ROS有很大帮助,因为它们很多基本的方面都是相似的。

关于你们针对OpenCV集成提出的问题,我想你们会发现ROS集成OpenCV的代码要比Player多一点。未来,当ROS和OpenCV团队明显重叠时,你们会发现这种差异将变得更大。

我发现ROS利用了大量的来自于Player工程的代码。ROS节点的代码重用了许多Player的驱动,而且Stage和Gazebo可在ROS社区中得到广泛的支持和良好的应用。

操作系统

ROS目前只能在基于Unix的平台上运行。ROS的软件主要在Ubuntu和Mac OS X 系统上测试,同时ROS社区仍持续支持Fedora,Gentoo,Arch Linux和其它Linux平台。

与此同时,Microsoft Windows端口的ROS已经实现,但并未完全开发完成。

发布

ROS核心系统及各种工具和库函数通常在ROS 发行版本中发布。ROS发行版本类似于Linux发行版本,并提供了一系列兼容此版本的可被使用或开发的软件。

ROS1教程

一、树莓派3 Raspbian-jessie编译安装ROS Indigo
二、快速启动ROS小乌龟
三、ROS Topics(话题)
四、rosservice、rosparam、rosconsole和roslaunch的使用
五、使用rosed编辑ROS中的文件
六、创建ROS消息和ROS服务
七、编写并运行简单的消息发布器和订阅器(C++)
八、编写并运行简单的服务器和客户端 (C++)
九、录制与回放数据(ROS)
十、roswtf错误检查工具入门(ROS)

ROS2教程

ROS2 架构梳理汇总整理

ROS2 编写运行简单server client

快速创建ROS2 packages

ROS2新电脑配置-linux/debian/ubuntu

如何将ROS2程序打包至busybox中,以volume方式挂载运行

Ros2 vcs(vcstool)安装及使用

raspberry/arm 搭建ros2 docker开发环境

一文说明ROS中URDF和SRDF分别是什么

Ros2中常用的一些指令记录

一文学会配置Fanuc控制柜端ROS2驱动

ROS2 LifecycleNode讲解及实例

ROS 1到ROS 2项目移植的一些转换点

ROS2 Control分析讲解

ROS2机器人驱动开发

【ros2 control 机器人驱动开发】简单双关节机器人学习-example 1

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 3

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 4

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 5

【ros2 control 机器人驱动开发】双关节多控制器机器人学习-example 6

【ros2 control 机器人驱动开发】6关节多控制器机器人学习-example 7

【ros2 control 机器人驱动开发】双关节机器人传动转换学习-example 8

【ros2 control 机器人驱动开发】双关节机器人gazebo仿真学习-example 9

ros开发实践

ubuntu 16.04 ROS Qt Creator Plugin安装配置

ROS Qt Creator Plugin新建workspace及编译运行

使用catkin_create_qt_pkg创建一个项目并用qtcreator编译运行

QtCreator-ROS开发hello world!

错误处理

rosdep update出错解决办法,下载文件替换法——No such file or directory: ‘/etc/ros/rosdistro/master/index-v4.yaml

附:
发现了一个叫HandsFree Robot的国内机器人开源平台

CyberDog工程探索版众测 CyberDog个人环境配置

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐