robot operating system概述

来源:互联网 发布:中科院算法答案 编辑:程序博客网 时间:2024/06/11 03:45

1. Ros

1. 历史概述

  伴随科学技术发展,人工智能的需求日益增长,机器人领域也迅速发展,响应需求,Willow Garage公司于2010年发布了开源机器人操作系统Ros。
  Ros英文全称为robot operating system。如其名,其主要用于硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,具体表现如动态导航壁障、手臂抓取物品、图像识别等。作为开源系统,其汇集众多社区贡献者项目代码,遵循于BSD许可。

2. 现状概述

  目前Ros已在机器人研究领域掀起热潮。以robocup大赛为例,国内许多参赛队伍机器人导航模块采用此系统。中科大“可佳”机器人曾于去年夺得国际赛冠军,不例外,他们也采用ros系统,可见ros潜力可观。

2. Ros原理概述

1 文件系统

1. 包

  Ros文件系统主要以包为主,功能程序打包成包以模块形式独立运行。建立包时添加依赖、导入ros官方库或开源包,扩展程序功能模块。包通过CMake编译系统编译,可以在pakage.xml中自行定制编译细节。包的层次结构可见图1.

图1
图1

2. 堆

  堆是包的集合,它提供一个完整的功能。

2. 计算图级

1. 节点

  节点即为程序模块,可视作ros程序的基础组成模块。各个节点作为线程独立运行,执行不同操作,通过通讯传输数据。

2. 消息

  节点之间通过消息通讯。消息所采用的数据结构既可以是C语言所支持的数据结构,也可以是ros内置的数据结构,如导航模块所需的geometry/Twist数据类型,更可以是自定义的数据结构。

3. 话题

  消息通过发布/订阅的方式传播,节点发布消息到话题,另一节点订阅话题,即可以获取消息。可见图2.
 

这里写图片描述
图2

4. 服务

  服务好比web服务器,采取请求/回应模式传输数据。相比于话题的广播式发布数据,服务节点通信信道是唯一的,也由此简化节点设计。

5. Actionlib

  Actionlib实时反馈数据,支持高级数据处理与节点设计模式。

3. Ros安装

  Ros推荐运行于ubuntu操作系统,安装方法可参照官网教程。
由于其对于图像处理有一定要求,所以计算棒、树莓派等简单计算机并不能胜任工作。

4. Ros简易指南

1. 工作空间

  创建工作空间以在其内创建软件包。

2. Rviz

  Ros可视化工具,将地图数据、激光数据、点云数据可视化表现。支持用户自行配置以及保存配置信息。

3. 常用命令

catkin_init_workspace:初始化工作空间catkin_make:编译软件包rospack find:寻找软件包roscore:运行ros内核rosrun:运行节点roslaunch:运行launch文件rostopic pub:发布消息至话题rosrun rqt…:rqt命令集提供一系列可视化工具

4. 常用数据类型

geometry/Twist:包含线速度、角速度数据,用以下发底盘速度。sensor_msgs/Laser_scan:激光数据类型scansor_msgs/PointClouod:点云数据类型

5. Launch文件

  Launch文件支持。其实际为xml所定义的格式化语言,通过launch文件,可以同时启动多个结点、读入参数等等。

5. 导航

1. 导航架构

  导航涉及底盘运动、实时避障等。其中又可分为坐标系系统、传感器模块、里程计模块、底盘控制、地图服务等。
  要充分利用导航堆,需要合理配置各个模块,针对机器人硬件适配与优化。

2. Navigation stack

1. Global、Local

  全局规划负责路径规划,本地规划则负责局部实时规划。
  设定目标点后,全局负责规划路径,遇见障碍物或者局部地图产生变化时,本地负责分析并重新规划合理路径。

2. Costmap

  导航堆用costmap储存障碍物信息。

3. Recovery_behaviors

  导航过程中难免产生误差,当导航模块计算得规划数据和实际数据存在误差,便会采取修复行为来修复tf坐标系数据。
  修复行为可分为:rotate_recovery和clear_costmap_recovery。
Rotate_recovery:旋转360度以清理costmap
Clear_costmap_recovery:移动至原地点一定距离外借以清理costmap

4. Cmd_vel

  导航模块下发速度时常用话题名。

5. Map_sever

  地图服务采用像素点匹配模式,即实时数据和地图数据进行像素点匹配。因此,必要时可以使用photoshop修改地图,模拟障碍物信息。

6. Amcl

  机器人的二维移动概率定位系统。

这里写图片描述
图3

3. Tf坐标系

  机器人由各个组件组成,如激光、底盘、里程计、手臂。Ros中需要为各个组件建立独立坐标系,再通过tf系统转换各个坐标系,而base_link则作为坐标系中心。见图4
这里写图片描述
图4
  建立tf树以建立合适的tf坐标系,可见图5。
  各个独立坐标系通过tf树建立互相联系,tf坐标系既可为机器人定位,也可为各组件有序运动助力。

这里写图片描述
图5

4. 传感器

1. 激光数据

  激光数据主要用于二维导航。所需传感器为激光,使用数据类型为senor_msgs/LaserScan。

2. 点云数据

  点云提供三维世界数据,主要用于建立三维地图。Kinect等传感器支持点云数据输入,使用数据类型为senor_msgs/PointCloud。

5. 底盘控制

  底盘是机器人最重要的组件之一,运动控制器、里程计、电机等基础组件都包含在底盘中。而同时,若底盘不能够正常运作,上层许多功能都无法正常服务。
  适配底盘也即是将cmd_vel数据类型转换成驱动器解析需求的数据类型,再由驱动器控制电机转动,完成底盘运动。

6. 里程计

  里程计返回里程数据,传递给里程计坐标系。

6. Pluginlib

  编写插件以配置nav core的修复行为,costmap误差较大时,合理采取修复行为以抵达目标点。

7. IDE

  正确配置IDE,则可以在IDE中编写及调试ros程序。
  c、c++推荐使用eclipse,python推荐使用pycharm。

引用块内容
http://blog.csdn.net/hcx25909/article/category/1191901
http://blog.csdn.net/lanhuadechenmo
wiki.ros.org

0 0