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

  • 内容
  • 评论
  • 相关

终于结束了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

 


原创文章,转载请注明: 转载自古月居

本文链接地址: ROS探索总结(二十九)——功夫茶机器人项目总结

微信 OR 支付宝 扫描二维码
为本文作者 打个赏
pay_weixinpay_weixin

评论

36条评论
  1. Gravatar 头像

    莫波 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        莫波 回复

        @古月 古月大神,再次请教。目前我已经将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 ,同样报错。请教原因。

      • Gravatar 头像

        莫波 回复

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

        • Gravatar 头像

          莫波 回复

          @莫波 古月大神,你好。我在已将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),同样报错。请教原因。

        • 古月

          古月 回复

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

  2. Gravatar 头像

    回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        柳晓栋 回复

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

      • Gravatar 头像

        柳晓栋 回复

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

        • 古月

          古月 回复

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

          • Gravatar 头像

            柳晓栋 回复

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

  3. Gravatar 头像

    zq 回复

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

    • 古月

      古月 回复

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

  4. Gravatar 头像

    Y-liberal 回复

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

    • 古月

      古月 回复

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

  5. Gravatar 头像

    单腾飞 回复

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

      • Gravatar 头像

        柳晓栋 回复

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

        • 古月

          古月 回复

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

          • Gravatar 头像

            柳晓栋 回复

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

  6. Gravatar 头像

    海漩涡 回复

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

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        y 回复

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

        • 古月

          古月 回复

          @y 检查一下follow_joints_trajectory话题数据

  7. Gravatar 头像

    海漩涡 回复

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

    • 古月

      古月 回复

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

  8. Gravatar 头像

    海漩涡 回复

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

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

    • 古月

      古月 回复

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

  9. Gravatar 头像

    Shawn 回复

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

    • 古月

      古月 回复

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

  10. Gravatar 头像

    Shawn 回复

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

    • 古月

      古月 回复

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

      • Gravatar 头像

        SpecTian 回复

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

  11. Gravatar 头像

    海漩涡 回复

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注