• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

ROS系统MoveIt玩转双臂机器人系列(四)–用户接口的使用

人工智能 Shawn0102 1287次浏览 0个评论

注:本篇博文全部源码下载地址为:Git Repo。 1. 下载到本地后解压到当前文件夹然后运行:catkin_make 编译。 2. 源码是在 Ubuntu14.04 + Indigo 环境下编写。

 

一、概述

经过前面一系列博文的介绍,已经可以利用RViz上的相关按钮控制和仿真实际的机器人Rob了,本篇解决如何通过MoveIt提供的用户接口个性化的和机器人进行交互(如发送命令让机器人到达某个位姿)的问题。如图1所示,主要介绍图中紫色椭圆圈出部分的用法,图中可以看出MoveIt为用户提供了多个接口类,本篇仅以 MoveGroupInterface 类为例进行介绍,这个类的官方接口说明请点击这里。  
ROS系统MoveIt玩转双臂机器人系列(四)--用户接口的使用

图1

二、功能说明及实现

本篇博文的源码程序包下载地址在开篇处,新增的包的名字为:rob_moveit_interface,程序基本流程图如图2所示,首先定义了双臂的接口名称,然后利用随机生成的位姿模拟我们的目标位姿,进行双臂的运动学求解和运动规划,最后经过MoveIt和我们定义的control包发送给实际的机器人进行执行。
ROS系统MoveIt玩转双臂机器人系列(四)--用户接口的使用

图2

  具体而言,需要包含的头文件为:

#include <moveit/move_group_interface/move_group.h>
#include <moveit/planning_scene_interface/planning_scene_interface.h>

  定义了双臂的接口名称代码段为:

// Get the arm planning group
moveit::planning_interface::MoveGroup l_plan_group("left_arm");
moveit::planning_interface::MoveGroup r_plan_group("right_arm");

  双臂关节运动速度系数设置如下所示,系数的调节范围为0~1, 这里我们利用随机数函数随机生成一个系数。

//set Velocity Factor (0,1]
double Velocity_Factor = (double)((rand()%(100-(1)+1)) + (1))/100;
l_plan_group.setMaxVelocityScalingFactor(Velocity_Factor);
r_plan_group.setMaxVelocityScalingFactor(Velocity_Factor);

  最后运动规划和执行的代码段为:

//excute
for(int i=0;i<5;i++)
{
    L_Joint_goal.push_back(left_movement[i]*degTorad);
    R_Joint_goal.push_back(right_movement[i]*degTorad);
}
l_plan_group.setJointValueTarget (L_Joint_goal);
r_plan_group.setJointValueTarget (R_Joint_goal);
l_plan_group.move();
r_plan_group.move();
 
L_Joint_goal.clear();
R_Joint_goal.clear();

  然后我们编写一个launch文件用于启动这一节点,这个也很简单,如下所示,命名为 rob_moveit_interface.launch。

<launch>
    <node pkg="rob_moveit_interface" name="rob_moveit_interface" type="rob_moveit_interface" output="screen"> <!--launch-prefix="xterm−e"-->
    </node>
</launch>

  至此基本完成了接口程序包的编写,然后利用catkin_make进行编译。  

三、测试

下面我们只需测试接口程序是否能满足我们的预定功能即可,首先起一个shell (Shell 1),设置环境变量后将MoveIt相关包起来,具体命令如下,这里起的是我们在博文系列三中的所有程序包。

roslaunch rob_moveit_config demo.launch

  然后重新起一个shell(Sheel 2),启动我们本篇博文编写的节点,命令如下:

roslaunch rob_moveit_interface rob_moveit_interface.launch

  此时,我们看Sheel 2 的log发现程序已经产生了模拟的目标位姿并发送给MoveIt进行运动规划,主要 log 如下:

[ INFO] [1527688202.991717070]: Left Planning Reference frame: /base_link
[ INFO] [1527688202.991861418]: Left EndEffector Reference frame: l_grasping_frame
[ INFO] [1527688202.991926842]: Right Planning Reference frame: /base_link
[ INFO] [1527688202.992057268]: Right EndEffector Reference frame: r_grasping_frame
left_movement:[117.000000][42.000000][24.000000][47.000000][-11.000000]
right_movement:[38.000000][36.000000][-26.000000][58.000000][-72.000000]
Velocity_Factor = [0.360000]
[rob_moveit_interface-1] process has finished cleanly

  同时 Shell 1 中出现了双臂的运动规划结果消息并发送给机器人,主要log如下,我们发现最后执行的位姿和我们生成的目标一致。  

[ INFO] [1527688203.521864124]: I sent [38.00][36.00][-26.00][58.00][-72.00][0.63]
[ INFO] [1527688203.521992769]: Right arm MSG [38.004787][35.999733][-25.999399][58.003475][-72.001976][0.631444]
 
[ INFO] [1527688203.274094561]: I sent [117.00][42.00][23.99][47.00][-11.01][0.41]
[ INFO] [1527688203.274198912]: Left arm MSG [116.997490][42.003925][23.994616][47.003212][-11.005501][0.413423]

  最后,我们看到机器人在Rviz环境中执行了相关的动作,如图3所示。  
ROS系统MoveIt玩转双臂机器人系列(四)--用户接口的使用

图3

  至此,我们完成了接口节点的编写和测试,经过博文一到四,我们基本走通了:用户接口输入–>MoveIt运动规划–>运动消息通过Controller发送的基本功能,这里只是很浅显的讲了MoveIt的使用和配置过程,下一篇博文来介绍机械臂运动学相关的知识,并编写一个简单的运动学求解算法嵌入接口程序。 <– 本篇完 –>  


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明ROS系统MoveIt玩转双臂机器人系列(四)–用户接口的使用
喜欢 (0)

您必须 登录 才能发表评论!

加载中……