2018年1月7日下午,第一届ROS Taipei年会顺利在台北举办,我有幸受邀参加了这次活动,并详细介绍了近两年来自己使用ROS进行机器人开发的具体细节。
在这次年会上,来自各地的开发者分享了ROS开发过程中的经验,并且展示了丰富多彩的机器人应用。
ROS Taipei 2018开发者年会合影
自主设计并3D打印的机械臂
自主开发的移动机器人
做工精美的机械手
我也分享了公司创业过程中,基于ROS开发的一款工业机器人——Kungfu Arm。
以下是此次分享的详细内容
▼
大家好,很荣幸受邀参加ROS Taipei年会,我是ROS机器人博客“古月居”的博主——胡春旭,也是深圳星河智能科技有限公司的联合创始人。
我公司的主要产品是智能化的工业机器人控制系统,目标是让工业机器人的使用更简单、更智能。今天分享的主要内容就是基于该控制系统的工业机器人——Kungfu Arm。
首先带大家人认识一下这个会“功夫”的机器人:
在该视频中,Kungfu Arm通过一系列复杂的动作,完成了泡制功夫茶的全部过程。这是我们在2016年底深圳高交会上展示的项目,还得到了中央电视台的报道。
该展示中的Kungfu Arm集成了视觉、触觉等多种传感器,不仅可以通过摄像头确定茶杯、茶球等物体的位置,还可以使用不同的力度抓取不同的物体。
在视觉、触觉的基础上,我们还为机器人增加了听觉。丰富的外界信息提高了整个系统的智能化,适合更多应用场景。
▼
之所以为这款机器人取名Kungfu Arm,并不是我们要造一个会武功、能打架的机器人保镖,而是希望他像中国功夫一样:内外兼修、灵活多变。
接下来我将就以上这几个方面,详细介绍这款机器人的实现细节。
▼
我所在的深圳及周边有众多工厂,很多工厂自动化程度较低 ,仍然在使用“人海战术”的生产线。虽然国家积极宣传工业4.0,但是对于这些工厂来讲,在改造成本、施工难度、管理理念等方面都存在鸿沟。
所以我们希望设计一款简单易用、高柔性、低成本、强智能的工业机器人控制系统,帮助工厂迈向自动化、智能化。
针对以上需求,Kungfu Arm主要具备四个目标特性:
· 集成化:Kungfu Arm集成六轴机器人、灵巧手、高速摄像头、麦克风阵列等硬件,也可以根据实际应用灵活裁剪、组合;
· 智能化:控制系统中需要实现在线运动规划、自主避障、力度控制、物体识别、语义理解等多种智能化算法处理;
· 简易化:通过离线仿真、可视化编程、语音编程、开放接口等方式提高机器人的易用性,降低对操作人员的技能要求;
· 可扩展化:控制系统支持EtherCAT、Ethernet、Modbus、USB、I/O等总线或接口,灵活扩展更多外围设备。
▼
ROS-I是ROS针对工业领域的一个分支,已经得到了众多知名机器人厂家的支持。它提供了一个通用的工业机器人框架,并且集成了ROS丰富的资源,通过Simple Message协议与不同厂家的机器人控制器通讯,实现控制目的。
Kungfu Arm的实现就基于ROS-I框架,加上最底层的机器人硬件,一共分为如图所示的六个层次。
这六个层次又可以分为两大部分:上边的四个层次基于ROS/ROS-I实现,对实时性的要求不高;下边的两层基于实时系统。
自上而下详细介绍这六个层次的具体内容:
顶层是直接与用户打交道的交互界面,基于rviz开发。rviz是ROS中基于Qt的三维可视化平台,可以通过插件的形式扩展需要的功能。
我们在rviz的基础上开发了机器人相关的一系列插件,包括三维模型显示、点动控制、状态监控、控制按键、外设状态、动态配置、程序监控、离线仿真等。
GUI以下是规划层,主要负责运动规划、图像处理、语音识别等上层算法和智能化的处理。
· 运动规划部分:主要使用ROS中的MoveIt,同时也对MoveIt进行了源码裁剪,脱离了roscore环境,以保持可用性、稳定性,满足我们的控制需求;
· 图像处理部分:主要基于OpenCV完成,为了实现更加智能的图像识别功能,我们还基于TensorFlow平台进行了一些机器学习方面的研究,比如识别图中的物体种类及摆放位姿;
· 语音识别部分:基于科大讯飞的SDK开发,同时完成了语义理解部分的功能。
规划层处理之后的数据想要发送到下层机器人控制器进行处理,需要通过接口层的封装。接口层将控制器内部的众多数据分为四个种类:控制接口、配置接口、日志接口、状态接口。每个接口中包含一系列数据内容。
接口层的数据通过Simple Message协议发送或接收。Simple Message是ROS-I中一种基于TCP/UDP的网络通讯协议,内容相对简单,包含前缀(数据长度)、头信息(消息类型、通讯类型、应答码)、数据内容三个部分,可以实现类似于话题、服务的通讯机制。
整个系统的核心部分——控制层,完全脱离ROS环境,基于Linux+Xenomai的实时系统,可以在实时进程中完成机器人的关节插补、运动学求解、坐标变换等功能;同时也包含部分非实时的功能,比如参数管理、状态监控、运动准备等。
这里虽然脱离了ROS环境,但是依然离不开ROS。ROS的核心通讯机制虽然没办法在实时系统中使用,但是ROS社区中的众多功能包还是有很大参考价值的。
我们对ros_controller、TF、trac_ik、fast_ik等包进行了深度的代码裁剪、修改,使之满足功能性、实时性、稳定性的要求,这也是我们在ROS产品化探索中发现的一条可行之路。
最下层是机器人的硬件部分,根据应用的成本、场景需求灵活搭配、更换,不需要固定使用某一种硬件。
▼
在整个系统的开发过程中,我们得到了ROS众多功能包的启发和帮助,也切实体会到了ROS1在产品开发中的诸多限制。
通过架构设计、自主研发、源码复用等方法,我们克服了众多难题。经过两年的开发迭代,目前已经形成了一款稳定的机器人控制系统,并投入工厂自动化的应用阶段。
这是我们在2017年底深圳高交会展示的项目,改造了电机生产流水线中的一个重要工序——平衡。我们结合Kungfu Arm设计了一套自动化上下料工作单元,替代了工人的重复劳动,并且取得了较好的效果。
以上就是我们基于ROS开发的Kungfu Arm控制系统,有兴趣的小伙伴可以与我交流更多内容。
注:文中ppt内容可以在“古月居”微信公众号后台发送“功夫手”获取下载地址。