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

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本文介绍了如何使用ROS和MoveIt实现机械臂的自主避障和抓取。具体来说,我们使用深度相机获取环境中的点云数据,并使用YOLO算法识别目标物体。然后,我们使用MoveIt规划机械臂的运动轨迹,以便能够避开障碍物并抓取目标物体。最后,我们使用Gazebo仿真平台对系统进行测试。 1. 环境搭建 首先,我们需要安装ROS和MoveIt。在安装完成后,我们需要安装以下软件包: - pcl_ros:用于处理点云数据 - depthimage_to_laserscan:将深度图像转换为激光扫描数据 - yolo_ros:使用YOLO算法识别目标物体 - gazebo_ros_pkgs:使用Gazebo仿真平台进行测试 2. 点云数据处理 我们使用深度相机获取环境中的点云数据。然后,我们使用pcl_ros软件包将点云数据转换为ROS消息。接下来,我们使用depthimage_to_laserscan软件包将深度图像转换为激光扫描数据。这些步骤将使我们能够在ROS中使用点云数据和激光扫描数据。 3. 目标物体识别 我们使用yolo_ros软件包使用YOLO算法识别目标物体。该软件包将摄像机图像作为输入,并输出包含检测到的物体的ROS消息。我们可以使用这些消息来确定目标物体的位置和方向。 4. 机械臂运动规划 我们使用MoveIt规划机械臂的运动轨迹。我们需要定义机械臂的运动范围和运动约束。我们可以使用MoveIt的可视化工具来定义这些约束。然后,我们可以使用MoveIt提供的API来规划机械臂的运动轨迹。 5. 自主避障和抓取 我们将目标物体的位置和方向与机械臂的运动轨迹相结合,以便机械臂能够避开障碍物并抓取目标物体。我们可以使用MoveIt提供的运动规划和执行API来控制机械臂的运动。 6. 系统测试 最后,我们使用Gazebo仿真平台对系统进行测试。我们可以将机械臂和目标物体模型添加到Gazebo中,并使用ROS消息来控制它们的运动。我们可以使用Gazebo的可视化工具来查看机械臂的运动和目标物体的位置。 通过使用ROS和MoveIt,我们可以轻松地实现机械臂的自主避障和抓取功能。这种技术可以应用于许多领域,如自动化生产和无人机抓取

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值