伴随科学技术发展,人工智能的需求日益增长,机器人领域也迅速发展,响应需求,Willow Garage公司于2010年发布了开源机器人操作系统Ros。
Ros英文全称为robot operating system。如其名,其主要用于硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间的消息传递、程序发行包管理,具体表现如动态导航壁障、手臂抓取物品、图像识别等。作为开源系统,其汇集众多社区贡献者项目代码,遵循于BSD许可。
目前Ros已在机器人研究领域掀起热潮。以robocup大赛为例,国内许多参赛队伍机器人导航模块采用此系统。中科大“可佳”机器人曾于去年夺得国际赛冠军,不例外,他们也采用ros系统,可见ros潜力可观。
Ros文件系统主要以包为主,功能程序打包成包以模块形式独立运行。建立包时添加依赖、导入ros官方库或开源包,扩展程序功能模块。包通过CMake编译系统编译,可以在pakage.xml中自行定制编译细节。包的层次结构可见图1.
堆是包的集合,它提供一个完整的功能。
节点即为程序模块,可视作ros程序的基础组成模块。各个节点作为线程独立运行,执行不同操作,通过通讯传输数据。
节点之间通过消息通讯。消息所采用的数据结构既可以是C语言所支持的数据结构,也可以是ros内置的数据结构,如导航模块所需的geometry/Twist数据类型,更可以是自定义的数据结构。
消息通过发布/订阅的方式传播,节点发布消息到话题,另一节点订阅话题,即可以获取消息。可见图2.
服务好比web服务器,采取请求/回应模式传输数据。相比于话题的广播式发布数据,服务节点通信信道是唯一的,也由此简化节点设计。
Actionlib实时反馈数据,支持高级数据处理与节点设计模式。
Ros推荐运行于ubuntu操作系统,安装方法可参照官网教程。
由于其对于图像处理有一定要求,所以计算棒、树莓派等简单计算机并不能胜任工作。
创建工作空间以在其内创建软件包。
Ros可视化工具,将地图数据、激光数据、点云数据可视化表现。支持用户自行配置以及保存配置信息。
catkin_init_workspace:初始化工作空间
catkin_make:编译软件包
rospack find:寻找软件包
roscore:运行ros内核
rosrun:运行节点
roslaunch:运行launch文件
rostopic pub:发布消息至话题
rosrun rqt…:rqt命令集提供一系列可视化工具
geometry/Twist:包含线速度、角速度数据,用以下发底盘速度。
sensor_msgs/Laser_scan:激光数据类型
scansor_msgs/PointClouod:点云数据类型
Launch文件支持。其实际为xml所定义的格式化语言,通过launch文件,可以同时启动多个结点、读入参数等等。
导航涉及底盘运动、实时避障等。其中又可分为坐标系系统、传感器模块、里程计模块、底盘控制、地图服务等。
要充分利用导航堆,需要合理配置各个模块,针对机器人硬件适配与优化。
全局规划负责路径规划,本地规划则负责局部实时规划。
设定目标点后,全局负责规划路径,遇见障碍物或者局部地图产生变化时,本地负责分析并重新规划合理路径。
导航堆用costmap储存障碍物信息。
导航过程中难免产生误差,当导航模块计算得规划数据和实际数据存在误差,便会采取修复行为来修复tf坐标系数据。
修复行为可分为:rotate_recovery和clear_costmap_recovery。
Rotate_recovery:旋转360度以清理costmap
Clear_costmap_recovery:移动至原地点一定距离外借以清理costmap
导航模块下发速度时常用话题名。
地图服务采用像素点匹配模式,即实时数据和地图数据进行像素点匹配。因此,必要时可以使用photoshop修改地图,模拟障碍物信息。
机器人的二维移动概率定位系统。
机器人由各个组件组成,如激光、底盘、里程计、手臂。Ros中需要为各个组件建立独立坐标系,再通过tf系统转换各个坐标系,而base_link则作为坐标系中心。见图4
图4
建立tf树以建立合适的tf坐标系,可见图5。
各个独立坐标系通过tf树建立互相联系,tf坐标系既可为机器人定位,也可为各组件有序运动助力。
激光数据主要用于二维导航。所需传感器为激光,使用数据类型为senor_msgs/LaserScan。
点云提供三维世界数据,主要用于建立三维地图。Kinect等传感器支持点云数据输入,使用数据类型为senor_msgs/PointCloud。
底盘是机器人最重要的组件之一,运动控制器、里程计、电机等基础组件都包含在底盘中。而同时,若底盘不能够正常运作,上层许多功能都无法正常服务。
适配底盘也即是将cmd_vel数据类型转换成驱动器解析需求的数据类型,再由驱动器控制电机转动,完成底盘运动。
里程计返回里程数据,传递给里程计坐标系。
编写插件以配置nav core的修复行为,costmap误差较大时,合理采取修复行为以抵达目标点。
正确配置IDE,则可以在IDE中编写及调试ros程序。
c、c++推荐使用eclipse,python推荐使用pycharm。
引用块内容
http://blog.csdn.net/hcx25909/article/category/1191901
http://blog.csdn.net/lanhuadechenmo
wiki.ros.org