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

    微信二维码:↓

              

  • 相关阅读:
    2:编写虚幻引擎中的UC和C++代码
    1:编写虚幻引擎中的UC和C++代码
    0:编写虚幻引擎中的UC和C++代码
    4:虚幻引擎网络架构:技术要点总结篇
    3:虚幻引擎网络架构:GameInfo,PlayerMove
    2:虚幻引擎网络架构:Replication
    1:虚幻引擎网络架构:Actors
    R12-表详解-总帐
    clob 类型
    成本更新和算法
  • 原文地址:https://www.cnblogs.com/shawn0102/p/9113823.html
Copyright © 2011-2022 走看看