APP下载

基于ROS的机械臂视觉控制仿真

2022-04-29杜比强乔傲

电脑知识与技术 2022年4期
关键词:机械臂

杜比强 乔傲

摘要:现代工业中机械臂的使用越来越广泛,但传统的机械臂缺乏同工作环境的交互能力,灵活性较差。为此考虑利用视觉来引导机械臂作业,为机械臂配置视觉传感器,实时获取工况信息,以提高机械臂在线实时作业的能力。ROS(Robot Operating System)在机器人开发领域的应用愈加广泛,借助ROS构建相应的视觉引导机械臂作业的仿真模型。在Gazebo完成机械臂和Kinect相机的建模仿真,利用ROS节点通讯机制实现视觉识别结果对机械臂路径规划的指导。仿真运行结果验证了该模型的可行性。

关键词:ROS;机械臂;物体识别;MoveIt!;Gazebo

中图分类号:TP273     文献标识码:A

文章编号:1009-3044(2022)04-0120-03

1 引言

ROS(Robot Operating System)作为一个开源的分布式系统,各个节点间相互独立运行,数据可以在各个节点间传输。模块化的操作大大提高了代码的复用率[1-2]。ROS的社区拥有大量的功能包,如camera_calibration(相机标定),navigation(导航功能包,包括大多数经典的SALM算法)。此外ROS还集成了许多现有的开源软件平台,如OpenCV、Player、MoveIt!等。仿真平台Gazebo、Rviz和ROS也能完美兼容,为机器人研究提供巨大的便利。

机器视觉利用从传感器中收集到的信息,并从其中提取相关信息加以处理,模拟人眼来进行判断和观测[3]。在工业生产中,机器视觉往往用于代替人工在一些危险工况、高精度检测或自动化生产这些场合[4]。在ROS平台的基础上 ,利用Gazebo模拟仿真出机械臂及Kinect相机,观察视觉和机械臂间的配合作业。

2 ROS仿真工具平台

2.1物理仿真环境Gazebo

机器人仿真系统是每个机器人领域的工程师必不可少的工具。Gazebo提供高保真度的物理模拟和一整套完整的传感器模型,能够在复杂的室内和室外环境中准确有效地模拟真实的环境,如重力、摩擦、惯性和碰撞体积等。并且Gazebo是与ROS无缝兼容的!Gazebo的应用大大降低了机器人研究的时间与成本[5]。

2.2 数据可视化工具Rviz

机器人系统中存在大量数据,包括机器人自身的参数状态还有从传感器获取到的外部信息。这些数据在计算和传递的过程中往往都处于数据形态,例如图像数据中0~255的RGB值,机器人坐标姿态。但是这种数据形态的值往往不利于开发者去感受数据所描述的内容,所以常常需要将数据可视化显示,例如机器人模型的可视化、图像数据的可视化、地图数据的可视化等。Rviz是一款三维可视化工具,很好地兼容了各种基于ROS软件框架的机器人平台。在Rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。同时,Rviz还可以通过图形化的方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。

3 物体识别

3.1 find_object

视觉抓取过程中非常關键的一个环节就是对被抓取物体的识别,无论是二维图像还是三维点云,在ROS中都可以找到对应的功能包。find_object是一种基于模板匹配算法(包括彩色图像或点云匹配)的物体识别和检测的功能包。find_object安装命令:

$ sudo apt-get install ros-kinect-find-object-2d (对应ROS的kinetic版本)

该功能包有两个重要节点:find_object_2d和find_object_3d。其中find_object_2d负责二维图像的特征提取和识别,普通的单目相机就可以使用。而find_object_3d则是专为kinect或者zed双目之类的深度相机准备的,可以通过在匹配目标后识别目标中心的深度信息输出目标的三维坐标。

3.2 配置启动文件

为了确定物体所处的位置,需要给机械臂配置它的“眼睛”。在Gazebo中仿真kinect相机,除了添加它的外观模型文件外,还需要配置Kinect的相机描述插件“libgazebo_ros_

openni_kinect.so”。这样才能给这个模型文件添加“灵魂”,赋予模型作为相机的功能。“libgazebo_ros_openni_kinect.so”会将获取到的图像信息以topic(ROS的一种通讯机制)的形式发布出去。关键代码如下:

<imageTopicName>rgb/image_raw</imageTopicName>

<depthImageTopicName>depth/image_raw</depthImageTopicName>

......

<cameraInfoTopicName>rgb/camera_info</cameraInfoTopicName>

其中rgb/image_raw为对齐后的彩色图像信息,depth/image_raw是图像的深度信息,rgb/camera_info是相机标定信息。

在ROS的节点间可以通“发布/订阅”的方式进行数据的传递,为了可以订阅Kinect发布的图像信息,需要对find_object_2d功能包中的一些参数修改。按照路径/find_object

_2d/launch/find_object_3d.launch 找到启动文件,修改其中的参数和Kinect相机发布的话题对应。

<arg name="rgb_topic"         default="camera/rgb/image_raw"/>

<arg name="rgb_topic"         default="camera/rgb/image_raw"/>

<arg name="camera_info_topic" default="camera/rgb/camera_info"/>

3.3 物体识别

启动文件后得到一个仿真物体识别的操作页面,通过菜单View-Parame-eters调出参数栏选项卡进行调整。find_object_2d提供了多种物体识别算法,如:SURF、SIFT、ORB、FAST等。观察目标物体上的特征点数量及效果,以及处理的流畅程度,衡量选择合适的算法匹配。该功能包是基于模板匹配算法实现物体识别的,首先需要在图像中手动圈出待识别物体,提取物体的特征点。

可以看到目标物体按照需要被识别出并用边线圈出,识别结果会以/objects 话题的形式发布出去。发布的消息包含物体的宽、高信息和单应性矩阵信息,这些信息用来计算物体的位置、方向和剪切值。调用以下命令,查看物体四个顶点的坐标和物体id:

$ rosrun find_object_2d print_objects_detected image:=/camera/color/image_raw

打开Rviz添加坐标变换树,可以直观地观察物体和相机的坐标变换关系。

4 机械臂仿真抓取

4.1 转换坐标系

在Rviz中可以通过订阅/tf_example消息来获得目标物体在相机坐标系中的位姿信息,并通过机械臂坐标系到相机坐标系的映射关系,最终获得目标物体在机械臂坐标系的位姿。

ROS教程提供了一种tf转换方法,可以直接查询机械臂基座标到物体的tf关系,实现不同物体坐标系之间的转换。机械臂确定了物体坐标系和基座坐标系之间的坐标映射关系,就可以通过路径规划完成机械臂末端的移动实现抓取作业。

创建一个监听坐标系发布法的节点,代码关键段:

tf::StampedTransform transform;// 创建一个tf::TransformBroadcaster类的实例,用来广播坐标的变换关系

try{

listener.lookupTransform("/camrea_link", "/object_1",  //第一个参数为相机坐标系,第二个参数为物体的坐标系

ros::Time(0), transform);

}

catch (tf::TransformException ex){

ROS_ERROR("%s",ex.what());

ros::Duration(1.0).sleep();

}

4.2 MoveIt!

MoveIt!是一个易于使用的集成化开发平台,包含了大量机械臂运动操作的功能包,如:机械臂运动学、路径规划、碰撞检测等[6],是ROS社区中排名前三的功能包[7]。MoveIt!留有丰富C++和pythom接口,因此除了借助ROS原生的接口函数外,我们还可以自己编写一个节点,完成机械臂对物体的抓取[8]。

move_group节点作为 MoveIt!的核心,集成了运动分析、规划和执行、取放操作等功能。在move_group中给出机械臂需要移动的目标状态,MoveIt!便会按照特定路径规划算法(如RRT,PRM等)移动机械臂。

在Gazebo中仅仅是仿真出机械臂模型,物体和周围环境,机械臂末端的移动过程不能直观地表现出来。在Rviz中添加机器人模型末端的轨迹线,就可以清楚地看到机械臂就绪-抓取-移动-回归就绪状态的工作过程。

5 结语

本文基于ROS平台,并利用ROS强大的开源社区找到相应的物体识别功能包,实现了对二维、三维情况下的物体识别,将识别结果实时发送给机械臂,引导机械臂灵活作业。

通过借助于Gazebo、Rviz仿真平台,模拟出kinec相机对特定物体的识别效果,并通过Rviz将坐标变化结果可视化,方便观察。凭借ROS节点间的通讯机制,将得到的坐标信息发布出去,然后MoveIt!订閱消息,获得物体位置并转化为相对于机械臂基座的坐标,实现对目标物体的抓取。此次仿真结果实现了视觉对机械臂的引导,验证了视觉实时引导机械臂作业的可行性。

参考文献:

[1] 翟文正.将ROS引入嵌入式技术与应用专业的实践教学浅析[J].工业和信息化教育,2020(7):79-84.

[2] 李凤.基于ROS的机械臂控制系统设计[J].自动化技术与应用,2018,37(11):72-76.

[3] 朱正德,杨虹,方琳,等.机器视觉:质量监控的第三只眼[J].现代零部件,2010(10):56-63.

[4] 章炜.机器视觉技术发展及其工业应用[J].红外,2006,27(2):11-17.

[5] 滕步炜.基于ROS和Gazebo的Hector四旋翼仿真[J].电脑知识与技术,2020,16(8):259-260.

[6] 刘月祺,辛大欣,刘文强.基于MoveIt的六自由度机器臂轨迹规划[C]//2018中国自动化大会(CAC2018)论文集.西安,2018:670-675.

[7] 曹正万,平雪良,陈盛龙,等.基于ROS的机器人模型构建方法研究[J].组合机床与自动化加工技术,2015(8):51-54.

[8] 左轩尘,韩亮亮,庄杰,等.基于ROS的空间机器人人机交互系统设计[J].计算机工程与设计,2015,36(12):3370-3374.

收稿日期:2021-09-21

作者简介:杜比强(1974—),男,江西吉安人,副教授,博士,主要研究方向为工业机器人及应用;乔傲(1997—),男,河北衡水武邑县人,学生,主要研究方向为ros机器人操作系统仿真。

猜你喜欢

机械臂
一种六自由度机械臂的控制系统设计
码头集装箱机械臂的研究与设计
书画手臂的模型设计
六自由度机械臂控制系统设计
基于无人机平台的垃圾搜索及拾取系统设计
人机交互课程创新实验
基于S7?300 PLC不规则空间曲线自动焊接系统设计
智能下水道清理装置