ROS在RViz与Gazebo仿真环境下的控制器(ArbotiX、ros_control)配置

本文主要是看了古月老师《ROS机器人开发实践》做得一些学习笔记,其中的代码模板部分也均源于其中。

ArbotiX与ros_control简介

从个人这几天的经历看来(鄙见,可能不具有准确性,仅给大家作参考),ArbotiXros_control在ROS中充当的均是控制器的角色,其完成的工作都是发送路径规划信息给电机,电机完成轨迹规划并发布关节状态给RViz或Gazebo用以显示动画。

ArbotiX

《ROS by Example》中把Arbotix称作一种仿真环境,古月老师的《ROS机器人开发实践》中介绍的更为清晰一些:

ArbotiX是一款控制电机、舵机的控制板,并提供相应的ROS包,但是这个功能包的功能不仅可以驱动真实的ArbotiX控制板,它还提供一个差速控制器,通过接收速度控制指令更新机器人的joint状态,从而帮助我们实现机器人在RViz中的运动。

同时,ArbotiX还提供了Joint Trajectory Action Controllers插件,该插件可以完成机械臂的相关电机控制。所以,ArbotiX控制器既能实现移动机器人的差速控制,亦能完成机械臂的关节控制。(本文主要记录控制机械臂的过程,差速轮相对比较容易理解)
ArbotiX主要使用方法如下:

  • 创建yaml关节配置文件
  • 创建ArbotiX相关节点加载配置文件

ros_control

官方wiki简介如下:

The ros_control packages are a rewrite of the pr2_mechanism packages to make controllers generic to all robots beyond just the PR2.

也就是说ros_control这个包的前身是PR2的一个包,后来将其改为更通用的框架。框架图示如下:
官方wiki框架图

具体的每部分细节可以参见官方wiki或者古月老师博客,我只简单的说下自己的一些思路。ros_control的主要使用方法与ArbotiX套路基本一致,只需记住两点:

  • 创建yaml配置文件
  • 创建controller_manager控制器节点加载配置文件

控制器的具体配置细节

本文主要代码模板来源于古月老师的《ROS机器人开发实践》一书。

Moveit+RViz+ArbotiX

创建配置文件

ArbotiX提供了Joint Trajectory Action Controllers插件,可以用来驱动机械臂的关节运动,故需要进行机械臂的关节参数配置,便有了如下的配置文件,一般放在模型包的config文件夹下,设取名为arm.yaml

joints: {
   
    base_to_armA: {
   id: 1, ticks: 4096, neutral: 2048, max_angle: 180, min_angle: -180, max_speed: 90},
    armA_to_armB: {
   id: 2, max_angle: 28, min_angle: -87, max_speed: 90},
    armB_to_armC: {
   id: 3, ticks: 4096, neutral: 2048, max_angle: 178, min_angle: -58, max_speed: 90},
    armC_to_armD: {
   id: 4, ticks: 4096, neutral: 2048, max_angle: 180, min_angle: -180, max_speed: 90},
}

controllers: {
   
    arm_controller: {
   type: follow_controller, joints: [base_to_armA, armA_to_armB, armB_to_armC, armC_to_armD], action_name: arm_controller/follow_joint_trajectory, onboard: False }
}

文件主要分为两部分,第一部分用joints字典来指定关节名称和电机参数,每个电机参数同样以字典格式指定。joints的名字必须与URDF中设定的名字一致。关于具体电机参数可以参见《ROS by example vol2》的5.3节,在这里简单做个说明:

  • id 电机的硬件编号
  • ticks 默认值为1024。(个人理解就是类似于编码器的位数)书中提到两种电机,一种最大转动范围为300°,对应ticks为1024,另一种则全周范围转动即360°,对应ticks为4096。
  • neutral 默认值为512(1024的一半)。arbotix电机映射到0弧度位置的ticks值,也即在中间位置设为0弧度位(我是这么理解的,可能有误,仅供参考),所以对应上述两种不同电机一般设为512或者2048。书中也有提到neutral设置为其他非中间值的情况。
  • max_speed 最大电机允许速度。
  • min_angle max_angle 最大最小电机允许角度。

第二部分是控制器的参数设置。

  • arm_controller 控制器名字,同样以字典结构存储参数。
  • type arbotix节点包含两种类型的控制器,一种是控制差速轮的diff_controller,另一种就是控制关节轨迹(机械臂)的follow_controller
  • joints 以列表形式存储关节名,注意与前面关节名对应。
  • action_name 指定arbotix节点接收的消息名称。即要想控制电机运转,必须发送action_name指定的topic名称。
  • onboard: 个人理解就是只有在使用真正的ArbotiX控制板的时候该选项为True。
    注:古月老师文件中还配置了末端控制器,用以控制末端张合,由于本文暂未研究末端控制,故未设置末端控制器相关内容。
    看文件可能仍旧一脸懵逼,具体的参数作用表现如下图:
    topic列表

joints 字典配置的关节名称将来会对应到topic中的/JOINT_NAME/command这个话题,只需给其发送对应的指令
rostopic pub /armC_to_armD/command std_msgs/Float64 1.0
即可控制对应关节的运动指定弧度。但是这样做是枯燥而乏味的,我们的目的在于结合Moveit的输出开控制整个关节的运动轨迹。所以我们会用到 /arm_controller为前缀的action接口。那么问题来了,如何将Moveit与ArbotiX提供的action对接呢?我们需要一个桥梁,能够将规划轨迹以action的形式发布到ArbotiX的action接口上,问题就解决了。而这个桥梁,便是moveit_simple_controller_manager。下面说这个桥梁怎么使用:
setup_assistant自动生成的moveit_config包中launch文件夹下有这么一个文件ROBOT_NAME_moveit_controller_manager.launch.xml,该文件默认生成的时候是空的,在这里面可以加载我们的桥梁moveit_simple_controller_manager相关的参数。具体内容如下:

  • 4
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值