170112-机械臂moveit!抓取

前言

  • 这一节有一点高级了

参考

Mastering ROS

学习记录

使用3D视觉传感器

  • 这是实现抓取任务的基础
  • 注意!传感器可以由Gazebo模拟,也可以直接和物理设备相连传入Gazebo中

确认Gazebo插件正确工作

  • 使用RViz查看Gazebo插件传出的点云数据
roslaunch seven_dof_arm_gazebo seven_dof_arm_bringup_grasping
# 这个命令打开gazebo,关节控制器,gazebo视觉传感器插件
  • 在gazebo中添加桌子和物体
  • 打开RViz查看点云信息

构件机器人环境

  • 写一些配置文件配置Moveit的插件(内置的OctoMap Updater)将Gazebo仿真出来的点云数据输入到Moveit规划场景中
  • 机器人环境一般用八叉树来表示,OctoMap已经是Moveit的一个插件,叫做Occupany Map Updater插件,能够从不同的传感器源生成八叉树,目前有两种更新器
    • PointCloud Occupancy Map Updater: This plugin can take input in the form of point clouds (sensor_msgs/PointCloud2)
    • Depth Image Occupancy Map Updater: This plugin can take input in the form of input depth images (sensor_msgs/Image)
  • 第一步就是为这些插件写一些配置文件,来定义使用的插件及其属性
# seven_dof_arm_config/config/sensors_rgbd.yaml
sensors:
- sensor_plugin: occupancy_map_monitor/PointCloudOctomapUpdater
point_cloud_topic: /rgbd_camera/depth/points # 订阅的主题
max_range: 10 # 加入规划场景处理的范围
padding_offset: 0.01 # 其他定义
padding_scale: 1.0
point_subsample: 1
filtered_cloud_topic: output_cloud
  • 第二步就是写启动文件
# seven_dof_arm_config/launch/seven_dof_arm_moveit_sensor_manager.launch
<launch>
<rosparam command="load" file="$(find seven_dof_arm_config)/config/
sensors_rgbd.yaml" />
</launch> # 简单地加载参数到参数服务器
# sensor_manager.launch
<launch>
<!-- This file makes it easy to include the settings for sensor
managers -->
<!-- Params for the octomap monitor -->
<!-- <param name="octomap_frame" type="string" value="some frame in
which the robot moves" /> -->
# 这句话是注释的,因为书本上的示例机器人是静止的,如果机械臂固结在移动机器人上,那么需要定义八叉树地图的坐标系
<param name="octomap_resolution" type="double" value="0.015" />
<param name="max_range" type="double" value="5.0" />
# 这是分辨率和范围
<!-- Load the robot specific sensor manager; this sets the moveit_
sensor_manager ROS parameter -->
<arg name="moveit_sensor_manager" default="seven_dof_arm" />
<include file="$(find seven_dof_arm_config)/launch/$(arg moveit_
sensor_manager)_moveit_sensor_manager.launch.xml" />
</launch>

启动文件

roslaunch seven_dof_arm_gazebo seven_dof_arm_bringup_grasping.launch
# 启动gazebo,加入桌子和物体
roslaunch seven_dof_arm_config moveit_planning_execution.launch
# 启动Moveit规划器,这是在RViz中的规划界面
# 现在RViz中可以看到八叉树地图了

实现抓取任务

  • 有一个现成的包,叫做moveit_simple_grasps,这是一个简单的抓取动作生成器,它接收被抓取物体的姿态数据,生成抓取物体的动作序列,通过多线程的IK解算器来过滤和去掉不合法的抓取动作。这个包包括抓取生成器grasp generators, grasp filters, visualization tools。这个工具已经支持一些机械臂和机器人,我们可以通过简单的修改就可以支持自己的机械臂。
  • 复制moveit-simpl-grasps文件夹到项目中
roslaunch seven_dof_arm_gazebo grasp_generator_server.launch
  • 我们需要向服务器提供机械臂的planning group和end-effector group,所以需要在启动文件中做一些定义
<launch>
  <arg name="robot" default="cyton_gamma_1500"/>

  <arg name="group"        default="arm"/>
  <arg name="end_effector" default="gripper"/>

  <node pkg="moveit_simple_grasps" type="moveit_simple_grasps_server" name="moveit_simple_grasps_server">
    <param name="group"        value="$(arg group)"/>
    <param name="end_effector" value="$(arg end_effector)"/>

    <rosparam command="load" file="$(find gamma_1500_gazebo)/config/$(arg robot)_grasp_data.yaml"/>

  </node>

</launch>
  • 接下来需要定义grasp_data.yaml
base_link: ‘base_link‘

gripper:
  end_effector_name: ‘gripper‘

  # Default grasp params
  joints: [‘gripper_joint‘, ‘gripper_joint2‘]

  pregrasp_posture: [0.0, 0.0]
  pregrasp_time_from_start: 4.0

  grasp_posture: [1.0, 1.0]
  grasp_time_from_start: 4.0

  postplace_time_from_start: 4.0

  # Desired pose from end effector to grasp [x, y, z] + [R, P, Y]
  grasp_pose_to_eef: [0.0, 0.0, 0.0]
  grasp_pose_to_eef_rotation: [0.0, 0.0, 0.0]

  end_effector_parent_link: ‘wrist_roll‘

建立客户端和服务端

  • 有多种方式实现抓取任务,1)提前定义一系列的关节角值,这种方法需要我们把被抓取物体放在预定义的位置2)通过逆运动学来抓取,需要手动提供被抓取物体的位姿3)通过视觉伺服的方式来抓取,同样依赖逆运动学,不过是通过视觉来获取被抓取物体的位姿
  • 在这里我们直接提供被抓取物体的位姿

在moveit demo中仿真

  • 使用python grasp client
roslaunch seven_dof_config demo.launch
# 启动RViz界面
roslaunch seven_dof_arm_gazebo grasp_generator_server
# 启动moveit grasp 服务器
rosrun seven_dof_arm_gazebo pick_and_place.py
# 启动python客户端
  • 抓取流程可分为六步

      1. 客户端在场景中创建被抓取物体,提供位姿信息
      1. 得到位姿信息后,将其发送到抓取服务器grasp server,进行逆运动学解算,如果解算出来,则机械臂会过去
      1. 放置动作place action

python客户端源码解读

  • 一个重要的是,我们在gazebo中创建的物理环境信息应该在client中体现出来,所以我们在client中也要添加障碍物和被抓取物体的信息,不过由于grasp server是简单的,所以最好添加简单的几何物体。
  • 还有一些消息订阅和发布的函数定义
  • 动作客户端的定义

在gazebo中仿真

roslaunch seven_dof_arm_gazebo seven_dof_arm_bringup_grasping.launch
roslaunch seven_dof_arm_config moveit_planning_execution.launch
roslaunch seven_dof_arm_gazebo grasp_generator_server
rosrun seven_dof_arm_gazebo pick_and_place.py
  • 在真机上也是一样的,只是还要加上电机控制器controller

原文地址:https://www.cnblogs.com/lizhensheng/p/11117536.html

时间: 2024-10-10 18:45:40

170112-机械臂moveit!抓取的相关文章

基于 Mathematica 的机器人仿真环境(机械臂篇)[转]

完美的教程,没有之一,收藏学习. 目的 本文手把手教你在 Mathematica 软件中搭建机器人的仿真环境,具体包括以下内容(所使用的版本是 Mathematica 11.1,更早的版本可能缺少某些函数,所以请使用最新版.[email protected]).  1 导入机械臂的三维模型  2 (正/逆)运动学仿真  3 碰撞检测  4 轨迹规划  5 (正/逆)动力学仿真  6 控制方法的验证  不妨先看几个例子: 逆运动学 双臂协作搬运 显示运动痕迹 (平移)零空间运动  无论你是从事机器

机械臂的运动规划

如果你想要让机器人能帮你拿瓶子.做饭.收拾屋子等,就必须赋予机器人快速生成无碰撞.最优运动轨迹的能力,这就需要靠运动规划了.有人觉得运动规划已经很成熟了,无需再研究,但实际上,机械臂运动规划非常难-- 如 果你想要让机器人能帮你拿瓶子.做饭.收拾屋子等,就必须赋予机器人快速生成无碰撞.最优运动轨迹的能力,这就需要靠运动规划了.有人觉得运动规划已经很 成熟了,无需再研究,但实际上,机械臂运动规划非常难,之所以这么难,主要是因为规划问题的维度太高(具体后面分析),目前暂无兼顾实时性与最优性的规划 算

数据抓取的艺术(三):抓取Google数据之心得

本来是想把这部分内容放到前一篇<数据抓取的艺术(二):数据抓取程序优化>之中.但是随着任务的完成,我越来越感觉到其中深深的趣味,现总结如下: (1)时间     时间是一个与抓取规模相形而生的因素,数据规模越大,时间消耗往往越长.所以程序优化变得相当重要,要知道抓取时间越长,出错的可能性就越大,这还不说程序需要人工干预的情境.一旦运行中需要人工干预,时间越长,干预次数越多,出错的几率就更大了.在数据太多,工期太短的情况下,使用多线程抓取,也是一个好办法,但这会增加程序复杂度,对最终数据准确性产

数据抓取的艺术(三)

原文地址:http://blog.chinaunix.net/uid-22414998-id-3696649.html 本来是想把这部分内容放到前一篇<数据抓取的艺术(二):数据抓取程序优化>之中.但是随着任务的完成,我越来越感觉到其中深深的趣味,现总结如下: (1)时间     时间是一个与抓取规模相形而生的因素,数据规模越大,时间消耗往往越长.所以程序优化变得相当重要,要知道抓取时间越长,出错的可能性就越大,这还不说程序需要人工干预的情境.一旦运行中需要人工干预,时间越长,干预次数越多,出

一个实用的C#网页抓取类代码分享

一个实用的C# 网页抓取类 模拟蜘蛛,类中定义了超多的C#采集文章.网页抓取文章的基础技巧,下面分享代码: using System; using System.Data; using System.Configuration; using System.Net; using System.IO; using System.Text; using System.Collections.Generic; using System.Text.RegularExpressions; using Sys

fiddler抓取手机端的数据流量包

1.首先下载安装fiddler 2.然后打开fiddler,进入到tools-->options-->connections 3.然后进入到https 4.设置完成后,查找本机ip 然后打开手机的wifi,进行代理设置,手动输入本机ip地址,端口号就是8888 5.最重要的一点就是要手机端安装证书,要不然就会报tunnel to 443,抓取不到https的数据包 6.安装证书步骤 手机浏览器输入:http://你挂代理的ip:8888/FiddlerRoot.cer,然后安装成功就能抓取ht

使用Wireshark mac下抓取分析iphone数据包 --IOS端

mac系统版本:mac 10.10 Yosemite xcode版本:6.3.1 在追踪bug或者分析借鉴其他公司的app通讯思路时,抓包这件事是非常有必要的.下面说说Wireshark怎么截获iphone的数据包. 安装wireshark wireshark是依赖x11的,所以首先确认安装了x11,mac自带,可以打开升级一下.前往-实用工具-x11,打开后点击菜单栏上的x11,检查更新 即可.中间提取包内容过程比较长,耐心等待. 下载Wireshark最新版,尽量去官网下载:https://

关于curl跳转抓取

今天在公司碰到了一个bug,就是以前一直用curl下载的MP3录音文件为空了,但是浏览器去get请求是有文件的,并且大小还不是0kb,但是我用curl下载下来就是0K,百思不得其解.终于功夫不负有心人,得到了方法,原来我一直要去第三方的接口拿到录音数据,但是今天的录音数据中地址跳转了,也就是第一次请求的地址返回的是302, 这是以前的代码 $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // curl_setopt($ch, CUR

ngrep环回接口数据抓取方法,使用-d lo参数

ngrep环回接口数据抓取方法,使用-d lo参数,注意顺序: ngrep -W byline -d lo port 80