公众号已经更新好了,比下面的内容增加了视频、动图、具体更多解释,欢迎阅读机器人操作系统ROS。下面内容就不用看了,直接点赞就好啦~
========
谢邀,一直没时间回答。
开发机器人,这句话本身就是Underconstrainted。不同的机器人(工业机械臂、无人机)、不同的开发层次(底层控制器、上层规划)、不同的开发目的(工业机器人、服务机器人)均会对应不同的答案。希望以后大家在知乎提问能更加准确。
@韩峰涛 的答案主要是侧重在工业机器人底层控制器的开发上。如韩总所说的那样,底层控制器注重的是实时性与稳定性。因此实时系统+高速通讯协议是这类控制器的必备属性了。这方面我接触比较少,只在KingstarMotion(RTX+EtherCAT模式)上做过开发,简单而言,用C/C++开发比嵌入式的方案爽多了。
===上面都是闲扯===
之所以补充这个答案,主要是看到题主添加有“机器人操作平台ROS”的标签,而且其他几个答主也提到了ROS(但并没有说清楚)。从我的角度上看,ROS(Robot Operating System)对于服务机器人上层算法开发和研究而言是一个很棒的工具。所以,这部分内容主要从研究机构的角度来说明“选用什么样的系统或平台开发机器人/机器臂”。
【备注:所有带公众号“qRobotics”水印的图片版权归本人所有,未经允许,。同时知乎不方便放动图和视频,所以明天会将这部分内容重新整理,增加视频与动图后发布到个人公众号Nao(qRobotics)上,欢迎大家关注~】。
为了说明清楚,我就从ROS是什么,为什么使用ROS,如何使用ROS三个方面展开讲。
1、ROS是什么
ROS是Robot Operating System的缩写,原本是斯坦福大学的一个机器人项目,后来由Willow Garage公司发展,目前由OSRF(Open Source Robotics Foundation, Inc)公司维护的开源项目。
根据wikipedia定义,OS is system software that manages computer hardware and software resources and provides common services for computer programs。也就是说操作系统是用来管理计算机硬件与软件资源,并提供一些公用的服务的系统软件。而ROS也自称是一个OS。
如上图所示,计算机的操作系统将计算机硬件封装起来,而应用软件运行在操作系统之上,不用管计算机具体应用的是什么类型的硬件产品。这能大大提高软件开发效率(否则大家只能都写汇编了)。
同理,ROS则是对机器人的硬件进行了封装,不同的机器人、不同的传感器,在ROS里可以用相同的方式表示(topic等),供上层应用程序(运动规划等)调用。
如上图(出自ROS官网)所示,ROS是:一种模块化软件通讯机制:消息(topic)、服务(service)、动作 (action)
一系列开源工具:如3D显示(Rviz)、坐标转换(TF)、实时画图监控(rqt_plot)等
一系列最先进的算法:SLAM(gmapping)、识别(ORK)、规划(MoveIt!)、仿真(gazebo)一款跨平台开发环境:语言(C++,Python,Java)、系统(Windows、Linux、Android)、机器人(Baxter、PR2、SDA5F等)
一个最活跃机器人开发交流平台。
2、为什么要用ROS
首先,用过工业机器人的人肯定知道,不同工业机器人的开发系统基本都不一样,示教、编程方法也不同,一个熟练使用Motoman的工程师很可能并不会使用Kuka机械臂。就算是同种机器人,由于固件版本的更新换代,也可能造成程序的不兼容(我在UR上就遇到过这个问题)。这就大大影响了机器人的推广普及。
对此,ROS可以用统一的方式来封装机器人(URDF模型+机器人驱动),用户只需要在ROS中编写应用程序,并不用关心机器人的控制方式。如果所有机器人都采用了这种方式,那么机器人必将得到更广泛地应用(对系统集成商的要求会降低)。
其次,现在越来越多机器人厂商开始尝试使用ROS,包括占据最多工业市场份额的机器人四大家族和各种流行的研究型机器人,甚至有如Baxter的,只能使用ROS控制。研究机器人的如果不去学习ROS的话,以后可能就会面临不会使用机器人的问题。
再者,机器人是一个复杂且涉及面极广的学科,从下往上包括机械设计、电机控制、传感器、轨迹规划、运动学与动力学、运动规划、机器视觉、定位导航、机器学习、高级智能等等。一个研究生基本不可能在几年时间内掌握所有领域。
对于一个做上层规划的研究生,如果不用ROS的话,往往需要花费非常长时间用于搭建实验系统,从而大大挤压了真正用在发明新知识的时间。例如,我做运动规划,就必须先把机械臂运动学正逆解、物体识别算法、碰撞检测算法等完成才有可能开始做运动规划。造轮子的事就交给专业造轮子的人做吧。
所以,对于科研人员来说,ROS可以帮助你快速搭建机器人软件系统,同时其模块化的设计可以让你方便地用自己的算法替换其中某一模块,让你专注于自己的研究点。
最后,就是对于创业或者参加比赛的人来说,ROS可以帮助你快速搭建原型样机。原型样机出来了,自然比只有设计说明书的人有优势。
为防止做广告嫌疑,创业的例子就不说了,就拿我们去年参加的一个创业大赛来讲。我们组四个人用了不到两个月时间完成了下面这个超市购物机器人的软硬件设计与制作,功能包括避障、防跌、人员跟随、蓝牙校正(跟踪对的人)、手势识别、商品自动计价、自动支付等。
嗯,我的公众号Nao(qRobotics)的头像就是在这个项目时创作的。
3、如何使用ROS
首先,就是要了解ROS的基本架构和开发方式。我个人是强烈推荐直接看ROS官网上的教程ROS/Tutorials的Beginner Level(多看几遍),同时充分使用ROS的问答社区ROS Answers与各模块的Mail Lists,很多基础问题可能前人都遇到过。
其次,在了解ROS的基本架构与开发方式后,就可以有针对性地看自己所关心的部分了。如做移动机器人的同学就去看Navigation教程;做物体识别的就去看ORK教程;做运动规划的就去看MoveIt教程。这一步最好能跟有实际机器人练手(如果没有的话,就用gazebo仿真)。由于一些模块的教程不够清楚(如MoveIt),一定要多练习,甚至是去看部分源码,先保证自己会用ROS实现一些功能。
对于ROS与实际机器人的连接,建议仔细看看action(编写机器人驱动package)、URDF(机器人描述文件)的教程(或者ros_control)。如下图,我为SDA5F机器人编写了URDF文件,并修改了motoman_driver中的action,使得在ROS环境中用MoveIt规划控制双臂机器人运动。
最后,就是进阶阶段了。我要强调一句“ROS只是一个工具”,你会用ROS做Navigation并不能说明你会Navigation。用ROS做研究与单纯对于自己研究的内容,必须沉下心去看教程和论文,去理解每种算法背后的原理,知道如何调整算法参数、如何改进算法,最终能够自己编写某部分代码,并替换ROS的相应模块(如自己写运动学正逆解替代KDL等)。
做研究,交流非常重要。如果你改进ROS某一算法后,最好能与package的原作者交流,将自己的修改merge到原项目中,在交流中提高自己与package的水平。当然,如果对算法有疑问,也可以直接咨询作者,ROS里的贡献者大都非常愿意分享和交流。
当然,在问别人之前,请一定要保证自己充分熟悉了官方Tutorials,而不是朝别人发一堆编译错误截图,然后问这是怎么回事。提问的艺术真的非常重要,有时候不是对方不愿意跟你交流,而是对方不愿意手把手带你过Tutorials。
如果觉得《python代码控制机械臂_选用什么样的系统或平台开发机器人/机器臂?》对你有帮助,请点赞、收藏,并留下你的观点哦!