ROS探索总结(二十九)——功夫茶机器人项目总结

23885
80
2016年11月30日 20时02分

终于结束了18届高交会的功夫茶项目展示,总体来讲,展示效果不错,吸引了众多各年龄段的观众,还上了回CCTV的新闻。

在这里做一个阶段性的总结,也是自己这大半年来的所做所得。

今年4月中旬我来到深圳,和其他几个师兄创建了现在的公司——深圳星河智能科技有限公司,主打工业机器人。5月份完成了Ethercat主站部分的开发,6月份使用ROS建立了整套机器人的开发环境和可视化界面,7月份在实体机器人上实现了运动控制,8月份完成了机器人点动、连续运动的开发,9月份正式开始功夫茶机器人项目,并且完成了动作框架的开发,10月份集成了视觉识别并完成了整套动作的编排调试,11月份完成细节优化和错误处理,最终就是高交会上所展示的效果。

clip_image002

公司所有人都不是工业机器人方面出身,在最初阶段对工业机器人几乎没有概念,但是我们利用深圳的众多资源,迅速学习到了大量相关方面的概念,并且付之于行动,虽然水平还很初级,但至少搭建起了一整套系统。在此之中,最大的功臣莫过于ROS,帮助我们迅速完成了系统构建和应用开发。

clip_image004

ROS中提供了众多关于机械臂方面的资源,其中最重要的莫过于MoveIt!轨迹规划在工业机器人中占据举足轻重的地位,但是对于我们这样初登大堂的开发者来说,还缺少众多专业知识,MoveIt中提供了许多轨迹规划方面的算法,可以让我们把注意力集中在系统的搭理上,而不必纠结算法实现。此外,rviz提供了可扩展的可视化界面,针对我们需要的功能开发一些插件,可以快速建立适合需求的控制监控界面。

当然ROS也不是万能的,它主要完成上层需要的功能,底层的控制器核心完全是自主开发,通过ROS-I中的simple message和上层模块通信,实现轨迹插补,日志上报,实时监控,参数配置,实时读写ethetcat总线等功能。

clip_image006

最后,来发表一些对ROS的看法。ROS虽然好用,但是目前的ROS1还只适合于研发,如果没有强大的研发能力,建议还是不要轻易应用于产品。我们在开发过程中,遇到过以下一些坑:

    1. roscore会突然挂掉,node会突然挂掉,rviz会突然挂掉,ROS的一切都会挂,系统就go die。。。

    2. moveit没办法实现连续运动,也没有点动等基本操作,需要去看moveit的底层代码然后重新组合去实现。

    3. ROS没有实时功能,需要自己搭建实时核,开发实时任务

    4. ROS资源占用率较大,对计算机的性能要求较高

目前的ROS1,在产品的研发初期,可以借助其完成快速原型开发,验证产品模型,然后在最终产品中,需要逐渐减弱对ROS的依赖,甚至彻底脱离(至少脱离ROS core),如果需要用到ROS功能包中的代码,也要对其有一定了解。

clip_image008

 

发表评论

后才能评论

评论列表(80条)

  • 绝非小练 2019年5月13日 上午10:28

    古月师兄,得知你是华科校友,我倍感亲切。我目前在华科机械学院做一个机器人的项目,大体跟你做的这个很像。我想问您一下 IgH EtherCAT master 如何控制伺服驱动器实现电机的同步运转?你们当时的伺服驱动器用的是哪一个厂家的,是不是遵从CiA402规范?虽然现在大部分的伺服驱动器都提供EtherCAT接口,但是我担心每个伺服厂家定义自己独特的数据对象。如果又没有办法获取到伺服驱动器的从站信息描述文件和使用控制手册,就算联通EtherCAT主从站可能也没有办法用主站正确控制电机。古月师兄,您当时是怎么做的呢?现在研一下学期,快要开题了,很迷茫。

    • 古月 回复 绝非小练 2019年5月14日 下午5:59

      我们用的清能德创的驱动器,CiA402,根据IgH EtherCAT的example做的

    • 绝非小练 回复 古月 2019年5月15日 上午9:14

      哦哦,师兄,IgH EtherCAT 的 example 能不能发给我一份啊?

  • 张桥 2018年12月10日 下午2:06

    胡老师好,跟您发了一封邮件,询问一下学业上的困惑,非常希望得到回复,谢谢

  • 云隐 2018年6月26日 下午7:42

    古月大神,请问我ros一启动igh主站,从站就掉了是怎么回事,主站都扫描不到从站了,只有重启主站才能扫描的到从站,再启动ros又掉了。这有什么可能的原因造成的呢。

    • 古月 回复 云隐 2018年6月26日 下午7:58

      可能是ROS在实时性方面有影响吧

    • 云隐 回复 古月 2018年6月29日 上午10:04

      你有简单的例程可以分享一下吗,我能连上就行了

    • 古月 回复 云隐 2018年6月30日 上午12:30

      我这里没有这样的例程

    • 云隐 回复 古月 2018年7月9日 下午12:21

      你好,我现在ros能连上伺服了,但是伺服从站老是掉了又自动重连,我猜是实时性不好的原因。关于实时性这方面该怎么加上去,之前用的是xenomai的,但是igh里面的用户程序和ros的程序似乎有些不一样

    • 古月 回复 云隐 2018年7月9日 下午5:24

      这个部分和实时性相关的程序我建议不要放到ROS节点里,单独写一个xenomai的进程程序,和ros没关系。ROS主要做上层处理,通过共享内存等方式和底层的伺服控制进程通信。

  • 2018年5月26日 上午9:50

    古月大佬,问个比较愚蠢的问题,igh和这个ros怎么进行数据交互。就是我对这个概念不是很清楚,或者有没有这方面的资料,做个毕设用。

    • 古月 回复 2018年5月28日 下午12:54

      igh是一个库,就像使用opencv库一样,在c++的代码里调用就行了

  • libing403 2018年3月23日 上午8:27

    学习了,你这个开发速度好快呀,几乎每个月完成一大部分功能的开发。

  • Jamme 2018年3月13日 上午8:52

    请问月哥,控制器插补和伺服驱动器的插补有什么区别吗?谢谢。

    • 古月 回复 Jamme 2018年3月13日 下午3:03

      控制器就是按照周期插补的,比如1ms、4ms,伺服驱动器内部就是三个控制环的处理了,不太懂

  • 莫波 2017年11月3日 下午4:41

    古月大神,你好。非常感谢您的分享精神。鄙人想用ROS做工业机器人控制系统(无奈其他系统都太贵,承受不了),但您不建议用ROS应用于产品,主要是因为您列出的四点原因中的哪项呢?是因为ROS不稳定吗,谢谢。

    • 古月 回复 莫波 2017年11月4日 下午2:13

      使用ROS做控制系统肯定没问题,我们就是基于ROS做的第一版工业机器人控制系统;至于没办法做产品,ROS的稳定性是一个很关键的问题,还有性能上(实时性、运动规划效率等)都和商业级别有很大差距,很多功能ROS里也没有,还是需要自己开发。

    • 莫波 回复 古月 2017年11月9日 下午3:35

      古月大神,再次请教。目前我已经将Xenomai2.6.5内核补丁加入Linux3.18,原生Ubuntu14.04的内核是Linux4.4,现在系统有两个内核,进入Linux3.18后安装Igh Ethercat 1.52版本,在./configure指定 3.18的Linux后(–with-linux-dir /usr/src/linux-headers-3.18.20),在make modules时,自动进入原生的linux4.4,然后编译出错(make[3]: *** [/home/mo/ethercat-1.5.2/devices/generic.o] 错误 1
      make[2]: *** [/home/mo/ethercat-1.5.2/devices] 错误 2
      make[1]: *** [_module_/home/mo/ethercat-1.5.2] 错误 2
      make[1]:正在离开目录 `/usr/src/linux-headers-4.4.0-31-generic’
      make: *** [modules] 错误 2

      make modules开始(make -C “/usr/src/linux-headers-4.4.0-31-generic” M=”/home/mo/ethercat-1.5.2″ modules
      make[1]: 正在进入目录 `/usr/src/linux-headers-4.4.0-31-generic’)
      请教是bug还是操作指令不对,谢谢。
      另外再请教:由于刚接触linux,我在编译Xenomai程序时,cpp程序的包含文件,例如#include 等,提示没有那样的路径,然后我手动找到头文件的路径#include ,同样报错。请教原因。

    • 莫波 回复 古月 2017年11月9日 下午3:42

      不好意思,最后一段可能不被允许,我用小括号代替,谢谢:由于刚接触linux,我在编译Xenomai程序时,cpp程序的包含文件,例如#include (native/task.h) 等,提示没有那样的路径,然后我手动找到头文件的路径#include (/usr/xenomai/include/native/task.h),同样报错。请教原因。

    • 莫波 回复 莫波 2017年11月9日 下午3:55

      古月大神,你好。我在已将xenomai补丁装进linux3.18内核中了,目前系统有两个内核:ubuntu14.0原生的linux4.4和带xenomai的linux3.18,现在我要编译安装igh ethercat,是进入带XENOMAI的3.18环境还是进入ubuntu14.0原生的linux4.4安装igh ethercat(经实验,只有进入linux3.18才能调用xenomai的函数)。在编译ethercat时,./configure选择linux 3.18目录, 但make modules时自动进入linux4.4的目录。请问是指令有问题还是其他原因。刚接触linux,问的初级,见谅。
      不好意思,由于刚接触linux,我在编译Xenomai程序时,cpp程序的包含文件,例如#include (native/task.h) 等,提示没有那样的路径,然后我手动找到头文件的路径#include (/usr/xenomai/include/native/task.h),同样报错。请教原因。

    • 佩奇的弟弟乔治 回复 莫波 2018年4月13日 上午9:10

      你好,我跟你遇到了一样的问题,编译Xenomai程序时#include (native/task.h)等提示没有那样的路径,所以编译通过不了。请问你解决了吗?是怎么搞定的,谢谢了

    • 古月 回复 莫波 2017年11月10日 下午8:45

      你好,我用的是这样的配置:Ubuntu 14.04 + Kernel 3.14.17 + Xenomai 2.6.4
      就是按照网上的资料安装的,我这里有配置的笔记,已经发到你邮箱了,供参考

    • 过陈策 回复 古月 2018年6月30日 下午11:56

      古月老师你好,您的配置笔记是否可以给我也发一下? 非常感谢

    • 古月 回复 过陈策 2018年7月1日 下午5:30

      邮箱?

    • 过陈策 回复 古月 2018年7月1日 下午10:28

      80469042@qq.com 非常感谢

    • guochence 回复 过陈策 2018年7月2日 下午5:53

      古月老师,您用的Ubuntu 14.04 + Kernel 3.14.17 + Xenomai 2.6.4 ROS用的哪个版本? Indigo 吗?? Kinetic和Indigo 差别大吗?
      我想用Kinetic,但是ubuntu16.04打xenomai2.6.4一直报错cpu_allow 错误,打算换ubuntu16.04。
      刚买的您写的 ROS机器人开发实践,看也是Kinetic,现在好纠结

    • 古月 回复 guochence 2018年7月4日 下午3:56

      我用的是ubuntu14.04+ROS indigo,主要是因为ubuntu14.04打实时补丁好打

    • 古月 回复 过陈策 2018年7月4日 下午3:55

      已发送

    • guochence 回复 古月 2018年7月5日 下午3:25

      古月老师你好,Etherlab IGH作为主站使用,源码搭建起来后还需要其它硬件支持吗??
      之前没用过Ethercat, 通过Ethercat控制电机,从站需要一个Ethercat控制卡,主站需要控制卡吗?? X86平台搭建Etherlab IGH作为主站,主站还需要其它硬件支持吗?–控制Ethercat电机从站

      感谢老师

    • 古月 回复 guochence 2018年7月6日 上午9:07

      主站不需要控制卡或者其他硬件,只要有网卡就行了,最好是intel的网卡。

    • 杨同学 回复 古月 2019年10月9日 上午9:40

      古月老师好,能给我邮箱发下这个配置笔记不,多谢。dbdxnuliba@sina.com

    • lyh 回复 古月 2018年9月5日 下午5:30

      古月老师您好,麻烦您也帮我发一份配置笔记好吗?
      lyh_buaa@aliyun.com

    • 古月 回复 lyh 2018年9月9日 下午3:04

      已发送

    • nick 回复 古月 2018年11月5日 下午12:22

      古月老师,最近购买了一本ROS机器人高效编程,是我看到的最好一本介绍ROS的参考书。我现在也在考虑搭建机器人系统,能发一份配置笔记给我吗?

    • 古月 回复 nick 2018年11月6日 下午7:47

      留下邮箱

    • wyh 回复 古月 2018年12月8日 下午3:43

      古月老师,最近也在研究实时linux和ethercat主站,能发一份配置笔记给我吗?谢谢!

    • ozjacky1920 回复 wyh 2018年12月13日 下午10:15

      古月老师,敝人最近也在研究实时linux、ROS與ethercat主站(IGH),能发一份配置笔记给我吗?谢谢!
      邮箱地址如下
      M10712053@yuntech.edu.tw

    • wang 回复 古月 2019年5月24日 上午9:27

      您好,这个配置笔记能发一份给我么。邮箱:FuzzyA00@163.com 谢谢

    • 柳晓栋 回复 古月 2019年1月11日 上午11:08

      老师您好,我也是Ubuntu 14.04 + Kernel 3.14.17 + Xenomai 2.6.4,现在现象如下,其实我在用generic来跑的时候,没问题。但是我想用ecat提供的修改的实时补丁,但是其实在ecat下边的devices目录下,其实他的事实驱动是不支持3.14.17的内核的,只支持2.6.32,,2.6.33 ,,3.2 ,,3.4 等。所以我在编译试试网卡驱动模块的时候就会报一个错误,kernel 3.14 not available for r8169.不知道老师您是怎么解决这个问题的?求解答,还是您们就是用的generic跑的?打扰老师。我用的是笔记本电脑,网卡是realtak的

    • 柳晓栋 回复 柳晓栋 2019年1月11日 下午3:01

      我用的可能是老版本的igh,刚才在sourceforge上找到了支持3.14的网卡驱动。打扰了老师

    • 绝非小练 回复 古月 2019年6月17日 下午3:26

      古月师兄,Xenomei 的配置笔记能不能发给我一份啊?

    • 绝非小练 回复 古月 2019年6月17日 下午7:38

      古月师兄,Ubuntu + Xenomai的配置笔记能不能发给我一份啊?邮箱是m201870623@hust.edu.cn

    • 古月 回复 绝非小练 2019年6月19日 上午10:40

      关注“古月居”微信公众号,后台回复“xenomai”获取下载地址

  • 2017年11月3日 下午4:16

    古月老师,ethercat主站 是自己开发的吗?比如我想买商业的有推荐吗?

    • 古月 回复 2017年11月4日 下午2:08

      主站不是自己开发的,现在用的是Etherlab IGH,商业主站可以看下aontis公司的主站,可以用在linux下

    • 柳晓栋 回复 古月 2017年11月6日 下午4:18

      大佬,你好,我有以下几个疑问,1、ros中自带ethercat主站了吗。我看gihutb上有这个https://github.com/shadow-robot/ros_ethercat
      2,我简单的想法是,利用ethercat主站在ros中做一个发布节点,然后在做一个订阅的节点,发布的节点发布伺服位置信息给ethercat主站,订阅接受伺服返回的信息,可以吗这样?
      谢谢大佬抽空回答。做毕设,性能不需要那么高就行。。

    • 柳晓栋 回复 古月 2017年11月6日 下午4:18

      大佬,你好,我有以下几个疑问,1、ros中自带ethercat主站了吗。我看gihutb上有这个https://github.com/shadow-robot/ros_ethercat
      2,我简单的想法是,利用ethercat主站在ros中做一个发布节点,然后在做一个订阅的节点,发布的节点发布伺服位置信息给ethercat主站,订阅接受伺服返回的信息,可以吗这样?
      谢谢大佬抽空回答。做毕设,性能不需要那么高就行。。

    • 古月 回复 柳晓栋 2017年11月6日 下午7:34

      ROS里有ethercat主站,我之前也试过,不是很好用,后来改用Etherlab IGH了。你的想法没问题,建议插补一定要在一个节点里实时完成,这个对实时性的要求比较高,否则伺服驱动的会有问题。

    • 柳晓栋 回复 古月 2017年11月6日 下午9:58

      嗯嗯,找到了, soem。谢谢,到时候做到这一步有啥问题再来请教您

  • zq 2017年10月28日 下午9:25

    请问这个机械臂是自己改装的还是直接买的原厂的啊?很漂亮的机械臂

    • 古月 回复 zq 2017年10月28日 下午9:35

      机械臂的硬件的都是买的,我们只做控制系统

    • 莫波 回复 古月 2018年4月23日 下午5:06

      @古月大神 ,你好!我也想组装一个机械臂做实验,但是没找到有卖纯粹卖机械手臂的,请问您是买的机械臂成品还是找第三方加工然后自己组装的。请告知,谢谢。

    • 古月 回复 莫波 2018年4月24日 上午11:37

      可以找做机械臂的厂家合作的,只买本体就行

    • 莫波 回复 古月 2018年4月25日 上午11:49

      @古月 谢谢大神的回复,如果方便的话,请问能不能提供机械臂厂商的联系方式,本人资源匮乏,找不到合适的厂家。谢谢。

    • 古月 回复 莫波 2018年4月29日 上午11:32

      可以直接在网上搜的,很多工业机器人公司,联系销售就可以了

  • Y-liberal 2017年9月22日 下午4:06

    古月老师,我们现在想做直线和圆弧的轨迹规划,但是不知道该怎么入手,您能给指点一下,或者推荐一些资料吗?

    • 古月 回复 Y-liberal 2017年9月23日 上午11:49

      推荐看下《机器人学:建模、规划与控制》这本书,里边有直线和圆弧的轨迹规划,讲的还不错

  • 单腾飞 2017年7月25日 下午8:52

    “ROS没有实时功能,需要自己搭建实时核,开发实时任务“古月老师,您提到的这里实时核您是怎么搭建的呢?

    • 古月 回复 单腾飞 2017年7月27日 下午2:43

      我们使用的是linux+xenomai方案

    • 柳晓栋 回复 古月 2017年11月7日 上午8:56

      您好,我不懂xenomai这些东西,我想问一下,如果在unbuntu上安装xenomai之后,在运行ros的程序时,需要哪些改变,怎样融合进去,谢谢

    • 古月 回复 柳晓栋 2017年11月7日 上午9:19

      xenomai就是一个实时内核,需要用专门的API才能调用实时功能,可以把它理解为一个库;ROS程序不需要修改依然可以在系统上运行。

    • 柳晓栋 回复 古月 2017年11月7日 上午9:45

      嗯嗯,谢谢,我让我师弟研究一波这个。

    • guochence 回复 古月 2018年7月1日 上午12:09

      古月老师您好,您说的 “ROS程序不需要修改依然可以在系统上运行”是指ROS还以非xenomai内核运行吧?
      那如果需要ROS调用XENOMAI ,大体需要修改哪些部分??
      是指让节点跑xenomai 还是需要ROS core 整体都跑在xenomai下呢??

      非常感谢

    • 古月 回复 guochence 2018年7月1日 下午5:32

      是的,ROS不需要跑在xenomai内核上,节点里集成xenomai的接口就行了

  • 海漩涡 2017年3月2日 上午9:18

    月哥
    请教个问题:我想让终端器按预想的轨迹运动,或者说过中间点,有什么好办法?

    我知道computeCartesianPath接口可以实现,我用它画出了圆。
    但是它有个缺点,规划失败率高,我看源码失败的原因是IK失败。
    而且我要规划一条轨迹必须能采样出轨迹上的一系列点才行,比如说圆必须要用方式描述且取一定数量的点。

    • 古月 回复 海漩涡 2017年3月3日 下午5:15

      默认用的IK失败率确实高,改用另外一个trac_ik,容忍误差大,失败率低。我不确定moveit里面怎么做,我们是自己写算法做轨迹的,圆的话就是指定三点算出圆的方程,然后画出来。

    • y 回复 古月 2017年10月31日 下午5:44

      月哥,你的连续轨迹是怎样发送到gazebo中的?随机位置,目标位置都可以通过move_group发,但是用computecartersianpath发送失败,不知道哪里出问题了。

    • 古月 回复 y 2017年11月1日 下午4:33

      检查一下follow_joints_trajectory话题数据

  • 海漩涡 2017年2月27日 上午9:07

    月哥,连续运动你是怎样实现的?
    我当前是将多个运行的轨迹数据合并到一个轨迹中,然后再用AddTimeParameterization赋予时间、速度、加速度。
    请问我这样做会有什么问题吗?

    • 古月 回复 海漩涡 2017年2月27日 下午5:35

      目前我们在moveit里边也是这样做的,一般情况下应该没什么问题,但是如果轨迹数据很多,效率就不高了。

  • 海漩涡 2017年2月5日 上午9:38

    请问下“轨迹插补”是在哪部分完成的,规划出的一系列轨迹点还不能让手臂很好的运动吗

    请问你的moveit里的ik选用的是KDL吗, 轨迹规划算法我用的是RRTConnect,你用的是哪个

    • 古月 回复 海漩涡 2017年2月7日 上午9:58

      Moveit规划出来的轨迹点需要控制器完成插补,如果已经有控制器,就不需要自己完成,我们自己做控制器,插补就需要自己做。我们目前用的也是KDL

  • Shawn 2017年1月15日 下午1:09

    文章中同时提到了ROS1和ROS-I, 您其实是通过ROS-Industrial开发,然后吐槽ROSversion1一些不足吗?

    • 古月 回复 Shawn 2017年1月15日 下午8:36

      ROS-I包含很多ROS1中的功能包,可以说ROS-I就是把ROS1应用到工业机器人上的一种框架,所以本质是一样的

  • Shawn 2017年1月15日 下午12:57

    “moveit不能连续运动” 什么意思呢?谢谢!

    • 古月 回复 Shawn 2017年1月15日 下午8:33

      你好,在moveit中只能设置点到点的运功,没办法设置多个点依次运动

    • SpecTian 回复 古月 2017年5月21日 上午9:54

      其实多点依次运动可以用computeCartesianPath,一次添加多个pose就好了。但是moveit提供的东西确实太简单了,离工业要求还是有不少距离。

  • 海漩涡 2016年12月30日 上午11:12

    厉害,大赞月哥,你也在深圳啊