基于ROS的车载机械臂控制系统及其建模方法
技术领域
本发明涉及机器人技术领域,具体为基于ROS的车载机械臂控制系统及其建模方法。
背景技术
随着机器人越来越智能化,机器人领域的研究也变得越来越深人。因此,机器人仿真技术对代码的模块化和复用性也提出了越来越高的要求。作为一个开源的分布式架构机器人操作系统为实现上述要求提供了可能。
ROS是一种分布式系统,其节点在设计编译时可以单独进行,在运行时可以互相通信,实现一种模块化的操作,可提高代码的可重用性。ROS不仅自身是开源的,而且集成了现有大部分的开源的软件平台,如Player OpenCV等。为了集合全世界机器人爱好者的力量,ROS操作系统还支持远程合作开发。经过多年的发展,ROS已经集成了几百个机器人软件应用包,如SLAM,OMPL等。因此,设计实用性强和简化运算的基于ROS的车载机械臂控制系统及其建模方法是很有必要的。
发明内容
本发明的目的在于提供基于ROS的车载机械臂控制系统及其建模方法,以解决上述背景技术中提出的问题。
为了解决上述技术问题,本发明提供如下技术方案:基于ROS的车载机械臂控制系统,包括ROS平台、运动组系统、六轴机械臂模型、Movelt插件和Movelt关节控制器;
所述ROS平台由一种分布式结构被设计而成,ROS中的每一个模块都是可以进行单独的设计和编译的,用于减少定位和导航带来的计算量;
所述运动组系统可以与其他独立的功能组件结合,提供ROS动作命令和服务;
所述六轴机械臂模型通过宏声明来提高模型的灵活性;
所述Movelt插件用于在左下角的窗口中设置Movelt控制机械臂,完成运动规划,功能包括拖动规划、随机目标规划、初始姿态更新和碰撞检测;
所述Movelt关节控制器包括了每个驱动关节的最大或者最小角度、最大速度,包含机械臂六轴本体的控制类型。
根据上述技术方案,所述运动组包括三种可调用的接口,C++、Python和GUI,ROS参数服务器必须提供三种类型的信息给movelt_group。
根据上述技术方案,上述三种类型的信息分别为,
a)URDF:用来获取机器人描述的参数,可以知道我们要设计的机械臂模型的参数信息;
b)SRDF:用来获取机器人描述语义上的参数,并与Movelt Setup Assistant工具相互结合,让我们知道机械臂的配置信息;
c)Config:机械臂的其他配置信息,如关节限制、运动学插件和运动规划插件等。
根据上述技术方案,所述运动组系统包括运动规划器、运动学求解器和碰撞检测和Movelt实现机械臂的建模;
所述运动规划器用来做运动规划算法,有各种运动规划算法,但都是Movelt插件,move_group默认使用OMPL;
所述运动学求解器Movelt的运动学插件提供了多种运动学求解器,但默认的是KDL,是从Crocos项目移植过来的,可以在Movelt工具中进行配置,也可以选择自己的运动学求解器;
所述碰撞检测Movelt使用CollisionWorld对象进行碰撞检测,使用FCL函数包实现。碰撞检测是运动规划中最耗时的操作之一。为了减少计算量,可以在Movelt!菜单中定义无冲突矩阵。
根据上述技术方案,所述Movelt实现机械臂的建模的方法为以下四个步骤,
d)创建机械臂的URDF模型;
e)使用Movelt Setup Assistant工具生成配置文件;
f)添加机械臂控制器和控制器插件;
g)使用Movelt控制机械臂运动。
根据上述技术方案,所述六轴机械臂的宏主要包括,
h)颜色宏,用来改变模型中所需的颜色,设置颜色的RGBA值;
i)机械臂尺寸,通过宏属性定义机械臂的三维尺寸,以方便修改;
j)惯性矩阵宏,每个link都有指定的惯性矩阵,可以把该模块提取出来,输入质量参数。
基于ROS的车载机械臂控制系统的建模方法,其特征在于:创建六轴机械臂模型中,分为如下步骤,
k)输入机械臂六个连杆和两指夹爪的link和joint的代码。就可以完成机械臂模型的设计,可以在rviz中显示出来;
l)将模型放置到rviz中可视化显示,来验证设计的正确性;
m)使用Setup Assistant配置机械臂,加载机械臂的URDF模型;
n)单击Movelt设置助手屏幕左侧Self-Collisions选项来配置自碰撞矩阵;
o)创建规划分组,机械臂的多个部件可以整合成一个组,运动规划器完成LINK或JOINT组的规划任务;
p)自动生成配置功能包中的所有文件,Setup Assistant可以将所有的配置文件生成一个ROS的功能包,点击Generate Package按钮就可以成功生成并保存配置文件;
q)将Movelt插件加入rviz,生成一个名为marm_moveit_config的功能包,里面包含了大部分Movelt启动所需要的配置文件和启动文件;
r)用鼠标拖动机器人手臂的前端,就可以改变手臂的姿势。然后,点击规划和移动功能列表中的规划和执行按钮,就可以开始规划路径,控制机械臂向目标位置移动;
s)用选择开始状态来设置手臂的初始位置。类似于选择黄金状态的设置,在下拉菜单中选择随机vaild会随机生成一个初始位置,用鼠标拖动机械臂的尖端,就可以选择这个位置。
根据上述技术方案,还包括,
t)以一种语义机器人描述格式来储存这些配置参数;
u)在Movelt在轨迹和模型之间,连接虚拟控制器。
与现有技术相比,本发明所达到的有益效果是:本发明,通过使用ROS平台对六轴机械臂进行建模和控制系统的设计,可以简化机械臂建模是的运算,在Setup Assistant配置机械臂是对机械臂的各种参数进行调整,并且加入了六轴机械臂每个关节所需要的link,最后在Movelt上做出机械臂的运动规划,开放型源代码为我们提供了十分大的便利,结合Gazebo物理仿真环境,可以看到机械臂的运动。对机械臂的控制系统来说也是十分的方便和快速。
附图说明
附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:
图1是本发明的整体结构示意图;
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,本发明提供技术方案:基于ROS的车载机械臂控制系统,包括ROS平台、运动组系统、六轴机械臂模型、Movelt插件和Movelt关节控制器;
ROS平台由一种分布式结构被设计而成,ROS中的每一个模块都是可以进行单独的设计和编译的,用于减少定位和导航带来的计算量;
运动组系统可以与其他独立的功能组件结合,提供ROS动作命令和服务;
六轴机械臂模型通过宏声明来提高模型的灵活性;
Movelt插件用于在左下角的窗口中设置Movelt控制机械臂,完成运动规划,功能包括拖动规划、随机目标规划、初始姿态更新和碰撞检测;
Movelt关节控制器包括了每个驱动关节的最大或者最小角度、最大速度,包含机械臂六轴本体的控制类型;
运动组包括三种可调用的接口,C++、Python和GUI,ROS参数服务器必须提供三种类型的信息给movelt_group;
上述三种类型的信息分别为,
a)URDF:用来获取机器人描述的参数,可以知道我们要设计的机械臂模型的参数信息;
b)SRDF:用来获取机器人描述语义上的参数,并与Movelt Setup Assistant工具相互结合,让我们知道机械臂的配置信息;
c)Config:机械臂的其他配置信息,如关节限制、运动学插件和运动规划插件等;
运动组系统包括运动规划器、运动学求解器和碰撞检测和Movelt实现机械臂的建模,由于手臂运动的初始位姿往往不是当前显示的位置,所以可以用选择开始状态来设置手臂的初始位置。类似于选择黄金状态的设置,在下拉菜单中选择随机vaild会随机生成一个初始位置,用鼠标拖动机械臂的尖端,就可以选择这个位置;
运动规划器用来做运动规划算法,有各种运动规划算法,但都是Movelt插件,move_group默认使用OMPL;
运动学求解器Movelt的运动学插件提供了多种运动学求解器,但默认的是KDL,是从Crocos项目移植过来的,可以在Movelt工具中进行配置,也可以选择自己的运动学求解器;
碰撞检测Movelt使用CollisionWorld对象进行碰撞检测,使用FCL函数包实现。碰撞检测是运动规划中最耗时的操作之一。为了减少计算量,可以在Movelt!菜单中定义无冲突矩阵;
Movelt实现机械臂的建模的方法为以下四个步骤,
d)创建机械臂的URDF模型;
e)使用Movelt Setup Assistant工具生成配置文件;
f)添加机械臂控制器和控制器插件;
g)使用Movelt控制机械臂运动;
六轴机械臂的宏主要包括,
h)颜色宏,用来改变模型中所需的颜色,设置颜色的RGBA值;
i)机械臂尺寸,通过宏属性定义机械臂的三维尺寸,以方便修改;
j)惯性矩阵宏,每个link都有指定的惯性矩阵,可以把该模块提取出来,输入质量参数;
创建六轴机械臂模型中,分为如下步骤,
k)输入机械臂六个连杆和两指夹爪的link和joint的代码。就可以完成机械臂模型的设计,可以在rviz中显示出来,第一ArbotiX节点加载在前一步骤中创建的剖面图,并激活控制机械臂的6轴本体的控制器;ArbotiX还提供了一个钳口控制器,该钳口控制器支持控制由一个或多个伺服器组成的终端钳口。MArm只有一个活动关节,是线性的,但可以用ArbotiX的gripper_controller来控制,并且在输入数据上需要将直线运动的长度近似转换成角度旋转。第二个ArbotiX节点启动控制了MArm终端夹爪的gripper_controller;
l)将模型放置到rviz中可视化显示,来验证设计的正确性,点击Execute按钮会使机器人执行运动指令,但由于当前位置与设定的初始位置不同,机器人不会开始运动,终端上会显示错误信息,即使点击计划并执行按钮,Movelt仍然会从当前的实际出发点开始计划和移动;
m)使用Setup Assistant配置机械臂,加载机械臂的URDF模型,URDF文件中没有储存这些参数的地方,所以就需要一种语义机器人描述格式来储存这些配置参数,SetupAssistant配置的机械臂参数、夹具参数、规划组、自定义位姿等要以文件的形式进行储存,URDF文件中没有储存这些参数的地方,所以就需要一种语义机器人描述格式来储存这些配置参数;
n)单击Movelt设置助手屏幕左侧Self-Collisions选项来配置自碰撞矩阵,为了启动moveit_simple_controller_manager插件,需要加载controllers.yaml文件,在启动Move_group.report时,也会启动MArm生成的配置文件夹,但这个文件默认没有具体的内容;
o)创建规划分组,机械臂的多个部件可以整合成一个组,运动规划器完成LINK或JOINT组的规划任务;
p)自动生成配置功能包中的所有文件,Setup Assistant可以将所有的配置文件生成一个ROS的功能包,点击Generate Package按钮就可以成功生成并保存配置文件,Action需要客服端向服务端发起请求,它们两个之间要建立起连接后才可以发送具体的数据,因此,客户端必须使用SimpleActionClient来声明和创建一个消息名称,并为该动作创建一个消息名称。然后就可以等待与服务端创建连接。连接好后,就可以将action的运动目标发送到客服端进行处理;
q)将Movelt插件加入rviz,生成一个名为marm_moveit_config的功能包,里面包含了大部分Movelt启动所需要的配置文件和启动文件,Arm_goal采用预设位置,当参数复位输入为真时,机器人手臂的目标位置为6轴的,所以就可以把机械臂的初始位置为0,如果输入为假,则6轴目标位置的半径为[-0.3,-0.1,-0.1,-0.1,0.1,0.8,1.0,-0.7]。将目标点发送出去后,就可以等待服务端的控制结果,我们将这里的超时等待时间为5s;
r)用鼠标拖动机器人手臂的前端,就可以改变手臂的姿势。然后,点击规划和移动功能列表中的规划和执行按钮,就可以开始规划路径,控制机械臂向目标位置移动;
s)用选择开始状态来设置手臂的初始位置。类似于选择黄金状态的设置,在下拉菜单中选择随机vaild会随机生成一个初始位置,用鼠标拖动机械臂的尖端,就可以选择这个位置;
还包括,
t)以一种语义机器人描述格式来储存这些配置参数;
u)在Movelt!在轨迹和模型之间,连接虚拟控制器。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。
最后应说明的是:以上所述仅为本发明的优选实施例而已,并不用于限制本发明,尽管参照前述实施例对本发明进行了详细的说明,对于本领域的技术人员来说,其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。