1、ROS基础介绍
(1)ROS是什么
代码语言:javascript复制ROS系统起源于2007年,斯坦福大学人工智能实验室与机器人技术公司Willow Garage针对其个人机器人项目(Personal Robots Program)开发了ROS的雏形。2008年后,由Willow Garage公司推动了ROS的进一步发展。2012年后,ROS团队从WillowGarage公司独立出来,成为非盈利组织the Open Source Robotics Foundation(OSRF),负责维护和更新ROS,并为机器人社区提供相应的支持和开源工具。
代码语言:javascript复制严格来讲ROS并非是一种操作系统,它只是一种通信框架,一种基于消息传递通信的分布式多进程框架。ROS是一个运行在Linux上的次级操作系统,真正底层的任务调度、编译、寻址等任务还是由Linux操作系统完成。
(2)基本概念
代码语言:javascript复制Nodes:节点,一个节点即为一个可执行文件,它可以通过ROS与其它节点进行通信。
Messages:消息,消息是一种ROS数据类型,用于订阅或发布到一个主题。
Topics:主题,节点可以发布消息到主题,也可以订阅主题以接收消息。
Master:节点管理器,ROS名称服务。
rosout: ROS中相当于stdout/stderr。
roscore: 主机 rosout 参数服务器。
rospy = Python 客户端库。
roscpp = C 客户端库。
(3)常用开发工具
代码语言:javascript复制Gazebo:机器人仿真工具,模拟器,也是一个独立的开源机器人仿真平台。Gazebo实现的是仿真,提供一个虚拟的世界。
RViz:调试和开发都离不开这个工具——RViz(the Robit Visualization tool)机器人可视化工具。在命令行打开新的终端直接输入$ rviz,打开工具。RViz实现的是可视化,呈现接收到的信息数据。
rqt:一个基于qt开发的可视化工具,拥有扩展性好、灵活易用、跨平台等特点,主要作用和RViz一致都是可视化,但是和RViz相比,rqt要高级一个层次。
rosbag:用于记录和回放ROS主题的工具。
rosbridge:一个用在ROS系统和其他系统之间的一个功能包,就像是它的名字一样,起到一个"桥梁"的作用,使得ros系统和其他系统能够进行交互.Rosbridge为非ROS程序提供了一个JSON API。如ROS提供了cv_bridge,可以将OpenCV的图片与ROS的图片格式相互转换。
moveit!:它融合了研究者在运动规划、操纵、3D感知、运动学、控制和导航方面的最新进展,为操作者提供了一个易于使用的平台,使用它可以开发先进的机器人应用,也被广泛应用于工业,商业,研发和其他领域。成为在机器人上最广泛使用的开源操作软件。通过为用户提供接口来调用它,包括C 、Python、GUI三种接口。ROS中的move_group节点充当整合器,整合多个独立组件,提供ROS风格的Action和service。move_group通过ROS topic和action与机器人通讯,获取机器人的位置、节点等状态,获取数据再传递给机器人的控制器。控制器的接口会去处理这些信息,比如进行坐标转换、规划场景、3D感知。
2、ROS总体架构介绍
(1)ROS总体框架
ROS框架图
代码语言:javascript复制ROS系统代码主要有两大部分:
(1)main:核心部分,它提供了一些分布式计算的基本工具以及整个ROS的核心部分的程序。
(2)universe:全球范围的代码,有不同国家的ROS社区组织开发和维护。
libs:一种库的代码,如OpenCV、PCL等。
framework function:库的上一层,从功能逻辑算法角度提供的代码,如图像激光等处理检测识别算法,他们 调用下层的OpenCV、PCL库。
application层:最上层的代码是应用级的代码,让机器人完成某一确定的功能。
(2)ROS主要分为三个级别:计算图级、文件系统级、社区级
代码语言:javascript复制计算图:是ROS处理数据的一种点对点的网络形式,主要包括:节点(node)、消息(message)、主题(topic)、服务(service)、节点控制器(ROS Master)。
代码语言:javascript复制文件系统级:指的是在硬盘上面查看的ROS源代码的组织形式,包括:包(package)、堆(stack)。
1、ROS的软件以包的方式组织起来。包含节点、ROS依赖库、数据套、配置文件、第三方软件、或者任何其他逻辑构成。
2、堆是包的集合,它提供一个完整的功能,像“navigation stack”。
代码语言:javascript复制社区级:ROS网络上进行代码发布的一种表现形式。