gz sim机器人SDF模型 [持续更新]

机器人SDF模型

  • link
    • link的一级pose
    • 材质
  • plugin
    • 话题信息通信
    • 键盘操作plugin
  • Sensor传感器
    • imu

不算教学,个人的记录

sdf的格式跟urdf有所不同,必须是完整的一个包括,比如< pose></ pose>这样前一个后一个,urdf中是有< orign xyz=‘0 0 0’ rpy=‘0 0 0’>的写法的,也就是没< orign>< /orign>这样写。sdf中需要注意。

下面是一个两轮小车的模型sdf文件,算是一个标准基础例子。

<?xml version='1.0'?>
<sdf version='1.9'><model name='diff_drive_robot'><!-- 主车身(立方体) --><link name='base_link'><!-- 这个pose写的是右轮在整个model的零点的相对位置 --><pose>1 0 0 0 0 0</pose><!-- 物理属性必须要写,urdf中是可以不写的 --><inertial><mass>5.0</mass><inertia><ixx>0.104167</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.104167</iyy><iyz>0</iyz><izz>0.083333</izz></inertia></inertial><collision name='base_collision'><geometry><box><size>0.3 0.2 0.1</size> <!-- 长宽高:30cm x 20cm x 10cm --></box></geometry><surface><friction><ode><mu>0.5</mu><mu2>0.5</mu2></ode></friction></surface></collision><visual name='base_visual'><geometry><box><size>0.3 0.2 0.1</size></box></geometry><material><ambient>0.8 0.2 0.2 1</ambient><diffuse>0.8 0.2 0.2 1</diffuse></material></visual></link><!-- 左轮 --><link name='left_wheel'><inertial><mass>1.0</mass><inertia><ixx>0.05</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.05</iyy><iyz>0</iyz><izz>0.1</izz></inertia></inertial><collision name='left_wheel_collision'><geometry><cylinder><radius>0.1</radius>  <!-- 轮径20cm --><length>0.05</length> <!-- 厚度5cm --></cylinder></geometry></collision><visual name='left_wheel_visual'><geometry><cylinder><radius>0.1</radius><length>0.05</length></cylinder></geometry><material><ambient>0.3 0.3 0.3 1</ambient><diffuse>0.3 0.3 0.3 1</diffuse></material></visual></link><joint name='left_wheel_joint' type='revolute'><parent>base_link</parent><child>left_wheel</child><axis><xyz>0 1 0</xyz> <!-- Y轴为旋转轴 --><limit><lower>-1e9</lower> <!-- 无限旋转 --><upper>1e9</upper></limit></axis><pose>-0.15 0 -0.05 0 0 0</pose> <!-- 左偏移15cm --></joint><!-- 右轮(结构与左轮对称) --><link name='right_wheel'><!-- 这个pose写的是右轮在整个model的零点的相对位置,如果加了relative_to=‘base_link’,那就是相对base_link的位置 --><pose>1 0 0 0 0 0</pose><inertial><mass>1.0</mass><inertia><ixx>0.05</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.05</iyy><iyz>0</iyz><izz>0.1</izz></inertia></inertial><collision name='right_wheel_collision'><geometry><cylinder><radius>0.1</radius>  <!-- 轮径20cm --><length>0.05</length> <!-- 厚度5cm --></cylinder></geometry></collision><visual name='right_wheel_visual'><geometry><cylinder><radius>0.1</radius><length>0.05</length></cylinder></geometry><material><ambient>0.3 0.3 0.3 1</ambient><diffuse>0.3 0.3 0.3 1</diffuse></material></visual></link><joint name='right_wheel_joint' type='revolute'><parent>base_link</parent><child>right_wheel</child><axis><xyz>0 1 0</xyz> <!-- Y轴为旋转轴 --><limit><lower>-1e9</lower> <!-- 无限旋转 --><upper>1e9</upper></limit></axis><pose>0.15 0 -0.05 0 0 0</pose> <!-- 左偏移15cm --></joint></model>
</sdf>

查看sdf文件是否有效,gazebo能检测到并且输出
在这里插入图片描述

link

link的一级pose

给了base_link和左轮右轮的pose,这是相对整个model的零点的位置,也就是左轮的0 0 0 0 0 0处,因为三个link都是写在了< model> < /model>中,所以 也是相对模型零点的位置。

    <link name='base_link'><pose>0 0 1 0 0 0</pose>
    <link name='left_wheel'><pose>0 0 0 0 0 0</pose>
    <link name='right_wheel'><pose>1 0 0 0 0 0</pose>

在这里插入图片描述
整体都有位移,三个都改为0 0 1 0 0 0了
在这里插入图片描述
一般机器人都是写的有关节和链接,如果只用pose表示相对位置,只改了一个部件,那这个部件就会相对整个机器人发生位移,但是这个部件的子链接又没有位移就会扰乱了机器人模型,所以对一个完整的机器人,我会在pose里写一个relative_to=‘’

    <link name='left_wheel'><pose relative_to='base_link'>0 -0.125 0 1.57 0 0</pose>
    <link name='right_wheel'><pose relative_to='base_link'>0 0.125 0 1.57 0 0</pose>

在这里插入图片描述

材质

材质文件的保存形式,原来的sdf文件没定义纹理,可以自己创建material文件夹以及下面的scripts文件夹写纹理脚本文件,texture文件夹是纹理图片。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两种写法

        <script><uri>model://B2Z1/materials/scripts/gazebo.material</uri><name>Gazebo/Grey</name></script><!-- 只要求显示的话可以自己写,也不用脚本 --><material><shader type='pixel'/><ambient>0.3 0.3 0.3 1</ambient><diffuse>1 1 1 1</diffuse><specular>1 1 1 1</specular><emissive>0 0 0 1</emissive><shininess>90</shininess></material>

在这里插入图片描述

plugin

常见插件类型

  1. 传感器插件(如摄像头、激光雷达)
  2. 控制器插件(关节控制、机器人运动控制)
  3. 物理引擎插件(自定义物理行为)
  4. 系统插件(全局逻辑,如环境光照控制)

话题信息通信

为了与ros2进行通信的功能,写plugin引出gz topic话题,然后转换成ros2 topic话题
在这里插入图片描述
到官方文档中查看可以使用的接口
gz::sim::systems Namespace Reference
在这里插入图片描述
看到joint的控制器这里,可以看到给出了sdf中可写的内容
在这里插入图片描述

  <!-- JointController 插件 --><plugin name="joint_controller" filename="gz-sim-joint-controller-system"><!-- 必须参数 --><joint_name>your_joint</joint_name>  <!-- 要控制的关节名称 --><!-- 可选参数 --><use_force_commands>false</use_force_commands>  <!-- 是否使用力控制模式,默认 velocity 模式 --><use_actuator_msg>false</use_actuator_msg>     <!-- 是否使用 actuator 消息,默认 false --><actuator_number>0</actuator_number>           <!-- 执行器索引,默认 0 --><topic>/your_topic</topic>                     <!-- 命令话题,默认自动生成 --><sub_topic>your_subtopic</sub_topic>           <!-- 子话题,默认自动生成 --><initial_velocity>0</initial_velocity>         <!-- 初始速度 --><!-- 力控制模式下的 PID 参数(可选) --><p_gain>1.0</p_gain><i_gain>0.0</i_gain><d_gain>0.0</d_gain><i_max>1.0</i_max><i_min>-1.0</i_min><cmd_max>1000.0</cmd_max><cmd_min>-1000.0</cmd_min><cmd_offset>0.0</cmd_offset></plugin>

找到插件文件的存放路径发现这里有插件,在plugin中的filename填的就是插件文件名的部分,去掉lib和.so的格式

filename=“gz-sim-joint-controller-system” → 实际加载的库文件为 libgz-sim-joint-controller-system.so

在这里插入图片描述
能实现外部与仿真模型进行消息控制,< topic>和< sub_topic>非常重要, 主要就是自定义一个话题名成为gz topic,这样就有了接口,然后使用ros_gz_bridge进行转换让ros2代码进行操控消息数据

键盘操作plugin

监听特定输入消息,当匹配到预设条件时,自动发布指定的输出消息,在仿真中实现 “事件触发响应” 的机制,16777234是一个按键的对应码,类似c++中按键有对应的ASCII码那样。通过话题/cmd_vel输出速度数据。

        <plugin filename="gz-sim-triggered-publisher-system"name="gz::sim::systems::TriggeredPublisher"><input type="gz.msgs.Int32" topic="/keyboard/keypress"><match field="data">16777234</match></input><output type="gz.msgs.Twist" topic="/cmd_vel">linear: {x: 0.0}, angular: {z: 0.5}</output></plugin>

Sensor传感器

相机、imu、激光雷达是比较常用的

imu

看官方文档,说是plugin项放在world里就行,sensor项放在link中
在这里插入图片描述

<link name='imu_link'><pose relative_to='base_link'>0 0 0.125 0 0 0</pose><inertial><mass>0.1</mass><inertia><ixx>0.0001</ixx><ixy>0</ixy><ixz>0</ixz><iyy>0.0001</iyy><iyz>0</iyz><izz>0.0001</izz></inertia></inertial><visual name='imu_visual'><geometry><box><size>0.05 0.05 0.02</size></box></geometry><material><shader type='pixel'/><script><uri>model://joint/materials/scripts/gazebo.material</uri><name>Gazebo/Blue</name></script>          </material></visual><sensor name="imu_sensor" type="imu"><always_on>true</always_on><update_rate>10</update_rate><topic>imu</topic><visualize>true</visualize></sensor></link><!-- IMU传感器配置 --><plugin filename="libgz-sim-imu-system.so" name="gz::sim::systems::Imu"></plugin>
# 查看话题有没有imu
gz topic -l	
# 查看imu 的具体信息
gz topic -e -t /imu

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41801.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

极速全场景 MPP数据库starrocks介绍

目录 一、引子 二、起源 &#xff08;一&#xff09;前身 &#xff08;二&#xff09;定位 三、特点 &#xff08;一&#xff09;高性能架构 &#xff08;二&#xff09;实时分析 &#xff08;三&#xff09;高并发与扩展性 &#xff08;四&#xff09;兼容性与生态 …

计算机二级(C语言)考试高频考点总汇(二)—— 控制流、函数、数组和指针

目录 六、控制流 七、函数 八、数组和指针 六、控制流 76. if 语句可以&#xff08;嵌套&#xff09;&#xff0c; if 语句可以嵌套在另一个 if 语句内部&#xff0c;形成&#xff08;嵌套的条件判断结构&#xff09;&#xff0c;用于处理更复杂的条件判断逻辑。 77. els…

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…

2024年3月全国计算机等级考试真题(二级C语言)

&#x1f600; 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析&#xff1a; A. 矩阵是非线性结构 错误。矩阵通常是二维数组&#xff0c;属…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

大模型训练步骤:预训练;增量预训练;微调;RLHF或者DPO

参考&#xff1a;https://blog.csdn.net/chengxuyuanyy/article/details/140949825 开发阶段分类 模型分成3个阶段: (1)、第一阶段:(Continue PreTraining)增量预训练&#xff0c;在海量领域文档数据上二次预训练GPT模型&#xff0c;以注入领域知识。 (2)、第二阶段: SFT(Sup…

多网络选择路由(windows环境)

问题 情况是这样的&#xff0c;公司环境需要连接网线才能连接内网&#xff0c;也能上网&#xff0c;但是网速贼慢&#xff0c;我就连接了自己的热点&#xff0c;但是还是很慢&#xff0c;但是一拔掉网线就快了&#xff0c;但是连不上内网环境了。 解决思路 我猜我访问外网时…

idea解决properties中文乱码

问题&#xff1a; 我的IDEA已经将文件的字符集设置成了UTF-8&#xff0c;但是中文在*.properties文件中还是会出现乱码&#xff0c;后来经同事指点修改了一项配置就ok了&#xff01;话不多说&#xff0c;看下面的对比就清楚了。 设置方法&#xff1a; Settings -> Editor…

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09; 目录 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…

V8内存的限制

如大家所熟悉的&#xff0c;在一般的后端开发语言中&#xff0c;在基本的内存使用上没有什么限制&#xff0c;然而在 Node 中通过JavaScript 使用内存时就会发现只能使用部分内存&#xff08;64 位系统写约 1.4GB&#xff0c;32 位系统下约为 0.7GB&#xff09;。 在这样的限制…

【RabbitMQ】

课程背景 一.初始MQ 1.同步调用 2.异步调用 1.解耦合&#xff1a;如果需要扩展业务&#xff0c;那就扩呗&#xff0c;让扩展的服务去监听消息队列就可以了 2.无需等待&#xff1a;只管发消息&#xff0c;发完就不管了&#xff0c;干别的事去了 3.故障隔离&#xff1a;接收消息…

emWin图片旋转

图片取模&#xff1a; 源码&#xff1a; /* ********************************************************************************************************* * 声明图片 *********************************************************…

ElasticSearch在Windows单节点部署及使用

文章目录 初始化ES服务下载启动验证 Kibana可视化使用ES下载启动验证使用创建第一个索引添加文档查询文档 ES优点 初始化ES服务 下载启动 访问官网https://www.elastic.co/downloads/elasticsearch 点击Windows&#xff0c;开始下载elasticsearch-8.17.4-windows-x86_64.zip…

Qt弹出新窗口并关闭(两个按钮)

参考&#xff1a;Qt基础 练习&#xff1a;弹出新窗口并关闭的两种实现方式&#xff08;两个按钮、一个按钮&#xff09;_qt打开一个窗口另一个关闭-CSDN博客 实现&#xff1a;两个按钮&#xff0c;点击第一个按钮open window打开一个新窗口&#xff0c;点击第二个窗口close wi…

今日 GitHub 热门项目大赏,你 pick 谁?

GitHub 作为全球最大的开源代码托管平台&#xff0c;每天都有无数新奇且强大的项目涌现。今天就为大家精选几个不容错过的热门项目。 微软开源 Hyperlight Wasm&#xff1a;WebAssembly 的新力量 项目地址&#xff1a;hyperlight-wasm 微软开源的 Hyperlight Wasm&#xff0c…

【区块链安全 | 第七篇】EVM概念详解

文章目录 1. EVM 概述以太坊虚拟机&#xff08;Ethereum Virtual Machine&#xff0c;EVM&#xff09;的作用EVM 如何执行智能合约账户类型 2. EVM 体系结构栈&#xff08;Stack&#xff09;内存&#xff08;Memory&#xff09;存储&#xff08;Storage&#xff09;Gas 机制 3.…

【C++】AVL树

目录 前言平衡二叉树的定义AVL树的插入AVL树插入的大致过程更新平衡因子调整最小不平衡因子左单旋右单旋左右双旋右左双旋 AVL树的删除AVL树的查找 前言 前面我们在数据结构中学习了树&#xff0c;以及二叉树&#xff0c;还有二叉排序树&#xff0c;这节来学习平衡二叉树。 数…

【洛谷题单】暴力枚举(上)

【前情提要】 此文章包含洛谷题单的枚举题单&#xff0c;共14题&#xff0c;本篇7道题&#xff0c;主要分析思路&#xff0c;并通过这几道题目&#xff0c;进行总结有关枚举的内容。所以内容比较多&#xff0c;可以先收藏起来&#xff0c;慢慢看。 题单链接&#xff1a;暴力枚…

JVM类加载过程详解

文章目录 前言1.加载2.链接验证文件格式验证元数据验证字节码验证符号引用验证 准备解析 3.初始化4.类卸载 前言 类从被加载到虚拟机内存中开始到卸载出内存为止&#xff0c;它的整个生命周期可以简单概括为 7 个阶段&#xff1a;加载&#xff08;Loading&#xff09;、验证&a…