Gazebo使用笔记(5) —— 力/力矩传感器的使用[通俗易懂]

Gazebo使用笔记(5) —— 力/力矩传感器的使用[通俗易懂]1.插件的添加在相应的<joint>标签内添加如下代码:<sensorname=”force_torque”type=”force_torque”><update_rate>30</update_rate></sensor>运行world:gazebo–verboseforce_torque_tutorial.world查看传感器输出:法1:命令查看gztopi

大家好,又见面了,我是你们的朋友全栈君。

1. 插件的添加

在相应的<joint>标签内添加如下代码:

        <sensor name="force_torque" type="force_torque">
          <update_rate>30</update_rate>
        </sensor>

运行world:

gazebo --verbose force_torque_tutorial.world

查看传感器输出:

  • 法1:命令查看
    gz topic --view /gazebo/default/model_1/joint_01/force_torque/wrench
    
  • 法2:Ctrl+T
    在这里插入图片描述
    添加一个力,测试仿真情况,并观察力/力矩输出情况:
    在这里插入图片描述
    倾倒以后,受力情况如下:
    在这里插入图片描述
    已知球体质量为10kg,距离关节1.5m,开始时只受重力影响:
forceJointZ = mass * g
            = 10 kg * -9.8 m/s^2
            = -98 N

给y方向施加500N,倾倒90°后,关节+Y轴指向地面,作用在球体上的重力会绕X轴施加扭矩:
在这里插入图片描述

torqueJoint01_x = r X R
                = ||r|| * ||F|| * sin(theta)
                = distanceZ * (massLink * g) * sin(theta)
                = 1.5 m * (10 kg * 9.8 m/s^2) * sin(-90)
                = -147 Nm

注意:根据物理引擎参数,接近关节极限的测量值可能会发生跳跃!问题叙述参见https://github.com/osrf/gazebo/issues/2209


力/力矩的添加:
参见Apping Force/Torque

在这里插入图片描述
在这里插入图片描述

2. SDF参数说明

传感器通用参数:

SDF传感器架构参见-http://sdformat.org/spec?ver=1.6&elem=sensor

  • <always_on>:如果为true,则传感器始终测量力/力矩;如果为false,则仅在有订阅者连接到传感器主题的情况下传感器才会更新;通过代码访问传感器时,此设置很重要;如果没有订阅者,则调用ForceTorqueSensor::Torque()ForceTorqueSensor::Force()将返回旧数据;可以通过检查是否返回来检测;代码可以通过调用来更新没有订阅者的传感器。
  • <update_rate>:传感器更新频率(Hz),即传感器每秒发布的消息数
  • <visualize>:如果为true,则Gazebo client将对关节处的力/力矩进行可视化
  • <topic>:力/扭矩传感器当前不支持该参数
  • <frame>:力/扭矩传感器当前不支持该参数
  • <pose>:浮点数,用空格分隔x y z roll pitch yaw,它描述了传感器坐标系相对于父关节的位置

ForceTorqueSensor Class头文件为#include <sensors/sensors.hh>

ForceTorque特定参数:
<sensor name="my_cool_sensor" type="force_torque">
  <force_torque>
    <frame>child</frame>
    <measure_direction>child_to_parent</measure_direction>
  </force_torque>
</sensor>

通过添加属性类型设置为force_torque<sensor>标签来创建力/扭矩传感器,可以设置两个附加参数:

  • <frame>:其值有三种,childparentsensor;其表示力/力矩坐标系,parentchild用于指定关节哪端是父节点哪端是子节点(即可用来设置旋转方向???),sensor值意味着测量值是通过该传感器的<pose>的旋转分量描述的,姿势的平移分量对测量没有影响。

    无论此设置如何,扭矩分量始终以关节坐标系的原点表示。

  • <measure_direction>:测量方向,尝试将上面的例子改为parent_to_child,倾倒以后会发现,​​传感器测量值在Y轴上的力为-98 N,在X轴上的扭矩为+147 Nm,数值与以前相同,但方向相反。

3. 说明

  1. 尽管SDF允许将<sensor>标签放置在linkjoint上,但ForceTorqueSensor仅在关节上起作用。如果将传感器添加到link,则使用--verbose运行gazebo时会报错:
[Err] [Link.cc:114] A link cannot load a [force_torque] sensor.
  1. 以上示例将力/力矩传感器放置在旋转关节上,但是实际情况中力/力矩传感器通常被刚性地安装在另一个刚体上,真实传感器无法准确测量旋转关节起点处的力/力矩。

    ① 如果实际传感器距离关节足够近,以至于偏移误差可忽略,则这种方式建模是合理的;

    在这里插入图片描述
    ② 如果该误差不可忽略,可以在实际传感器的位置处通过固定关节将刚体分成两个joint
    在这里插入图片描述

4. 示例sdf文件

<?xml version="1.0"?>
<sdf version="1.6">
<world name="default">
<physics name="default_physics" default="0" type="ode">
<max_step_size>0.001</max_step_size>
<real_time_factor>1</real_time_factor>
<real_time_update_rate>1000</real_time_update_rate>
<ode>
<solver>
<type>quick</type>
<iters>50</iters>
<sor>1.0</sor> <!-- Important, see issue #2209 -->
<use_dynamic_moi_rescaling>false</use_dynamic_moi_rescaling>
</solver>
</ode>
</physics>
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://sun</uri>
</include>
<model name="model_1">
<link name="link_1">
<pose>0 0 2.0 0 0 0</pose>
<inertial>
<inertia>
<ixx>0.100000</ixx>
<ixy>0.000000</ixy>
<ixz>0.000000</ixz>
<iyy>0.100000</iyy>
<iyz>0.000000</iyz>
<izz>0.100000</izz>
</inertia>
<mass>10.000000</mass>
</inertial>
<visual name="visual_sphere">
<geometry>
<sphere>
<radius>0.100000</radius>
</sphere>
</geometry>
</visual>
<visual name="visual_cylinder">
<pose>0 0 -0.75 0 0 0</pose>
<geometry>
<cylinder>
<radius>0.0100000</radius>
<length>1.5</length>
</cylinder>
</geometry>
</visual>
<collision name="collision_sphere">
<max_contacts>250</max_contacts>
<geometry>
<sphere>
<radius>0.100000</radius>
</sphere>
</geometry>
</collision>
</link>
<joint name="joint_01" type="revolute">
<parent>world</parent>
<child>link_1</child>
<pose>0 0 -1.5 0 0 0</pose>
<axis>
<limit>
<lower>-1.57079</lower>
<upper>1.57079</upper>
</limit>
<dynamics>
<damping>0.000000</damping>
<friction>0.000000</friction>
</dynamics>
<xyz>1.000000 0.000000 0.000000</xyz>
</axis>
<sensor name="force_torque" type="force_torque">
<update_rate>30</update_rate>
</sensor>
</joint>
</model>
</world>
</sdf>

参考文献:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146380.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • JSONObject获取JSONArray转JSONObject获取某个属性值

    JSONObject获取JSONArray转JSONObject获取某个属性值StringhttpPost4Instream=http.httpPost4InstreamJSONObjectjsonbject=JSONObject.fromObject(httpPost4Instream);JSONArrayjsonArray=jsonbject.getJSONArray("stores");Stringstring=jsonArray.get…

  • 校园小助手–智慧成绩统计服务平台

    校园小助手–智慧成绩统计服务平台

  • Struts2 漏洞信息汇总

    Struts2 漏洞信息汇总官方链接如下:https://cwiki.apache.org/confluence/display/WW/Security+Bulletins最近不出以外Struts2又又又一次被爆出RCE漏洞【S2-061Struts远程代码执行漏洞(CVE-2020-17530)】每次Struts2RCE漏洞爆发的时候都在想,如果有个地方能统一看一下Struts2的历史漏洞就好了,网上搜索了下居然没有,翻了下Struts2官网,终于找到了需要的内容截至本文发布时,所以已经爆出的Strut.

  • selenium自动化测试报告_selenium自动化测试断言

    selenium自动化测试报告_selenium自动化测试断言自动化测试——selenium(完结篇)文章目录自动化测试——selenium(完结篇)一、元素操作方法二、浏览器操作方法三、获取元素信息操作四、鼠标操作(需要实例化鼠标对象)4.1鼠标右键及双击4.2鼠标拖拽4.3鼠标悬停【重点】五、键盘操作(不需要实例化对象)☆六、元素等待七、下拉框(需要实例化下拉框)八、弹出框九、滚动条十、切换frame表单☆10.1连续切换frame十一、多窗口的切换☆十二、截图操作十三、验证码前言:看这篇帖子,最好要在知道定位八大元素的基础之上才能够比较熟练

  • RewriteRule参数

    RewriteRule参数在重写规制的最后,也可以附加一个或多个标记参数(用逗号分开),从而为新的URL地址添加特殊的标志。这些参数是特殊的RewriteRule命令,并且不是普通的正则表达式,下表列出了一些常用的RewriteRule参数。这些重写标记必须被置于单条规则最后的括号内,多个标记需要适用逗号分开,例如”[NC,L]”RewirteRule标记含义描述RRedirect

  • R、RStudio下载与安装方法

    R、RStudio下载与安装方法现如今,R语言是统计领域广泛使用的工具,是属于GNU系统的一个自由、免费、源代码开放的软件,是用于统计计算和统计绘图的优秀工具。而RStudio是R的集成开发环境,用它进行R编程的学习和实践会更加轻松和方便。下面就教大家如何下载并安装R和RStudio,比较简单。R的维护工作由一个国际化的开发者团队负责。R软件的官方下载页面叫作TheComprehensiveRArchiveNetwor…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号