gazebo导入自己的机械臂,未作操作,机械臂缓慢移动
-
最近打算做一个机械臂的末端识别,用的solidworks to urdf把我在solideworks的模型转换成urdf格式,并成功导入到了gazebo中,显示、关节运动都没问题。但前阵子发现机械臂会缓慢运动,影响到了我末端识别的工作。
环境是跟着小鱼的书搭的,ros2 humble和gazebo
试过改动link的质量,但是机械臂还是在移动
大概像这样,机械臂初始位置在(0,0,0)
但是会缓慢移动,这是我未作任何操作,过一会的机械臂位置,可以看到已经明显偏离原点
```
我的模型代码如下:
<?xml version="1.0" ?> <robot name="gangway" xmlns:xacro="http://www.ros.org/wiki/xacro"> <link name="base_footprint"/> <joint name="base_footprint_joint" type="fixed"> <parent link="base_footprint"/> <child link="base_link" /> </joint> <link name="base_link"> <inertial> <origin xyz="0 0 0" rpy="0 0 0" /> <mass value="40.471" /> <inertia ixx="3.6204" ixy="1.2643E-05" ixz="-3.4745E-17" iyy="3.6256" iyz="1.4051E-16" izz="7.0264" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/base_link.STL" /> </geometry> <material name="base"> <color rgba="0.79216 0.81961 0.93333 1" /> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/base_link.STL" /> </geometry> </collision> </link> <link name="frame_link"> <inertial> <origin xyz="0 0 0" rpy="0 0 0" /> <mass value="11.463" /> <inertia ixx="0.07659" ixy="-3.5094E-12" ixz="0.00047682" iyy="0.03119" iyz="-1.916E-06" izz="0.087669" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/frame_link.STL" /> </geometry> <material name="frame"> <color rgba="0.79216 0.81961 0.93333 1" /> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/frame_link.STL" /> </geometry> </collision> </link> <joint name="slew_joint" type="revolute"> <origin xyz="0 0 0" rpy="0 0 0" /> <parent link="base_link" /> <child link="frame_link" /> <axis xyz="0 0 1" /> <limit lower="-2.0944" upper="2.0944" effort="100" velocity="1.0" /> </joint> <link name="mb_link"> <inertial> <origin xyz="0.80877 0.1638 0" rpy="0 0 0" /> <mass value="19.952" /> <inertia ixx="0.22716" ixy="-1.4872E-11" ixz="-1.01E-11" iyy="3.2823" iyz="-3.3077E-12" izz="3.0969" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/mb_link.STL" /> </geometry> <material name="mb"> <color rgba="0.79216 0.81961 0.93333 1" /> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/mb_link.STL" /> </geometry> </collision> </link> <joint name="luff_joint" type="revolute"> <origin xyz="0 0 1.045" rpy="1.5708 0 0" /> <parent link="frame_link" /> <child link="mb_link" /> <axis xyz="0 0 1" /> <limit lower="-0.5236" upper="0.5236" effort="100" velocity="1.0" /> </joint> <link name="tb_link"> <inertial> <origin xyz="-0.91109 -1.1102E-16 0.035776" rpy="0 0 0" /> <mass value="8.7091" /> <inertia ixx="0.020519" ixy="5.4535E-16" ixz="5.4212E-17" iyy="1.9514" iyz="3.3569E-18" izz="1.9652" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/tb_link.STL" /> </geometry> <material name="tb"> <color rgba="0.79216 0.81961 0.93333 1" /> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/tb_link.STL" /> </geometry> </collision> </link> <joint name="telescopic_joint" type="prismatic"> <origin xyz="1.772 0.204 0" rpy="-1.5708 0 0" /> <parent link="mb_link" /> <child link="tb_link" /> <axis xyz="1 0 0" /> <limit lower="0" upper="1.2" effort="100" velocity="1.0" /> </joint> <link name="camera_link"> <inertial> <origin xyz="-0.04 0 0" rpy="0 0 0" /> <mass value="0.512" /> <inertia ixx="0.00054613" ixy="1.4989E-20" ixz="-1.7765E-20" iyy="0.00054613" iyz="-6.5913E-21" izz="0.00054613" /> </inertial> <visual> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/camera_link.STL" /> </geometry> <material name="camera"> <color rgba="0.79216 0.81961 0.93333 1" /> </material> </visual> <collision> <origin xyz="0 0 0" rpy="0 0 0" /> <geometry> <mesh filename="package://gangway_urdf/meshes/camera_link.STL" /> </geometry> </collision> </link> <joint name="camera_joint" type="fixed"> <origin xyz="0.08 0 0" rpy="0 0 0" /> <parent link="tb_link" /> <child link="camera_link" /> <axis xyz="0 0 0" /> </joint> </robot>
-
机械臂在Gazebo中缓慢移动的问题可能由多种因素引起,包括但不限于物理仿真参数设置不当、浮点数精度问题、或者URDF文件中配置错误等。以下是一些排查和解决这个问题的步骤:
-
检查关节摩擦和阻尼:
- 在你的URDF文件中,每个关节(
joint
)的<dynamics>
标签可以设置摩擦(friction
)和阻尼(damping
)系数。这些参数会影响关节在没有外部控制力时的行为。虽然你的URDF中没有明确显示这些参数,但你可以在<joint>
标签内添加它们来尝试解决问题。例如:<dynamics damping="0.01 0.01 0.01" friction="0.01"/>
- 这里
damping
的三个值分别对应线性和角阻尼在X、Y、Z轴上的分量,friction
则对应摩擦系数。
- 在你的URDF文件中,每个关节(
-
验证物理属性:
- 确保所有
<inertial>
标签中的质量和惯性矩阵是正确的。错误的惯性矩阵可能导致不稳定的仿真。 - 检查
<collision>
和<visual>
标签中的几何体是否正确对齐和缩放。
- 确保所有
-
检查外部力和干扰:
- 确认是否有任何外部力(如重力以外的力)作用于机械臂。这可以通过检查Gazebo中的物理世界设置来完成。
- 如果使用了物理引擎的默认重力设置,确保它与你的机械臂模型兼容。
-
浮点数精度问题:
- 数值计算中的浮点数精度问题可能导致微小但可见的漂移。虽然这通常很难完全消除,但可以通过调整仿真步长或增加数值稳定性来改善。
-
仿真步长和物理引擎设置:
- 在Gazebo中,你可以调整仿真步长(
real_time_factor
和sim_time_step
)。尝试调整这些设置看是否能改善机械臂的稳定性。 - 检查Gazebo的物理引擎设置,如ODE或Bullet,看看是否有针对特定行为的调整选项。
- 在Gazebo中,你可以调整仿真步长(
-
使用固定关节测试:
- 暂时将所有活动关节设置为固定(
fixed
)类型,看看机械臂是否仍然移动。这可以帮助确定问题是否源于关节控制或物理仿真。
- 暂时将所有活动关节设置为固定(
-
查看日志和调试信息:
- 检查Gazebo和ROS的日志文件,看是否有关于物理仿真错误的警告或错误信息。
-
更新和兼容性检查:
- 确保你使用的Gazebo和ROS2版本兼容,并且所有相关软件包都是最新的。有时候,软件更新可以解决已知的bug或问题。
通过上述步骤,你应该能够定位问题的原因,并找到相应的解决方案。如果问题仍然存在,可能需要更深入地分析机械臂的模型和Gazebo的物理仿真设置。
以上为生成回答,仅供参考~
-