当前位置:首页 期刊杂志

YouBot机器人动态控制与示教编程研究

时间:2024-08-31

渠慎林,温秀兰,唐国寅,伍 凡,倪浩君,赫忠乐

(南京工程学院自动化学院, 江苏 南京 211167)

近年来,工业机器人的发展逐渐得到重视,为实现核心技术自主创新、加快国产替代进程,国家出台了各种相应鼓励措施,地方也争相设立发展目标.我国启动的“中国制造2025”计划,以智能制造为主攻方向,大力推动高档数控机床和机器人等重点领域的突破发展[1-2].我国工业机器人行业正处于初步产业化阶段,从发展期逐渐迈向成熟期.机器人作为智能制造中高端装备的典型代表之一,是衡量一个国家高端制造业水平和科技创新水平的重要标志[3].

目前,有关教学机器人的研究成果多以非实验研究为主,缺少在教学实践中有效性的检验[4].随着人工智能、多传感器融合等技术的不断发展,加强跨学科取向的机器人教育课程开发和教学研究是当下教学机器人的热点研究领域[5],很多高校也逐步开设了一系列机器人实践操作教学课程.文献[6]以视觉教学机器人为探讨对象,开展智能机器人实验课程,深入剖析其在实验教学中的启发作用,以教学应用为切入点,帮助学生扩展基础理论知识,积累软件编程实战经验;文献[7]研究设计了集机、电、控、图像处理于一体、兼具拖动示教与开放性实验特点的双臂协作教学机器人,通过设计的上位机完成示教编程和视觉引导下的双臂协作抓取;文献[8]设计了一种基于上位机控制的拖动示教机器人系统,采用混合滤波算法降低了噪声、误差积累等对机器人位姿数据采集的影响,该系统与传统手动示教机器人相比,具有示教过程简单、效率高、开发成本低等特点;文献[9]开发了一种具有7个回转自由度的冗余关节式教学机器人,可以带动末端执行器按照预设的轨迹、位置和姿态要求完成相应的动作,并考虑到面向不同层次、不同对象的实践教学内容及教学模式,规划了一系列的实践教学项目.

为解决实验室KUKA YouBot机器人控制复杂、对于初接触的学生操作难等问题,本文设计一种机械臂动态控制软件,通过拖动滑条控制机器人各关节和末端夹持器达到目标位置,通过ROS_bag功能包记录运动轨迹,完成快速再现示教,让学生深入了解工业机器人底层控制算法的实现过程.

1 YouBot机器人实验平台及控制系统

YouBot机器人实验平台组成如图1所示,由机器人本体和上位机组成.机器人本体包括全方位移动底盘、五轴机械臂、末端夹持器和放置平台;上位机为一台装有Ubuntu系统ROS开发环境的PC机.

图1 YouBot机器人控制实验平台

本文研究的YouBot控制系统为扩展oodl API[10],它由一组解耦的功能子系统组成,可以视为机器人的一个高级驱动程序.在机器人中,机械臂运动关系可简化为五自由度运动链,其API系统区分了由关节提供的不同类型的数据,其中每个物理量如电流、电机线圈电阻等都由它自己的类型表示,包括已设定内容和未感知数据.设置或获取机械臂位姿和夹持器数据时,必须依赖相对应的数据类型配置关节参数组,控制系统支持的参数数量和特性由驱动控制器上运行的指令定义.

2 动态参数相关配置文件分析与设计

2.1 定义配置参数文件

大多数软件的配置文件是.cfg格式文件,也是编译器在内部维护时所产生的相关文件.本设计在创建的工作空间下新建名为youbot_dynamic_reconfig动态参数功能包,在创建功能包时添加rospy、roscpp、dynamic_reconfigure等依赖项来编译建立的python和C++文件;在功能包下新建cfg文件夹,创建DynamicParam.cfg配置文件,该配置文件需要导入dynamic_reconfigure功能包提供参数生成器,4种不同类型的参数int_t、double_t、str_t、bool_t由参数生成器定义,基于参数生成器的add name、type、level、description等生成相关功能参数.

YouBot机器人搭载的五轴机械臂各关节扭转角度即电机角度,单位为rad,表1为设置的机械臂关节角初始值和关节角范围;机器人末端夹持器为二指夹爪,且每指存在单独的开合参数,设置末端夹持器初始参数为0.008 m,开合范围为(0,0.115 m),夹爪最大开合值为0.023 m,最大夹持重量为500 g.为防止机械臂和末端夹持器启动时处于抱死状态,在动态控制初始状态下给予关节角和夹持器一定参数值.创建的youBot_arm_gripper.cfg部分代码为:

--导入参数生成器

import roslib

roslib.load_manifest(PACKAGE)from dynamic_reconfigure.parameter_generator_catkin import * PACKAGE = "youbot_ros_simple_trajectory"

gen = ParameterGenerator()

--定义机械臂关节角和二指夹爪初始值和参数范围

gen.add("arm1", double_t, 0, "An double radian parameter", 0.11, 0.010069, 5.84014)

gen.add("arm2", double_t, 0, "An double radian parameter", 0.11, 0.010069, 2.61799)

gen.add("gripper_r_param", double_t, 0, "An double parameter unit meter", 0.008, 0, 0.0115)

exit(gen.generate(PACKAGE, "youbot_ros_simple_trajectory", "youbot_arm_gripper"))

配置文件创建完成后,通过chmod a+x cfg/DynamicParam.cfg执行命令,为配置文件添加可执行权限.

表1 机械臂关节角初始值和范围 rad

2.2 创建Server服务端函数

基于C++语言,创建Server主函数节点.为创建的节点提供加法运算的功能,返回求和之后的结果,需要在程序中包含服务数据类型的头文件,头文件根据创建的服务数据类型的描述文件生成.在主函数部分初始化节点、创建节点句柄、指定服务器的名称以及接收到服务数据后的回调函数,指令端发出服务请求后,Server节点进入回调函数进行处理,回调函数所传入的参数结构是服务数据的类型描述文件中定义与反馈的数据结构.部分代码为:

--Server主函数

dynamic_reconfigure::Server server;

dynamic_reconfigure::Server::CallbackType f;

f = boost::bind(&callback, _1, _2);

server.setCallback(f);

ROS_INFO("Spinning node");

--数据回调函数

void callback(youbot_ros_simple_trajectory::youbot_arm_gripperConfig &config, uint32_t level)

ROS_INFO("Reconfigure request : %f %f %lf %f %f %f %f ",

config.arm1,

config.arm2,

config.arm3,

config.arm4,

但无一例外的是,每天的工作和学习都像一场真正意义上的修行,它让我更冷静地观察,更深沉地思考,用更沉潜的心来体会。

config.arm5,

config.gripper_l_param,

config.gripper_r_param);

2.3 创建Client客户端函数

创建Server主函数后要创建相应的Client函数,完成服务端与客户端的数据发送与接收,Client节点运行后YouBot机器人会作为客户端进行数据接收.部分代码为:

import roslib;roslib.load_manifest(PACKAGE)

import rospy

import dynamic_reconfigure.client

rospy.loginfo("Config set to {arm1}, {arm2}, {arm3}, {arm4}, {arm5}, {gripper_l_param}, {gripper_r_param}".format(**config))

2.4 创建动态控制界面

本设计的控制方法是将机械臂的各关节角范围和末端执行器参数放在数组中,当基于rqt_dynamic reconfigure生成动态控制界面完成动态的实时控制后,将机械臂的各关节旋转参数和二指夹爪开合范围写入同一个程序,由人机交互界面读取到参数变量、赋值给数组.在程序中确定可以通过launch文件或者命令行调整的变量.部分代码为:

arm_command.positions[i].joint_uri = jointName.str();

arm_command.positions[i].value = INIT_POS[i];

arm_command.positions[i].unit = boost::units::to_string(boost::units::si::radians);

armPositionsPublisher.publish(arm_command);

cout << arm_command << endl;

for( int k = 0; k < NUM_GRIPPER_JOINTS; ++k)

std::stringstream gripperJointName;

2.5 配置CMakeList.txt文件

CMakeList.txt文件是ROS_CMake编译系统编译功能包的输入文件,编译指令通过链接生成可执行文件,其编译环境可以为设计增加多种编译选项,从而根据需求选择最合适的方案.在本设计的动态控制配置文件中添加actionlib、control_msgs、std_msgs等编译依赖环境,规定从指定源文件中生成可执行性文件和动态库.

3 动态控制与示教编程实验

3.1 动态控制实验验证

为了验证本设计的可行性,创建客户端与服务端后在上位机上启动YouBot机器人,ctrl+alt+t开启终端后指令运行服务端发送server、client和control命令,机器人通信及动态控制节点如图2所示,通过ros下rqt_graph插件可以看到机器人各个驱动节点已经完成通信,server和clien话题已经发送给输出端,初始参数下的机器人动态控制软件界面如图3所示.

图2 机器人通信及动态控制节点图

图3 初始参数下动态控制软件界面

通过调节滑条上滑块的位置或在右端数值框中输入目标值来改变机器人各个关节角和末端夹持器的开合范围,可实现动态调整机械臂位置和姿态完成高精度抓取任务.实验设置机械臂及夹持器位姿参数下动态控制软件界面如图4所示.启动动态控制软件后在右端数值框中输入图4中位姿参数值,机器人运动到对应参数值下的位置和姿态.

(a) (0.80,0.80,-3.52,0.50,2.00,0.001,0.001)

(b) (0.80,1.20,-4.00,1.70,1.32,0.010,0.010)

(c) (3.50,2.20,-3.50,0.32,1.47,0.011,0.005)

机械臂各轴和夹持器到达目标位姿时,在仿真环境下设置相对应的位姿(见图5),对比发现,实际与仿真环境下机器人位姿一致,验证了通过动态控制软件设置的机器人位置和姿态的准确性.

(a) 实际位姿(a)

(b) 实际位姿(b)

(c) 实际位姿(c)

(d) 仿真位姿(a)

(e) 仿真位姿(b)

(f) 仿真位姿(c)

3.2 示教编程实验验证

基于设计的机器人动态控制软件,在上位机完成手动示教分析.在机器人的工作范围内放置两件目标物体,通过不断调整机器人抓取姿态完成盒状物体和棒状物体的抓取、放置,如图6、图7所示.记录起始位姿、待抓取位姿、抓取位姿、待放置位姿以及放置位姿下的关节旋转角和夹持器开合参数,在开启ROS_bag后,输入上述位姿参数值,ROS_bag记录动态控制指令发布出的实时数据后,快速完成物体抓取放置示教过程,将目标再次放回起始位置,通过数据再现,实现基于离线数据的目标抓取、放置过程.通过对比发现还原动作几乎完全接近示教动作,验证了此方法下的YouBot机器人示教编程的可行性,可进行重复、低成本的分析和调试.

(a) 示数

(b) 还原

(a) 示数

(b) 还原

4 结语

针对KUKA YouBot机器人操作复杂、可控性不高、示教过程难等问题,本文设计了一种基于ROS的动态控制软件,提出了基于该软件下的示教编程方法,实现了该机器人无需编译控制算法即可完成对机械臂的动态控制.通过在线动态调整机械臂位置和姿态完成目标物体的抓取和示教编程,不仅能够激发学生的学习兴趣和动手能力,还对实验教学具有一定的现实意义.

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!