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.21443For more information, please see http://wiki.ros.org/sw_urdf_exporter -->
<robotname="my_sensor"><linkname="sensor_link"><inertial><originxyz="5.187E-06 8.9595E-06 0.011516"rpy="0 0 0" /><massvalue="0.10567" /><inertiaixx="7.1441E-05"ixy="1.6499E-08"ixz="-4.9269E-09"iyy="7.146E-05"iyz="-8.5336E-09"izz="0.00013366" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://my_arm/meshes/sensor_link.STL" /></geometry><materialname=""><colorrgba="0.79216 0.79216 0.79216 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://my_arm/meshes/sensor_link.STL" /></geometry></collision></link><jointname="sensor_joint"type="revolute"><originxyz="0 0 0.192"rpy="0 0 0.12101" /><parentlink="Link7" /><childlink="sensor_link" /><axisxyz="0 0 1" /><limitlower="0"upper="0"effort="0"velocity="0" /><safety_controllerk_velocity="0" /></joint>
</robot>

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

<parentlink="Link7" />
<childlink="sensor_link" />

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

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

<linkname="Link7"><inertial><originxyz="2.7283E-15 -5.3659E-09 0.18582"rpy="0 0 0" /><massvalue="0.10414" /><inertiaixx="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><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://armc_description/meshes/Link7.STL" /></geometry><materialname=""><colorrgba="0.89804 0.91765 0.92941 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://armc_description/meshes/Link7.STL" /></geometry></collision></link><jointname="Joint7"type="revolute"><originxyz="0 0 0"rpy="1.5708 0 0" /><parentlink="Link6" /><childlink="Link7" /><axisxyz="0 0 1" /><limitlower="0"upper="0"effort="0"velocity="0" /><safety_controllerk_velocity="0" /></joint><linkname="sensor_link"><inertial><originxyz="5.187E-06 8.9595E-06 0.011516"rpy="0 0 0" /><massvalue="0.10567" /><inertiaixx="7.1441E-05"ixy="1.6499E-08"ixz="-4.9269E-09"iyy="7.146E-05"iyz="-8.5336E-09"izz="0.00013366" /></inertial><visual><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://armc_description/meshes/sensor_link.STL" /></geometry><materialname=""><colorrgba="1 0 0 1" /></material></visual><collision><originxyz="0 0 0"rpy="0 0 0" /><geometry><meshfilename="package://armc_description/meshes/sensor_link.STL" /></geometry></collision></link><jointname="sensor_joint"type="revolute"><originxyz="0 0 0.192"rpy="0 0 0.12101" /><parentlink="Link7" /><childlink="sensor_link" /><axisxyz="0 0 1" /><limitlower="0"upper="0"effort="0"velocity="0" /><safety_controllerk_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

gazebo添加末端六维力传感器相关推荐

  1. 机械臂六维力传感器重力补偿原理

    重力补偿原理 1.力传感器数据分析 将六维力传感器三个力分量与力矩分量的零点值分别记为 ( F x 0 , F y 0 , F z 0 ) (F_{x0},F_{y0},F_{z0}) (Fx0​,F ...

  2. ATI六维力传感器完整使用教程(婴儿式教学!!!!)

    一.java环境安装配置 参考博客:https://blog.csdn.net/qq_40881680/article/details/83585542?ops_request_misc=%257B% ...

  3. ROBOTOUS电容式六维力传感器

    ROBOTOUS六维力传感器-电容式六维力传感器 电容式六维力传感器的核心部分是对压力敏感的电容器.力敏电容器的电容量是由电极面积和两个电极间的距离决定,当硅膜片两边存在压力差时,硅膜片产生形变,极板 ...

  4. 六维力传感器的温度特性和温度补偿

    根据六维力传感器的种类温度特性和温度补偿的方法有所不同 今天在这里来说明一下电容式传感器温度补偿的特性. 如果测量对象的材料温度上升而膨胀,因此即使在外力不变的情况下,传感器的输出值也会产生变化. 根 ...

  5. 基于libpcan库can总线操作的Barrett 机械手控制及腕部六维力传感器驱动

    效果:通过can总线直接向机械手控制器发送控制指令,实现机械手闭合控制,同时实现六维力传感器数据实时监测. 环境:ubuntu14.04+ROS indigo+pcan驱动(插入pcan后,能够使用l ...

  6. 六维力数据中去除重力、漂移力任务---ros之talker、listener、ur、坑

    理论基础 见前面博文 六维力传感器参数辨识方法+matlab代码实现 talker 见前面博文 linux下读取ATI公司力传感器数据&&c++中调用c源文件&&移植到 ...

  7. 干货|六维力和力矩传感器的技术与应用

    来源:机器人大讲堂 六维力和力矩传感器是一种提供三轴力和三轴力矩反馈的设备,并广泛应用在机器人控制.力学实验和科研等不同的场景中.不同于其他常见的测力仪器,六维力和力矩传感器可以测量完整的六自由度环境 ...

  8. 强化学习UR机械臂仿真环境搭建(一) - 为UR3机械臂添加robotiq ft300力传感器

    为UR3机械臂添加robotiq ft300力传感器 ```建议参考这篇```,[ur机械臂 + robotiq gripper + robotiq ft sensor + gazebo + 连接真实 ...

  9. keil4怎么移植其他人的程序_【调试笔记】韦东山:在100ask_imx6ull上移植使用六轴传感器ICM20608...

    之前发了LCD调试笔记,大家很感兴趣,所以这次再来一篇:六轴传感器ICM20608驱动移植笔记,大家还需要什么移植笔记?可以留言.我们尽量满足. 1.1 移植思路 先找到驱动:也许内核里已经有,也许需 ...

最新文章

  1. 高级转录组分析和R语言数据可视化第12期 (线上线下同时开课)
  2. 百度搜索引擎提供了一段嵌入到页面中的代码
  3. 浙大网新实训项目介绍
  4. call、apply和bind的用法与说明
  5. java集合复习笔记-java集合继承关系图
  6. html读写txt文件,JS读写文本文件示例代码
  7. C++线程安全单例类最全总结
  8. win10+cuda10+tensorflow-gpu最新安装教程
  9. 张尧学等人获奖,理由不充分
  10. 《东周列国志》第六十五回 弑齐光崔庆专权 纳卫衎宁喜擅政
  11. win7耳机插前面没声音_win7电脑音箱没声音如何解决 win7电脑音箱没声音解决方式【图解】...
  12. Python之灵异事件
  13. [LTE] RRU BBU 和 前传(fronthaul)
  14. 微信公众号商城前景分析
  15. 安利一个npm包:mddir,可以生成项目的工程结构
  16. ubuntu20.04 nvidia 460显卡安装
  17. 《太阳照常升起》观后感
  18. 2018中文EI收录情况
  19. MDSF:Mendix介绍
  20. vue+cesium汉化包

热门文章

  1. matlab空间曲面拟合,【Matlab】离散点拟合曲面
  2. 香港电影中的演员:F字头(持续更新中)
  3. AES算法描述及C语言实现
  4. photoshop时钟制作过程
  5. 在Centos7中配置NIS的详细过程
  6. 限流与代理网关集成调研及应用
  7. Android案例手册 - 定位点圆形水波纹和椭圆水波纹
  8. 【小树T系列3D打印机安装教程】
  9. JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】... 1
  10. c语言 实习报告,计算机专业c语言实训报告范文