zoukankan      html  css  js  c++  java
  • ROS系统MoveIt玩转双臂机器人系列(四)--用户接口的使用

    注:本篇博文全部源码下载地址为:Git Repo

    1. 下载到本地后解压到当前文件夹然后运行:catkin_make 编译。

    2. 源码是在 Ubuntu14.04 + Indigo 环境下编写。

     

    一、概述

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

    图1

    二、功能说明及实现

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

    图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所示。

    图3

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

      <-- 本篇完 -->

    欢迎留言、私信、邮箱、微信等任何形式的技术交流。

    作者信息:

    名称:Shawn

    邮箱:zhanggx0102@163.com

    微信二维码:↓

              

  • 相关阅读:
    js中当call或者apply传入的第一个参数是null/undefined时,js函数内执行的上下文环境是什么?
    闭包的实现原理和作用以及堆栈溢出和内存泄漏原理和相应解决办法
    JavaScript的作用域和作用域链
    词法作用域和动态作用域
    理解 es6 中class构造以及继承的底层实现原理
    new一个对象的详细过程,手动实现一个 new操作符
    实现继承的几种方式以及他们的优缺点
    理解JavaScript的执行上下文栈,可以应用堆栈信息快速定位问题
    原型和原型链-instanceof的底层实现原理
    js判断变量未定义
  • 原文地址:https://www.cnblogs.com/shawn0102/p/9113823.html
Copyright © 2011-2022 走看看