gazebo添加末端六维力传感器

2023-05-16

gazebo添加末端六维力传感器

  • 建立六维力矩传感器模型
  • 将传感器拼接到机器人模型
  • 配置传感器gazebo参数

常用的机器人只支持位置控制,但实际运用中,却对末端力控制有迫切的需求,其中一种常用的方法是基于位置的阻抗控制(也称为导纳控制)实现对末端的力控。该方法只需要增加一个末端六维力传感器,就能实现机械臂的力柔顺控制,在现实中很容易实现,但是在gazebo中没有提供专用的末端六维力传感器模块,这个问题困扰了我很久。
为了解决这个问题,我让实验室的师弟专门研究了一段时间,结果他直接采用关节传感器(ros_control中提供了关节传感的控制器模块),最后成功采集了末端六维力。
末端六维力传感器添加步骤:

  • 1 建立传感器URDF模型
  • 2 将模型拼接到机器人末端
  • 3 在××.gazebo中配置传感器

建立六维力矩传感器模型

首先绘制六维力传感器三维模型,例如用SolidWorks绘制,让后采用插件导出URDF格式的模型,具体的导出方法参照Solidworks模型转换到URDF格式并配置Moveit的详细教程,本文导出如下

<?xml version="1.0" encoding="utf-8"?>
<!-- This URDF was automatically created by SolidWorks to URDF Exporter! Originally created by Stephen Brawner (brawner@gmail.com) 
     Commit Version: 1.5.0-0-g9aa0fdb  Build Version: 1.5.7004.21443
     For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robot
  name="my_sensor">
  <link
    name="sensor_link">
    <inertial>
      <origin
        xyz="5.187E-06 8.9595E-06 0.011516"
        rpy="0 0 0" />
      <mass
        value="0.10567" />
      <inertia
        ixx="7.1441E-05"
        ixy="1.6499E-08"
        ixz="-4.9269E-09"
        iyy="7.146E-05"
        iyz="-8.5336E-09"
        izz="0.00013366" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://my_arm/meshes/sensor_link.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.79216 0.79216 0.79216 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://my_arm/meshes/sensor_link.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="sensor_joint"
    type="revolute">
    <origin
      xyz="0 0 0.192"
      rpy="0 0 0.12101" />
    <parent
      link="Link7" />
    <child
      link="sensor_link" />
    <axis
      xyz="0 0 1" />
    <limit
      lower="0"
      upper="0"
      effort="0"
      velocity="0" />
    <safety_controller
      k_velocity="0" />
  </joint>
</robot>

如上所示,六维力传感器可以看做连杆和关节的组合体,关节的parent连杆采用需要连接传感器的机械臂对应连杆,child连杆采用自己绘制的传感器。需要注意的是,这中建模并不是准确的等效建模,若想要更高的建模精度,传感器需要建模为两个连杆和一个关节的组合体,尺寸和实际传感器完全一致。

<parent
    link="Link7" />
<child
   link="sensor_link" />

将传感器拼接到机器人模型

直接将外观文件sensor_link.STL粘贴到对应机器人模型文件的mesh文件中,将URDF粘贴到对应添加的位置即可,注意两个连杆之间需要用关节连接,如果不是实际关节,可以将关节设置为固定实现。如采用两个连杆和一个关节的组合体建模的传感器,传感器与机器人连杆连接处关节必须设置为固定。机器人的gazebo配置可参照ROS中gazebo配置教程详解

<link
    name="Link7">
    <inertial>
      <origin
        xyz="2.7283E-15 -5.3659E-09 0.18582"
        rpy="0 0 0" />
      <mass
        value="0.10414" />
      <inertia
        ixx="5.1163E-05"
        ixy="6.3527E-20"
        ixz="8.2388E-21"
        iyy="5.1163E-05"
        iyz="-3.3915E-21"
        izz="9.972E-05" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://armc_description/meshes/Link7.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.89804 0.91765 0.92941 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://armc_description/meshes/Link7.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="Joint7"
    type="revolute">
    <origin
      xyz="0 0 0"
      rpy="1.5708 0 0" />
    <parent
      link="Link6" />
    <child
      link="Link7" />
    <axis
      xyz="0 0 1" />
    <limit
      lower="0"
      upper="0"
      effort="0"
      velocity="0" />
    <safety_controller
      k_velocity="0" />
  </joint>
  <link
    name="sensor_link">
    <inertial>
      <origin
        xyz="5.187E-06 8.9595E-06 0.011516"
        rpy="0 0 0" />
      <mass
        value="0.10567" />
      <inertia
        ixx="7.1441E-05"
        ixy="1.6499E-08"
        ixz="-4.9269E-09"
        iyy="7.146E-05"
        iyz="-8.5336E-09"
        izz="0.00013366" />
    </inertial>
    <visual>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://armc_description/meshes/sensor_link.STL" />
      </geometry>
      <material
        name="">
        <color
          rgba="1 0 0 1" />
      </material>
    </visual>
    <collision>
      <origin
        xyz="0 0 0"
        rpy="0 0 0" />
      <geometry>
        <mesh
          filename="package://armc_description/meshes/sensor_link.STL" />
      </geometry>
    </collision>
  </link>
  <joint
    name="sensor_joint"
    type="revolute">
    <origin
      xyz="0 0 0.192"
      rpy="0 0 0.12101" />
    <parent
      link="Link7" />
    <child
      link="sensor_link" />
    <axis
      xyz="0 0 1" />
    <limit
      lower="0"
      upper="0"
      effort="0"
      velocity="0" />
    <safety_controller
      k_velocity="0" />
  </joint>

配置传感器gazebo参数

在ros_control中,关节传感器在controller中有独立的功能包force_torque_sensor_controller,完全可以和关节控制器一样的方法启动,但是为了更简单的启动传感器,本文提供了一种更简单的方法,直接在××.gazebo中配置。

<?xml version="1.0"?>
<robot>
<!--设置传感器外观-->
  <gazebo reference="sensor_link">
  <material>Gazebo/Red</material>
  <mu1 value="10.0"/>
  <mu2 value="10.0"/>
  <kp value="0.3" />
  <kd value="1.0" />
  <fdir1 value="1 0 0"/>
  <gravity value="true"/>
</gazebo>
<!--机器人控制器-->
<gazebo>
    <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so">
      <robotNamespace>armc</robotNamespace>
     <robotSimType>gazebo_ros_control/DefaultRobotHWSim</robotSimType>
      <legacyModeNS>true</legacyModeNS>
   </plugin>
</gazebo>

<!--对关节设置反馈为真-->
<gazebo 
      reference="sensor_joint">
     <provideFeedback>true</provideFeedback>
</gazebo>
<!-- 添加ft_sensor插件 -->
<gazebo>
    <plugin name="ft_sensor" filename="libgazebo_ros_ft_sensor.so">
      <updateRate>100.0</updateRate>
      <topicName>ft_sensor_topic</topicName>
      <jointName>sensor_joint</jointName>
    </plugin>
</gazebo>
</robot>

如上所示:在传感器插件中设置了传感器的采集频率和反馈话题名称

<updateRate>100.0</updateRate>
<topicName>ft_sensor_topic</topicName>

配置总结:

  • 1 传感器是关节传感器,必须依附于关节
  • 2 对应关节是否反馈设置为真
  • 3 添加传感器插件,并设置话题名和反馈频率

实际效果图:红色部分为末端六维力传感器
在这里插入图片描述采用rostopic list可以检测到已经获得力传感器的话题:/ft_sensor_topic

d@f:~$ rostopic list 
/armc/joint_positions_controller/command
/armc/joint_states
/clock
/ft_sensor_topic
/gazebo/link_states
/gazebo/model_states
/gazebo/parameter_descriptions
/gazebo/parameter_updates
/gazebo/set_link_state
/gazebo/set_model_state
/gazebo_gui/parameter_descriptions
/gazebo_gui/parameter_updates
/joint_states
/rosout
/rosout_agg
/tf
/tf_static
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gazebo添加末端六维力传感器 的相关文章

随机推荐

  • 缓存IO和直接IO的区别

    1 缓存IO 缓存I O又被称作标准I O xff0c 大多数文件系统的默认I O操作都是缓存I O 在Linux的缓存I O机制中 xff0c 数据先从磁盘复制到内核空间的缓冲区 xff0c 然后从内核空间缓冲区复制到应用程序的地址空间
  • 修改svn的配置文件并对密码加密

    svn管理 公司项目进出新人 xff0c 需要对代码管理工具进行增删 由于对linux不是很了解 对svn的配置有没有进行过交接 所有的操作都是自己在centos服务器上进行尝试 对于普通的svn的账号密码管理有了基本了解 但是在服务器上看
  • deepin安装微信qq

    在网页上下载最新微信或者qq env WINEPREFIX 61 deepinwine Deepin WeChat deepin wine WeChatSetup exe 该命令运行在WeChatSetup exe所在文件夹 xff0c 最
  • 在Java中,执行SQL查询到数据后,存储在哪里了?

    前言 xff1a 我们项目运行过程中 xff0c 肯定会有查询数据库这步操作 xff0c 无论你是MySQL还是Oracle 那么这种情况就必须搞清楚 xff0c 从数据库里查询得到的数据默认存储到哪了 xff0c 为什么一次查询过多的数据
  • Java小知识:摆脱BeanUtil.copyProperties!! 最优的替代方案 -Bean Converter插件使用方式来了~

    前言 xff1a 开发中为什么不推荐使用BeanUtil copyProperties xff1f 使用BeanUtil copyProperties会有哪些严重后果 xff1f 这些就不在这里眼神了哈 xff0c 大家可以自行查阅一下即可
  • Vue小知识: $ is not defined错误解决

    错误原因 xff1a 该错误是未安装JQuery依赖包导致 解决方案 xff1a 安装依赖包 1 执行安装jquery依赖包命令 cnpm install jquery save 2 webpack配置 xff08 1 xff09 在项目根
  • JVM小知识:linux 命令查看jvm堆内存信息

    1 查看当前java进程的pid pgrep lf java 2 查看java堆的详细信息 jmap heap PID 3 查看java堆中对象的相关信息 xff0c 包含数量以及占用的空间大小 jmap histo PID 4 查看监控
  • IDEA小知识:查看内存使用情况的步骤

    1 展示idea自带的内存指标 xff0c 如图 1 图 2 点击File gt 选择Setting gt 进入APPearance gt 勾选Show memory indicator 图 xff08 1 xff09 图 xff08 2
  • 【无标题】

    CMake Error at xxaipkg CMakeLists txt 50 add message files Unknown CMake command add message files Configuring incomplet
  • npm安装淘宝镜像报错

    npm install g cnpm registry 61 https registry npm taobao org 执行命令报错 无法安装cnpm 解决方案 xff1a 用管理员方式打开命令行 xff0c 就可以安装成功了
  • Leetcode——贪心算法(c++和java实现)

    本来有一段时间没有刷题了 xff0c 但是突然发现了这本书LeetCode 101 A LeetCode Grinding Guide C 43 43 Version xff0c 感觉真不错 xff0c 思路简单清晰 xff0c 没有过多的
  • 树莓派3B+安装c++版本opencv3.4.1,配置开发环境以及注意事项

    树莓派3B 43 安装c 43 43 版本opencv3 4 1 xff0c 配置开发环境以及注意事项 树莓派3B 43 ubuntu mate系统的安装 树莓派 xff0c Raspberry Pi xff0c 是一个只有信用卡大小的微型
  • 由frankmocap得到的.pkl文件转为.bvh或者.fbx

    需求 由Frankmocap所得到的 pkl文件转为blender里的 bvh或者Maya里的 fbx Frankmocap github项目地址 2D转3D转 bvh可以看VideoTo3dPoseAndBvh xff0c bvh转3D相
  • centos 安装docker

    查看系统内核版本 docker需要内核版本在3 8以上 centos7 版本是3 10 安装支持aufs CentOS7 默认不支持aufs文件系统 需要自己安装支持aufs的内核 进入repo目录 cd etc yum repo d 下载
  • echarts框架下大数据量展示的解决方案

    echarts 43 大数据量 这是个无解的问题 xff01 大数据量 xff0c 什么样的数据才算大呢 xff1f 在echart 4 5 0版本中 xff0c 画折线图 xff0c 数据线一共1001000条 xff0c 每条数据500
  • Open vSwitch介绍

    Open vSwitch介绍 1 vSwitch功能2 OvS架构3 OvS报文处理3 1 传统OvS方式3 2 OvS 43 DPDK处理方式 4 OvS补充说明4 1 基本概念4 2 匹配项与规则4 2 1 匹配项4 2 2 动作 本节
  • Python写ROS话题

    Python写ROS话题 导入ROS模块发送话题接收话题第一种方式 xff1a rospy Subscriber第二种方式 xff1a rospy wait for message完整程序 多线程处理同时接受多个话题 导入ROS模块 用py
  • Python写ROS程序常用数据结构std_msgs、geometry_msgs、sensor_msgs

    Python写ROS程序常用数据结构 std msgsFloat64MultiArray geometry msgsVector3TwistWrenchPointQuaternionPosePose2D Stamped sensor msg
  • ROS中gazebo配置教程详解

    ROS中gazebo配置教程详解 机器人模型文件获取原始URDF模型文件采用xacro格式改写文件增加gazebo插件描述增加传动transmission最后将上面三个文件合成一个文件 环境XX world文件配置文件 yaml启动文件la
  • gazebo添加末端六维力传感器

    gazebo添加末端六维力传感器 建立六维力矩传感器模型将传感器拼接到机器人模型配置传感器gazebo参数 常用的机器人只支持位置控制 xff0c 但实际运用中 xff0c 却对末端力控制有迫切的需求 xff0c 其中一种常用的方法是基于位