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 ([email protected]) 
     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
  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要在Gazebo中加载激光雷达传感器,需要先在Robot URDF模型中定义传感器。在URDF文件中添加以下代码,以定义名为"my_laser"的激光雷达传感器: ```xml <sensor name='my_laser' type='ray'> <pose>0 0 0.1 0 0 0</pose> <visualize>true</visualize> <update_rate>10</update_rate> <ray> <scan> <horizontal> <samples>720</samples> <resolution>1</resolution> <min_angle>-1.5708</min_angle> <max_angle>1.5708</max_angle> </horizontal> </scan> <range> <min>0.1</min> <max>10.0</max> <resolution>0.01</resolution> </range> <noise> <type>gaussian</type> <mean>0.0</mean> <stddev>0.01</stddev> </noise> </ray> </sensor> ``` 然后,在launch文件中将该传感器添加Gazebo模拟器中: ```xml <robot name="my_robot"> <link name="base_link"> <visual> ... </visual> <collision> ... </collision> <inertial> ... </inertial> <sensor name='my_laser' type='ray'> <pose>0 0 0.1 0 0 0</pose> <visualize>true</visualize> <update_rate>10</update_rate> <ray> <scan> <horizontal> <samples>720</samples> <resolution>1</resolution> <min_angle>-1.5708</min_angle> <max_angle>1.5708</max_angle> </horizontal> </scan> <range> <min>0.1</min> <max>10.0</max> <resolution>0.01</resolution> </range> <noise> <type>gaussian</type> <mean>0.0</mean> <stddev>0.01</stddev> </noise> </ray> </sensor> </link> </robot> ``` 要在Gazebo中直接获取传感器数据,可以使用ROS消息订阅器来获取传感器的数据。首先,需要在launch文件中启动ROS节点: ```xml <node name="gazebo_ros_laser" pkg="gazebo_ros" type="gazebo_ros_laser" respawn="false" output="screen"> <remap from="/scan" to="/my_laser/scan"/> </node> ``` 然后,在ROS节点中创建一个ROS消息订阅器,以订阅激光雷达传感器的扫描数据: ```python import rospy from sensor_msgs.msg import LaserScan def callback(data): # Process laser scan data here pass rospy.init_node('laser_scan_subscriber') rospy.Subscriber('/my_laser/scan', LaserScan, callback) rospy.spin() ``` 在回调函数中,可以处理激光雷达传感器的扫描数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值