ROS具有一个庞大的社区ROS WIKI(http://wiki.ros.org/ ),这个网站将会始终伴随着你ROS开发,无论是查阅功能包的参数、搜索问题还是。当前使用ROS开发的软件包已经达到数千万个,相关的机器人已经多达上千款。此外,ROS遵从BSD协议,对个人和商业应用及修改完全免费。这也促进了ROS的流行。
2、
ROS并不是一个真正的操作系统。相反,它是一个框架和服务的集合,这些框架和服务提供了类似操作系统的功能,运行在由机器人硬件支撑的异构计算机集群之上。ROS服务包括硬件抽象、底层设备控制、进程间消息传递和包管理。
ROS并不是目前唯一可用的“机器人框架”。可供选择的框架包括Player、YARP、Orocos、CARMEN等。ROS的与众不同之处在于,它的设计以丰富的机器人平台为中心,使用驱动传感(倾斜激光器、pan/tilt传感器头、附在手臂上的传感器),其目标是利用自然分布的计算环境。另外,ROS的目标是成为一个几乎与语言无关的薄层,以便在其他机器人平台上轻松运行基于ROS的代码。ROS有Python、C++和Lisp实现,而对Java和Lua的支持仍处于试验阶段。
ROS是一个适用于机器人编程的框架,这个框架把原本松散的零部件耦合在了一起,为他们提供了通信架构。ROS虽然叫做操作系统,但并非Windows、Mac那样通常意义的操作系统,它只是连接了操作系统和你开发的ROS应用程序,所以它也算是一个中间件,基于ROS的应用程序之间建立起了沟通的桥梁,所以也是运行在Linux上的运行时环境,在这个环境上,机器人的感知、决策、控制算法可以更好的组织和运行。
3、
节点(Node)–执行单元
执行具体任务的进程、独立运行的可执行文件;
不同节点可使用不同的编程语言,可分布式运行在不同的主机;
节点在系统中的名称必须是唯一的。
节点管理器(ROS Master)–控制中心
为节点提供命名和注册服务;
跟踪和记录话题/服务通信,辅助节点相互查找、建立连接;
提供参数服务器,节点使用此服务器存储和检索运行时的参数
4、ROS通信机制
1.话题通信
话题(Topic)–异步通信机制
节点间用来传输数据的重要总线;
使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题的订阅者或发布者可以不唯一。
消息(message)–话题数据
具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
使用编程语言无关的.msg文件定义,编程过程中生成对应的代码文件。
5、
如上图所示,计算机的操作系统将计算机硬件封装起来,而应用软件运行在操作系统之上,不用管计算机具体应用的是什么类型的硬件产品。这能大大提高软件开发效率(否则大家只能都写汇编了)。
同理,ROS则是对机器人的硬件进行了封装,不同的机器人、不同的传感器,在ROS里可以用相同的方式表示(topic等),供上层应用程序(运动规划等)调用。
6、
ROS用节点(Node)的概念表示一个应用程序,不同node之间通过事先定义好格式的消息(Topic),服务(Service),动作(Action)来实现连接。
7、
catkin 工作空间
- catkin: ROS定制的编译构建系统,对CMake的扩展
- 组织和管理功能包的文件夹,以catkin工具编译
- 操作:
- 建立工作空间:
- mkdir -p ~/catkin_ws/src
- cd ~/catkin_ws/
- catkin_make
- 编译:
- cd ~/catkin_ws #注意,一定要切换到此处进行编译
- catkin_make
- source ~/catkin_ws/devel/setup.bash # 编译完成后需要source刷新环境
- catkin worksapce:
- src:package 源代码,真正写代码的地方
- src通常放置功能包package,Eg.package1,package2.etc
- package是catkin编译的基本单元,catkin编译的对象就是一个又一个的package
- 编译系统会递归的查询每一个package
- package
- ROS软件的基本组织形式,
- catkin编译的基本单元
- 一个package可以包含多个可执行文件(节点)
- 判断package的方式:至少包含CMakeLists.txt,package.xml
- CMakeLists.txt:
- 规定catkin编译的规则,例如,源文件,依赖项,目标文件
- package.xml
- 定义package的属性,例如:包名,版本号.作者,依赖项
- scripts:
- 脚本 (python 文件,shell文件)
- include
- C++头文件
- src
- C++源文件
- python modue
- srv(服务)
- *.srv
- msg(消息)
- *.msg
- 动作(action)
- *.action
- launch:*.launch
- config:*.yaml
- build: cmake & catkin 缓存和中间文件
- devel: 目标文件
- 头文件
- 动态链接库
- 静态链接库
- 可执行文件
- rosbuild:ROS早期采用的编译系统,目前主流的ROS项目已经不采用
- 常用指令:
- rospack
- 查找某个pkg的地址
- rospack find package_name
- 列出本地所有pkg
- rospack list
- roscd
- 跳转到某个pkg路径下
- roscd package_name
- rosls
- 列举某个pkg下的文件信息
- rosls package_name
- rosed
- 编辑pkg的文件
- rosed package_name file_name
- catkin_create_pkg
- 创建一个pkg
- catkin_create_pkg <pkg_nmae>[deps]
- rosdep
- 安装某个pkg所需的依赖
- rosdep install [pkg_name]
- Metapackge
- 虚包:无实质内容,但是依赖其他软件包,使得安装更加方便
- Stack:软件包集,现已被Metapackage代替
- 常见metapackgae
- navigation:导航相关的功能包集
- moveit:运动规划相关(主要是机械臂)
- image_pipeline(图像获取,处理相关的功能包集)
- vision_opencv(ROS与OpenCV相关的功能包)
- turtlebot
- pr2_robot