Gazebo仿真环境系列教程(六):创建一个四轮小车模型
本教程介绍了在Gazebo中使用SDF格式创建四轮小车仿真模型的方法。模型包含956kg的长方体底盘(4.5×1.8×1.5m)、前轮转向系统(最大转向角±34.4度)和后轮驱动系统(最大扭矩100000N·m)。详细解析了底盘惯性参数、碰撞属性设置,以及转向和驱动系统的关节配置,包括转向限制、阻尼系数和摩擦参数等关键动力学特性。通过XML代码示例展示了各部件链接与关节的具体实现方式,为构建逼真的
·
文章目录
在本教程中,我们将学习如何使用 SDF(Simulation Description Format)在 Gazebo 仿真环境中创建一个具有完整转向和驱动功能的四轮小车。这个模型包含前后轮、底盘、转向机构等关键部件,通过合理配置物理参数和关节约束,使其能够在仿真中逼真地模拟车辆运动。
一、模型概述
四轮小车是机器人仿真中最常见的移动平台之一,本模型采用前轮转向、后轮驱动的布局方式,具有以下特点:
-
底盘结构:长方体底盘,尺寸为4.5m×1.8m×1.5m,总质量956kg
-
转向系统:前轮采用独立转向机构,最大转向角±34.4度(±0.6弧度)
-
驱动系统:后轮驱动,最大扭矩100000牛·米,最高转速约9549 RPM
-
物理特性:包含完整的惯性参数、碰撞属性和动力学参数
二、模型实现
2.1 底盘构建
底盘是车辆的基础结构,所有其他部件都直接或间接连接到底盘上。
<link name='base_link'>
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>956</mass>
<inertia>
<ixx>437.5</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>1792.5</iyy>
<iyz>0</iyz>
<izz>1870.8</izz>
</inertia>
</inertial>
<collision name='base_link_collision'>
<pose>0 0 1.25 0 -0 0</pose>
<geometry>
<box>
<size>4.5 1.8 1.5</size>
</box>
</geometry>
</collision>
<visual name='base_link_visual'>
<pose>0 0 1.25 0 -0 0</pose>
<geometry>
<box>
<size>4.5 1.8 1.5</size>
</box>
</geometry>
</visual>
</link>
- 惯性参数:
<inertial>标签定义了底盘的质量分布特性mass:底盘总质量956kginertia:3×3转动惯量矩阵,由于底盘对称,非对角线元素为0pose:质量中心与坐标系原点重合
- 碰撞属性:
<collision>标签定义了底盘在物理仿真中的碰撞体积- 使用与可视化模型相同的长方体几何形状
- 位置偏移1.25m,使底盘底部位于z=0平面
- 可视化模型:
<visual>标签定义了底盘在仿真中的外观表现- 与碰撞模型保持一致,确保物理仿真与视觉表现一致
2.2 转向系统构建
本模型采用阿克曼转向几何(Ackermann steering geometry),前轮独立转向,后轮固定。
左前轮转向关节
<joint name='front_left_steering_joint' type='revolute'>
<pose relative_to='base_link'>1.5 1.4 0.5 0 -0 0</pose>
<parent>base_link</parent>
<child>front_left_steering_link</child>
<axis>
<xyz>0 0 1</xyz>
<limit>
<lower>-0.6</lower>
<upper>0.6</upper>
<effort>1e+06</effort>
<velocity>10000</velocity>
</limit>
<dynamics>
<damping>10</damping>
<friction>0</friction>
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness>
</dynamics>
</axis>
</joint>
转向机构链接
<link name='front_left_steering_link'>
<pose relative_to='front_left_steering_joint'>0 0 0 0 -0 0</pose>
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>5</mass>
<inertia>
<ixx>0.012</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>0.025</iyy>
<iyz>0</iyz>
<izz>0.012</izz>
</inertia>
</inertial>
<visual name='front_left_steering_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose>
<geometry>
<cylinder>
<length>0.01</length>
<radius>0.1</radius>
</cylinder>
</geometry>
</visual>
</link>
- 关节类型:
type='revolute'表示旋转关节,绕单一轴旋转 - 转向轴:
<xyz>0 0 1</xyz>表示绕Z轴旋转(垂直轴转向) - 转向限制:
<limit>标签定义了转向角度范围(-0.6到+0.6弧度,约±34.4度) - 动力学参数:
<dynamics>标签设置转向阻尼,确保转向稳定性 - 转向柱可视化:使用圆柱体表示转向机构,旋转90度使其直立
2.3 驱动系统构建
车辆采用后轮驱动方式,前后轮结构相似但功能不同。
左前轮驱动关节
<joint name='front_left_wheel_joint' type='revolute'>
<pose relative_to='front_left_steering_link'>0 0 0 0 -0 0</pose>
<parent>front_left_steering_link</parent>
<child>front_left_wheel_link</child>
<axis>
<xyz>0 1 0</xyz>
<limit>
<effort>1e+06</effort>
<velocity>10000</velocity>
<lower>-1e+16</lower>
<upper>1e+16</upper>
</limit>
<dynamics>
<damping>0.1</damping>
<friction>0</friction>
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness>
</dynamics>
</axis>
</joint>
车轮链接
<link name='front_left_wheel_link'>
<pose relative_to='front_left_wheel_joint'>0 0 0 0 -0 0</pose>
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>20</mass>
<inertia>
<ixx>1.4</ixx>
<iyy>2.5</iyy>
<izz>1.4</izz>
</inertia>
</inertial>
<collision name='front_left_wheel_link_collision'>
<pose>0 0 0 1.5708 -0 0</pose>
<geometry>
<cylinder>
<length>0.3</length>
<radius>0.5</radius>
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>1.0</mu>
<mu2>0.8</mu2>
</ode>
</friction>
</surface>
</collision>
<visual name='front_left_wheel_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose>
<geometry>
<cylinder>
<length>0.3</length>
<radius>0.5</radius>
</cylinder>
</geometry>
</visual>
</link>
- 驱动轴方向:
<xyz>0 1 0</xyz>表示绕Y轴旋转(与车辆前进方向一致) - 旋转限制:设置极大范围(-1e16到+1e16)近似无限旋转
- 车轮惯性:质量20kg,转动惯量矩阵反映圆柱体特性
- 摩擦系数:
<surface>标签定义静摩擦(1.0)和动摩擦(0.8)系数 - 车轮几何:半径0.5m,宽度0.3m的圆柱体,旋转90度使其与地面接触
2.4 对称部件构建
车辆模型需要构建对称的右前轮和两个后轮,结构与左前轮类似,主要区别在于位置参数。
右前轮转向关节
<joint name='front_right_steering_joint' type='revolute'>
<pose relative_to='base_link'>1.5 -1.4 0.5 0 -0 0</pose>
<parent>base_link</parent>
<child>front_right_steering_link</child>
<axis>
<xyz>0 0 1</xyz>
<limit>
<lower>-0.6</lower>
<upper>0.6</upper>
<effort>1e+06</effort>
<velocity>10000</velocity>
</limit>
<dynamics>
<damping>10</damping>
<friction>0</friction>
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness>
</dynamics>
</axis>
</joint>
后轮驱动关节
<joint name='rear_left_wheel_joint' type='revolute'>
<pose relative_to='base_link'>-1.5 1.4 0.5 0 -0 0</pose>
<parent>base_link</parent>
<child>rear_left_wheel_link</child>
<axis>
<xyz>0 1 0</xyz>
<limit>
<effort>100000</effort>
<velocity>10000</velocity>
<lower>-1e+16</lower>
<upper>1e+16</upper>
</limit>
<dynamics>
<damping>0.1</damping>
<friction>0</friction>
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness>
</dynamics>
</axis>
</joint>
- 位置对称性:右前轮y坐标为-1.4m(左前轮为+1.4m),后轮x坐标为-1.5m(前轮为+1.5m)
- 驱动扭矩:后轮最大扭矩100000牛·米,高于转向关节的1e+06牛·米
- 简化设计:后轮直接连接到底盘,不包含转向机构
2.5 参考坐标系定义
为方便后续控制和传感器集成,定义了惯性参考系和主要质量参考点。
<frame name='inertial_joint' attached_to='base_link'>
<pose>0 0 0 0 -0 0</pose>
</frame>
<frame name='main_mass' attached_to='inertial_joint'/>
- 惯性参考系:与底盘坐标系对齐,用于统一物理计算参考
- 质量参考点:标记车辆主要质量中心位置,可用于平衡计算
三、完整实现
以下是模型的完整实现:
<sdf version='1.7'>
<!-- 车辆模型定义 -->
<model name='four_wheeled_vehicle'>
<!-- 底盘主体 -->
<link name='base_link'>
<inertial>
<pose>0 0 0 0 -0 0</pose> <!-- 质量中心与坐标系原点重合 -->
<mass>956</mass> <!-- 底盘总质量956kg -->
<inertia>
<ixx>437.5</ixx>
<ixy>0</ixy>
<ixz>0</ixz>
<iyy>1792.5</iyy>
<iyz>0</iyz>
<izz>1870.8</izz>
</inertia>
</inertial>
<collision name='base_link_collision'>
<pose>0 0 1.25 0 -0 0</pose>
<geometry>
<box>
<size>4.5 1.8 1.5</size>
</box>
</geometry>
</collision>
<visual name='base_link_visual'>
<pose>0 0 1.25 0 -0 0</pose> <!-- 可视化模型位置偏移 -->
<geometry>
<box>
<size>4.5 1.8 1.5</size> <!-- 长×宽×高(单位:米) -->
</box>
</geometry>
</visual>
</link>
<!-- 左前轮转向关节 -->
<joint name='front_left_steering_joint' type='revolute'>
<!-- 转向关节位置(相对于底盘中心) -->
<pose relative_to='base_link'>1.5 1.4 0.5 0 -0 0</pose> <!-- x,y,z坐标(单位:米) -->
<parent>base_link</parent>
<child>front_left_steering_link</child>
<axis>
<!-- 转向轴方向(绕Z轴旋转) -->
<xyz>0 0 1</xyz> <!-- 使用右手法则确定旋转方向 -->
<!-- 关节运动限制 -->
<limit>
<lower>-0.6</lower> <!-- 最小转向角(-34.4度) -->
<upper>0.6</upper> <!-- 最大转向角(+34.4度) -->
<effort>1e+06</effort> <!-- 最大作用力(牛·米) -->
<velocity>10000</velocity> <!-- 最大旋转速度(弧度/秒) -->
</limit>
<!-- 动力学参数 -->
<dynamics>
<damping>10</damping> <!-- 阻尼系数(牛·米·秒/弧度) -->
<friction>0</friction> <!-- 静摩擦系数 -->
<spring_reference>0</spring_reference> <!-- 弹簧自然位置 -->
<spring_stiffness>0</spring_stiffness> <!-- 弹簧刚度(牛·米/弧度) -->
</dynamics>
</axis>
</joint>
<!-- 左前轮转向机构 -->
<link name='front_left_steering_link'>
<!-- 相对于转向关节的位置(保持对齐) -->
<pose relative_to='front_left_steering_joint'>0 0 0 0 -0 0</pose>
<!-- 惯性参数(转向机构质量5kg) -->
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>5</mass>
<inertia>
<ixx>0.012</ixx> <!-- X轴转动惯量 -->
<ixy>0</ixy> <!-- XY轴惯性积 -->
<ixz>0</ixz> <!-- XZ轴惯性积 -->
<iyy>0.025</iyy> <!-- Y轴转动惯量 -->
<iyz>0</iyz> <!-- YZ轴惯性积 -->
<izz>0.012</izz> <!-- Z轴转动惯量 -->
</inertia>
</inertial>
<!-- 转向机构可视化模型 -->
<visual name='front_left_steering_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose> <!-- 1.5708弧度=90度 -->
<geometry>
<cylinder>
<length>0.01</length> <!-- 圆柱高度(实际为转向柱直径) -->
<radius>0.1</radius> <!-- 圆柱半径(实际为转向柱半径) -->
</cylinder>
</geometry>
</visual>
</link>
<!-- 左前轮驱动关节 -->
<joint name='front_left_wheel_joint' type='revolute'>
<!-- 相对于转向机构的位置(保持对齐) -->
<pose relative_to='front_left_steering_link'>0 0 0 0 -0 0</pose>
<parent>front_left_steering_link</parent>
<child>front_left_wheel_link</child>
<axis>
<!-- 车轮旋转轴方向(绕Y轴旋转) -->
<xyz>0 1 0</xyz> <!-- 符合车辆前进方向的旋转轴 -->
<!-- 旋转限制(近似无限旋转) -->
<limit>
<effort>1e+06</effort> <!-- 最大驱动力矩(牛·米) -->
<velocity>10000</velocity> <!-- 最大旋转速度(弧度/秒) -->
<lower>-1e+16</lower> <!-- 最小角度(接近负无穷) -->
<upper>1e+16</upper> <!-- 最大角度(接近正无穷) -->
</limit>
<!-- 动力学参数 -->
<dynamics>
<damping>0.1</damping> <!-- 旋转阻尼系数 -->
<friction>0</friction> <!-- 无静摩擦力 -->
<spring_reference>0</spring_reference> <!-- 弹簧自然位置 -->
<spring_stiffness>0</spring_stiffness> <!-- 无弹簧效应 -->
</dynamics>
</axis>
</joint>
<!-- 左前轮 -->
<link name='front_left_wheel_link'>
<!-- 相对于车轮关节的位置(保持对齐) -->
<pose relative_to='front_left_wheel_joint'>0 0 0 0 -0 0</pose>
<!-- 车轮惯性参数(质量20kg) -->
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>20</mass>
<inertia>
<ixx>1.4</ixx> <!-- X轴转动惯量 -->
<iyy>2.5</iyy> <!-- Y轴转动惯量(车轮旋转轴) -->
<izz>1.4</izz> <!-- Z轴转动惯量 -->
</inertia>
</inertial>
<!-- 车轮碰撞体积 -->
<collision name='front_left_wheel_link_collision'>
<pose>0 0 0 1.5708 -0 0</pose> <!-- 1.5708弧度=90度 -->
<geometry>
<cylinder>
<length>0.3</length> <!-- 轮胎宽度 -->
<radius>0.5</radius> <!-- 轮胎半径 -->
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>1.0</mu> <!-- 静摩擦系数 -->
<mu2>0.8</mu2> <!-- 动摩擦系数 -->
</ode>
</friction>
</surface>
</collision>
<!-- 车轮可视化模型 -->
<visual name='front_left_wheel_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose>
<geometry>
<cylinder>
<length>0.3</length>
<radius>0.5</radius>
</cylinder>
</geometry>
</visual>
</link>
<!-- 右前轮转向关节 -->
<joint name='front_right_steering_joint' type='revolute'>
<!-- 右前转向关节位置(对称于左前转向关节) -->
<pose relative_to='base_link'>1.5 -1.4 0.5 0 -0 0</pose> <!-- x=0.923m,y=-0.642m(右侧对称位置) -->
<parent>base_link</parent>
<child>front_right_steering_link</child>
<axis>
<!-- 转向轴方向(绕Z轴旋转) -->
<xyz>0 0 1</xyz> <!-- 与左前转向关节保持对称 -->
<!-- 关节运动限制 -->
<limit>
<lower>-0.6</lower> <!-- 最小转向角(-34.4度) -->
<upper>0.6</upper> <!-- 最大转向角(+34.4度) -->
<effort>1e+06</effort> <!-- 最大作用力矩(牛·米) -->
<velocity>10000</velocity> <!-- 最大旋转速度(弧度/秒) -->
</limit>
<!-- 动力学参数(与左前转向关节对称) -->
<dynamics>
<damping>10</damping> <!-- 高阻尼系数确保转向稳定性 -->
<friction>0</friction> <!-- 无静摩擦力 -->
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness>
</dynamics>
</axis>
</joint>
<!-- 右前轮转向机构 -->
<link name='front_right_steering_link'>
<!-- 相对于右前转向关节的位置(保持对齐) -->
<pose relative_to='front_right_steering_joint'>0 0 0 0 -0 0</pose>
<!-- 惯性参数(转向机构质量5kg) -->
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>5</mass>
<inertia>
<ixx>0.012</ixx> <!-- X轴转动惯量 -->
<ixy>0</ixy> <!-- XY轴惯性积 -->
<ixz>0</ixz> <!-- XZ轴惯性积 -->
<iyy>0.025</iyy> <!-- Y轴转动惯量 -->
<iyz>0</iyz> <!-- YZ轴惯性积 -->
<izz>0.012</izz> <!-- Z轴转动惯量 -->
</inertia>
</inertial>
<!-- 右前转向柱可视化模型 -->
<visual name='front_right_steering_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose> <!-- 1.5708弧度=90度 -->
<geometry>
<cylinder>
<length>0.01</length> <!-- 转向柱高度(实际为直径) -->
<radius>0.1</radius> <!-- 转向柱半径 -->
</cylinder>
</geometry>
</visual>
</link>
<!-- 右前轮驱动关节 -->
<joint name='front_right_wheel_joint' type='revolute'>
<!-- 右前轮驱动关节(与左前轮对称配置) -->
<pose relative_to='front_right_steering_link'>0 0 0 0 -0 0</pose>
<parent>front_right_steering_link</parent>
<child>front_right_wheel_link</child>
<axis>
<!-- 车轮旋转轴方向(绕Y轴旋转) -->
<xyz>0 1 0</xyz> <!-- 与车辆前进方向一致的旋转轴 -->
<!-- 旋转限制(允许无限旋转) -->
<limit>
<effort>1e+06</effort> <!-- 最大驱动力矩(约1000牛·米) -->
<velocity>10000</velocity> <!-- 最大转速(约9549 RPM) -->
<lower>-1e+16</lower> <!-- 最小角度(接近负无穷) -->
<upper>1e+16</upper> <!-- 最大角度(接近正无穷) -->
</limit>
<!-- 动力学参数 -->
<dynamics>
<damping>0.1</damping> <!-- 旋转阻尼(防止车轮空转) -->
<friction>0</friction> <!-- 无静摩擦损耗 -->
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness> <!-- 无弹簧效应 -->
</dynamics>
</axis>
</joint>
<!-- 右前轮 -->
<link name='front_right_wheel_link'>
<!-- 相对于右前轮驱动关节的位置(保持对齐) -->
<pose relative_to='front_right_wheel_joint'>0 0 0 0 -0 0</pose>
<!-- 车轮惯性参数(质量20kg) -->
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>20</mass>
<inertia>
<ixx>1.4</ixx> <!-- X轴转动惯量 -->
<iyy>2.5</iyy> <!-- Y轴转动惯量(车轮旋转轴) -->
<izz>1.4</izz> <!-- Z轴转动惯量 -->
</inertia>
</inertial>
<!-- 右前轮碰撞体积 -->
<collision name='front_right_wheel_link_collision'>
<pose>0 0 0 1.5708 -0 0</pose> <!-- 1.5708弧度=90度 -->
<geometry>
<cylinder>
<length>0.3</length> <!-- 轮胎宽度 -->
<radius>0.5</radius> <!-- 轮胎半径 -->
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>1.0</mu> <!-- 静摩擦系数 -->
<mu2>0.8</mu2> <!-- 动摩擦系数 -->
</ode>
</friction>
</surface>
</collision>
<!-- 右前轮可视化模型 -->
<visual name='front_right_wheel_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose>
<geometry>
<cylinder>
<length>0.3</length>
<radius>0.5</radius>
</cylinder>
</geometry>
</visual>
</link>
<!-- 后左轮驱动关节 -->
<joint name='rear_left_wheel_joint' type='revolute'>
<!-- 安装位置(底盘后方左侧,z=0.5m离地高度) -->
<pose relative_to='base_link'>-1.5 1.4 0.5 0 -0 0</pose> <!-- x=-0.945m(底盘后方) -->
<parent>base_link</parent>
<child>rear_left_wheel_link</child>
<axis>
<!-- 旋转轴方向(绕Y轴旋转) -->
<xyz>0 1 0</xyz> <!-- 与前进方向垂直的旋转轴 -->
<!-- 旋转限制 -->
<limit>
<effort>100000</effort> <!-- 最大驱动力矩(100000牛·米) -->
<velocity>10000</velocity> <!-- 最大转速(约9549 RPM) -->
<lower>-1e+16</lower> <!-- 最小角度(接近负无穷) -->
<upper>1e+16</upper> <!-- 最大角度(接近正无穷) -->
</limit>
<!-- 动力学参数 -->
<dynamics>
<damping>0.1</damping> <!-- 旋转阻尼系数 -->
<friction>0</friction> <!-- 无静摩擦损耗 -->
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness> <!-- 无弹簧效应 -->
</dynamics>
</axis>
</joint>
<!-- 后左轮 -->
<link name='rear_left_wheel_link'>
<!-- 相对于后左轮驱动关节的位置(保持对齐) -->
<pose relative_to='rear_left_wheel_joint'>0 0 0 0 -0 0</pose>
<!-- 车轮惯性参数(质量20kg) -->
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>20</mass>
<inertia>
<ixx>1.4</ixx> <!-- X轴转动惯量 -->
<iyy>2.5</iyy> <!-- Y轴转动惯量(车轮旋转轴) -->
<izz>1.4</izz> <!-- Z轴转动惯量 -->
</inertia>
</inertial>
<!-- 后轮碰撞体积 -->
<collision name='rear_left_wheel_link_collision'>
<pose>0 0 0 1.5708 -0 0</pose> <!-- 1.5708弧度=90度 -->
<geometry>
<cylinder>
<length>0.3</length> <!-- 轮胎宽度 -->
<radius>0.5</radius> <!-- 轮胎半径 -->
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>1.0</mu> <!-- 静摩擦系数 -->
<mu2>0.8</mu2> <!-- 动摩擦系数 -->
</ode>
</friction>
</surface>
</collision>
<!-- 后轮可视化模型 -->
<visual name='rear_left_wheel_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose>
<geometry>
<cylinder>
<length>0.3</length>
<radius>0.5</radius>
</cylinder>
</geometry>
</visual>
</link>
<!-- 后右轮驱动关节 -->
<joint name='rear_right_wheel_joint' type='revolute'>
<!-- 安装位置(底盘后方右侧,z=0.5m离地高度) -->
<pose relative_to='base_link'>-1.5 -1.4 0.5 0 -0 0</pose> <!-- x=-0.945m(底盘后方),y=-0.642m(右侧对称) -->
<parent>base_link</parent>
<child>rear_right_wheel_link</child>
<axis>
<!-- 旋转轴方向(绕Y轴旋转) -->
<xyz>0 1 0</xyz> <!-- 与前进方向垂直的旋转轴 -->
<!-- 旋转限制 -->
<limit>
<effort>100000</effort> <!-- 最大驱动力矩(100000牛·米) -->
<velocity>10000</velocity> <!-- 最大转速(约9549 RPM) -->
<lower>-1e+16</lower> <!-- 最小角度(接近负无穷) -->
<upper>1e+16</upper> <!-- 最大角度(接近正无穷) -->
</limit>
<!-- 动力学参数 -->
<dynamics>
<damping>0.1</damping> <!-- 旋转阻尼系数 -->
<friction>0</friction> <!-- 无静摩擦损耗 -->
<spring_reference>0</spring_reference>
<spring_stiffness>0</spring_stiffness> <!-- 无弹簧效应 -->
</dynamics>
</axis>
</joint>
<!-- 后右轮 -->
<link name='rear_right_wheel_link'>
<!-- 相对于后右轮驱动关节的位置(保持对齐) -->
<pose relative_to='rear_right_wheel_joint'>0 0 0 0 -0 0</pose>
<!-- 车轮惯性参数(质量20kg) -->
<inertial>
<pose>0 0 0 0 -0 0</pose>
<mass>20</mass>
<inertia>
<ixx>1.4</ixx> <!-- X轴转动惯量 -->
<iyy>2.5</iyy> <!-- Y轴转动惯量(车轮旋转轴) -->
<izz>1.4</izz> <!-- Z轴转动惯量 -->
</inertia>
</inertial>
<!-- 后轮碰撞体积 -->
<collision name='rear_right_wheel_link_collision'>
<pose>0 0 0 1.5708 -0 0</pose> <!-- 1.5708弧度=90度 -->
<geometry>
<cylinder>
<length>0.3</length> <!-- 轮胎宽度 -->
<radius>0.5</radius> <!-- 轮胎半径 -->
</cylinder>
</geometry>
<surface>
<friction>
<ode>
<mu>1.0</mu> <!-- 静摩擦系数 -->
<mu2>0.8</mu2> <!-- 动摩擦系数 -->
</ode>
</friction>
</surface>
</collision>
<!-- 后轮可视化模型 -->
<visual name='rear_right_wheel_link_visual'>
<pose>0 0 0 1.5708 -0 0</pose>
<geometry>
<cylinder>
<length>0.3</length>
<radius>0.5</radius>
</cylinder>
</geometry>
</visual>
</link>
<!-- 惯性参考系定义 -->
<frame name='inertial_joint' attached_to='base_link'>
<!-- 与底盘基础链接对齐的参考坐标系 -->
<pose>0 0 0 0 -0 0</pose> <!-- 保持与base_link完全一致的位姿 -->
</frame>
<!-- 主要质量参考点 -->
<frame name='main_mass' attached_to='inertial_joint'/>
</model>
</sdf>
四、启动运行小车模型
-
创建模型目录
# 在用户目录下创建模型文件夹 mkdir -p ~/.gazebo/models/four_wheeled_vehicle # 创建模型文件 gedit ~/.gazebo/models/four_wheeled_vehicle/model.sdf将完整SDF代码粘贴到
model.sdf文件中并保存。 -
启动模型
- 启动Gazebo:
gazebo-
在左侧面板点击"Insert"选项卡。
-
在模型列表中找到"four_wheeled_vehicle"并点击。
-
在世界视图中点击放置模型。
-
运行效果:

更多推荐

所有评论(0)