ROS探索总结(七十二)—— ROS加速机器人智能化变革,从云端大脑到本地运动

  • 内容
  • 评论
  • 相关

~欢迎关注~

微信公众号:古月居

新浪微博:古月春旭

知乎专栏:古月居

原文链接:ROS加速机器人智能化变革,从云端大脑到本地运动

 

2019年4月19日,古月君受邀参加了中国自动化学会主办的——国家机器人发展论坛,并做了题为《ROS加速机器人智能化变革》的主题报告,以下是报告的主要内容,和大家分享学习。

幻灯片1

各位好,很荣幸能够分享我们在机器人操作系统ROS方面的研究,我来自一家新创公司——武汉精锋微控,目前主要做机器人的驱控系统。我们从2011年开始,就一直基于ROS做机器人的相关研究和开发,我们相信ROS是加速机器人智能化变革的重要工具之一,目前也已经看到了很多相关成果。

幻灯片2

我们认为机器人的智能化需要全面发展,不仅要利用云计算等工具,为机器人配备一个超强大脑,还需要全面发展,充分提高本地的计算能力,让机器人成为一个头脑发达、四肢也发达的智能体。近年来我们一直围绕这两个主题在展开工作,ROS也为加速我们的研究和实现提供了强有力的工具支撑。

幻灯片3

在机器人智能化进程中,机器人操作系统ROS作为一种重要的软件框架,大大提高了工作人员的开发效率,在分工协作、软件维护和系统扩展中具有重要意义。

幻灯片4

2007年,斯坦福大学诞生了ROS的原型,2008年后由机器人孵化企业——Willow Garage公司接手维护,2010年正式开源,2013年建立开源机器人基金会,之后推出长期支持版Indigo、Kinetic、Melodic,保持和Ubuntu LTS的周期一致。

为了提高ROS在产品中的可用性,2017年还推出了完全重新设计的ROS 2。在不到12年的时间中,ROS已经发展成为机器人领域的普遍标准,各大公司也纷纷投入到ROS社区,不断推进下阶段ROS 2的进程。

幻灯片5

ROS虽然意为机器人操作系统,但它本质上是一个针对机器人的软件框架,核心目标是提高机器人研发中的软件复用率,可以在通信机制、开发工具、应用功能和生态系统四大模块中减少开发者各自造轮子的重复工作。

ROS目前已经广泛应用于各种类型的机器人,涉及的应用功能也非常丰富,我们可以在友好的开源社区中找到很多高质量的项目,并且再次基础上二次开发,快速实现自己的应用功能。

幻灯片6

在不到12年的时间里,ROS社区中的功能包数量、下载量、wiki的访问量,以及相关的学术文章,都在大幅度的逐年增长,据2018年7月份的数据统计,ROS wiki每个月的访问量近20万,功能包下载量有30多万。

幻灯片7

以上为大家介绍了ROS的概况,接下来,我将从机器人的云端大脑和本地运动能力两个方面,汇报下我们基于ROS的一些工作。

幻灯片8

云计算是一个强大的技术工具,可以为机器人的快速成熟提供强有力的推动。在2010年的Humanoids会议上,卡耐基梅隆大学的James Kuffner教授首次将云计算与机器人技术结合,提出“云机器人”的概念,这也引起了业界广泛的讨论与研究。云机器人作为机器人学术领域的一个新概念,其重要意义在于借助互联网与云计算,帮助机器 人相互学习和知识共享,解决单个机器自我学习的局限性。

幻灯片9

RoboEarth是欧盟在2011年初资助的一个基于ROS的云机器人项目,由埃因霍温等大学和飞利浦公司的35位科学家共同合作研发,目标是建立面向机器人的万维网。RoboEarth是专门为机器人服务的一个网站,提供一个巨大的网络数据库系统,机器人在这里可以分享信息、互相学习彼此的行为与环境 。

幻灯片10

由RoboEarth项目衍生了明星创业公司——Rapyuta。他们在Roboearth庞大数据库的基础上,将机器人的大脑也放入了云端,而且基于ROS提供了一系列基于web的开发工具,开发者可以在浏览器中完成机器人从设计、仿真到实现的全部过程。

幻灯片11

云计算是很多大公司的优势,他们有庞大的计算能力和工具集群,所以他们也逐渐将触角延伸到机器人领域。2018年11月,最大的云计算平台厂商——亚马逊,推出了RoboMaker云机器人平台,同样是基于ROS框架,集成了自身在机器学习、图像语音处理和平台方面的优势,可以帮助开发者在云端快速实现大规模的机器人开发、测试和部署,还可以支持未来机器人软件的持续更新。

可参考:亚马逊云机器人平台RoboMaker,借助ROS重定义机器人开发方式

这些云机器人工具和平台都将提高机器人的可用性和易用性,而他们实现的核心也都是机器人操作系统ROS。

幻灯片12

这是我们在2014年发表论文中提出的基于ROS的云机器人架构,设计理念是机器人即服务,可以将不同种类的机器人实现松耦合的连接,通过统一的服务单元,为用户提供丰富的应用功能。在本地云中实现以密集型计算为主的应用服务,比如机器人SLAM和视觉处理等,而在全局云中基于RoboEarth实现机器人全局数据的存储,共享学习和交互。

幻灯片13

我们的主要创新工作是将传统云切分成了全局云和本地云两个部分,全局云是全局范围内的资源共享平台,包括世界各地的机器人可共享资源,同时对这些资源进行处理分析,以提供进一步基于数据的服务。

密集计算任务就交由本地云负责,这样可以释放全局云的计算压力,提高网络稳定性,本地云也可以根据局部需求做个性化定制,比如一个酒店组成的的本地云,其中的机器人主要以轮式移动型服务机器人为主,本地云就可以主力提供slam、导航、图像方面的服务,系统更加灵活,安全性也可以进一步提高。

幻灯片14

这是我们基于全局云实现的知识分享演示,机器人对物体建模后分享至全局云端,所有可访问云端的设备都可以下载该模型,并作为物体识别的目标。

幻灯片15

本地云为机器人提供SLAM与导航服务,利用ROS标准的接口封装统一的机器人功能。SLAM建立的地图可以在全局云端分享,如果有敏感信息的话,也可以在本地云端分享,提高安全性。

幻灯片16

我们还可以通过手机、浏览器远程访问并监控机器人。

幻灯片17

智能机器人的成熟不能只靠大脑方面的增强,机器人自身也需要有强健的筋骨,能够更好得完成大脑下达的指令,很多情况下还需要在机器人上搭配一个小脑,完成实时性较高的控制工作。所以我们进一步设计开发了新一代片上驱控系统,类似于手机中高通、华为各家争抢的SoC芯片,我们希望给机器人本身安装一个足够强大的“芯”脏,提高机器人控制系统自身的能力。

幻灯片18

以工业机器人为例,通用的控制系统中包含不同厂家声场的驱动器、控制器和IO设备,其中包含20颗左右的可编程芯片,接线部署繁杂,体积大,而且产品间的兼容性问题不能充分发挥控制系统的性能。所以我们设计了一款全新架构的片上驱控系统,可广泛应用于多种机器人系统中,在体积大幅度减小的同时,整体性能和成本控制也更好。

幻灯片19

该设计的核心是使用一颗SoC芯片,解决之前20颗芯片的问题,不再需要复杂的连线和通信。这颗SoC芯片是一款ARM+FPGA异构平台,我们在FPGA中使用硬件逻辑实现了常用电机类型的通用驱动和同步控制算法,ARM端嵌入了机器人控制算法和通信协议栈的支持,部分功能是基于ROS社区中的资源二次开发而来,整个系统支持ROS及其工业分支ROS-I接口。

幻灯片20

我们设计的片上驱控系统,可以兼容多种机器人结构,并且提供机器人自底向上的软硬件支持。借助片上系统中的FPGA,很多基于模型的计算和机器学习算法可以高速运行,提升机器人的本地处理和认知能力,在此之上,我们也封装了很多机器人的通用算法,以ROS为原型提供标准API和通信协议,提供类似操作系统的功能。

幻灯片21

我们也相信,随着机器人的广泛应用,机器人也将会成为生活、生产中重要的数据入口,利用片上系统可以拿到庞大的高速数据,再配合云端强大的计算能力,可以为未来智能制造提供强有力的支持。

幻灯片22

未来我们希望在SoC平台的基础上不断延伸,结合云机器人架构,打造从端到云的智能机器人解决方案。而在这个方案的设计、实现过程中,都离不开ROS提供的众多工具和开源社区的支持。

幻灯片23

这就是我们在利用ROS加速机器人智能化变革之路上的探索实践,欢迎各位专家批评指正。

 

更多内容欢迎关注:

微信公众号:古月居 (guyue_home)

新浪微博:古月春旭

知乎专栏:古月居

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

评论

33条评论
  1. Gravatar 头像

    ll 回复

    老师你好,我用一个循环,将position和orientation按照for循环的规律变化放入waypoints,机器人为何只到第一个点,然后规划失败呢

      • Gravatar 头像

        ll 回复

        @古月 t=math.pi
        if cartesian:
        for m in range(0,2):
        for num in range(0,72):
        hudu = t*num/144
        first_pose.position.x=hudu
        first_pose.position.y=1.2+m*0.5
        if num<36:
        first_pose.position.z=0.5+0.2*math.sin(8*hudu)
        if num10 and num24 and num<=28:
        first_pose.orientation.x=0
        first_pose.orientation.y=math.sin(t*(30-(num-25)*10)/360)
        first_pose.orientation.z=0
        first_pose.orientation.w=math.cos(t*(30-(num-25)*10)/360)
        else:
        first_pose.orientation.x=0
        first_pose.orientation.y=math.sin(t*(29-num)*5/360)
        first_pose.orientation.z=0
        first_pose.orientation.w=math.cos(t*(29-num)*5/360)
        else:
        first_pose.position.z=0.5+0.2*math.cos(8*hudu)
        if num50 and num<=55:
        first_pose.orientation.x=0
        first_pose.orientation.y=math.sin(t*(30-(num-51)*7.5)/360)
        first_pose.orientation.z=0
        first_pose.orientation.w=math.cos(t*(30-(num-51)*7.5)/360)
        else:
        first_pose.orientation.x=0
        first_pose.orientation.y=math.sqrt(3)/2
        # math.sin(t*(120+(num-56)*3.75)/360)
        first_pose.orientation.z=0
        first_pose.orientation.w=0.5
        # math.cos(t*(120+(num-56)*3.75)/360)
        waypoints.append(deepcopy(first_pose))
        老师,这是我的for循环,前面已经设置初始点放入waypoints中了

  2. Gravatar 头像

    mr.guo 回复

    我想请教下,ros不是开源的么,是否适合商用产品开发。如涉及到一些核心的技术,有什么方式去加密核心代码。或者通常如何设计产品框架,核心代码放在什么地方,如何防止盗版,窃密。

    • 古月

      古月 回复

      @mr.guo 可以源码修改用于商业产品开发,代码可以在github上找到,关于加密方法可以参考网上的资料,大部分都是c++的代码

  3. Gravatar 头像

    小范同学 回复

    我们这边是在TX2上开发的ros系统,我这边需要做ROS系统的测试,主要做软件测试,老师觉得应该怎么进行相关功能的测试

  4. Gravatar 头像

    KH 回复

    老师您好,想请问如果想要用cartographer运行costmap,正打算跑navigation,应该怎么修改cartographer的源码呢?

    • 古月

      古月 回复

      @KH 请参考《ROS机器人开发实践》,不需要修改源码,修改launch和配置文件就行

  5. Gravatar 头像

    ll 回复

    老师您好,我想在rviz的基础上开发出相应功能的界面(已配置好QtCreator),我应该如何开始做,有没有相关的资料呢,谢谢老师

    • 古月

      古月 回复

      @ll 参考古月居有一篇介绍rviz插件的文章

      • Gravatar 头像

        ll 回复

        @古月 老师,是不是说我用qt编大界面,再以插件的形式在rviz中添加,界面中比如说我设定的按钮功能依旧能实现?

  6. Gravatar 头像

    ll 回复

    老师您好,在逆解这块,设定一个目标位姿,它包括直角坐标系下的x,y,z位置坐标值,以及四元数姿态值,这个姿态值是指什么,看了好多还是没明白,求老师指导

    • 古月

      古月 回复

      @ll 姿态就是围绕三轴的旋转角,可以用四元数表述

      • Gravatar 头像

        ll 回复

        @古月 嗯嗯,谢谢老师,我在roboware中调试程序,不管是.py还是.cpp文件,都会出现 not in executable format:不可识别的文件格式(这些程序我都允许作为程程序执行文件了),我应该怎么做

        • Gravatar 头像

          ll 回复

          @ll 老师,还有我在调试程序的时候,会出现Failed to import pyassimp, see https://github.com/ros-planning/moveit/issues/86 for more info,然后就进行不下去了,我通过sudo pip uninstall pyassimp
          提示了Requirement already satisfied: pyassimp in /usr/lib/python2.7/dist-packages (3.0.1264),但是并没有起作用

          • 古月

            古月 回复

            @ll 上边的错误好像没影响的,我这里也有

        • 古月

          古月 回复

          @ll roboware我不太清楚,可以试下其他IDE

          • Gravatar 头像

            ll 回复

            @古月 谢谢老师的解答。我发现python文件要roslaunch我程序所在的包才能调试,但是启动roscore就不能调试,而.cpp文件因为在roboware中有节点显示,就可以直接调试,这是为什么呢

            • Gravatar 头像

              ll 回复

              @ll 老师,我想走一个5×5的阵列,发现只能走外循环,内循环不行 代码如下(麻烦老师了):
              waypoints = []
              waypoints.append(first_pose)
              if cartesian:
              for num in range(1,6):
              for i in range(1,5):
              if num % 2==0:
              first_pose.position.y-=0.1
              else:
              first_pose.position.y+=0.1
              waypoints.append(first_pose)
              if num<5:
              first_pose.position.x+=0.1
              waypoints.append(first_pose)

  7. Gravatar 头像

    啦啦大侠 回复

    古月老师您好,gazebo仿真时出现[ERROR] [1561342600.607019970, 370.934000000]: Client [/move_base] wants topic /scan to have datatype/md5sum [sensor_msgs/PointCloud/d8e9c3f5afbdd8a130fd1d2763945fca], but our version has [sensor_msgs/LaserScan/90c7ef2dc6895d81024acba2ac42f369]. Dropping connection.
    请问老师,这怎么回事啊,具体是那个地方出错啦

  8. Gravatar 头像

    小虎 回复

    古月学长好(华科学弟报到),我是买了您的书籍在学习ROS,请教一个问题,我删掉了一个ROS的工作空间,但是在ROS PATH的环境变量中,它的路径还在,怎么删除掉这个环境变量中的路径~

  9. Gravatar 头像

    薛棣棣 回复

    老师,在ROS中进行多个机器人的协调有什么可以参考的资料

  10. Gravatar 头像

    小昌同学 回复

    老师,你好,激光采集的点云,转换成立体栅格,我想提取特征点,但是立体栅格的表面存在噪声,不平整,我该怎么去噪声呢,对于立体栅格提取特征点,您有什么建议吗

发表评论

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据