ROS机器人控制器已上传但无法正常工作,请求故障排查
问题描述
我使用ROS URDF设计了一款机器人,已上传控制器但无法按预期运行,相关文件如下,希望能定位错误所在。
相关文件
URDF文件(mrm.urdf)
<robot name="mrm"> <link name="world"/> <link name="base_link"> <visual> <geometry> <box size="1 1 1"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> </visual> <collision> <geometry> <box size="1 1 1"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0"/> </collision> <inertial> <origin rpy="0 0 0" xyz="0 0 0"/> <mass value=" 1024.0"/> <inertia ixx="170.667" ixy="0" ixz="0" iyy="170.667" iyz="0" izz="170.667"/> </inertial> </link> <joint name="fixed" type="fixed"> <parent link="world"/> <child link="base_link"/> </joint> <joint name="joint_1" type="revolute"> <axis xyz="0 0 1"/> <parent link="base_link"/> <child link="link_1"/> <origin rpy="0 0 0" xyz="0.0 0.0 0.5"/> <limit effort="1000" lower="-3.14" upper="3.14" velocity="0.5" /> </joint> <link name="link_1"> <visual> <geometry> <cylinder radius="0.4" length="0.35"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0.2"/> </visual> <collision> <geometry> <cylinder radius="0.4" length="0.35"/> </geometry> <origin rpy="0 0 0" xyz="0 0 0.2"/> </collision> <inertial> <origin rpy="0 0 0" xyz="0 0 0.2"/> <mass value="157.633"/> <inertia ixx="13.235" ixy="0" ixz="0" iyy="13.235" iyz="0" izz="9.655"/> </inertial> </link> <joint name="joint_2" type="revolute"> <axis xyz="0 1 0"/> <parent link="link_1"/> <child link="link_2"/> <origin rpy="0 0 0" xyz="0.0 0.0 0.4"/> <limit effort="1000" lower="0" upper="0.5" velocity="0.5" /> </joint> <link name="link_2"> <inertial> <origin rpy="0 0 0" xyz="0 0 0.4"/> <mass value="57.906"/> <inertia ixx="12.679" ixy="0" ixz="0" iyy="12.679" iyz="0" izz="0.651"/> </inertial> <visual> <geometry> <cylinder radius="0.15" length="0.8" /> </geometry> <origin rpy="0 0 0" xyz="0 0 0.4"/> </visual> <collision> <geometry> <cylinder radius="0.15" length="0.8" /> </geometry> <origin rpy="0 0 0" xyz="0 0 0.4"/> </collision> </link> <transmission name ="trans_1"> <type>transmission_interface/SimpleTransmission</type> <joint name="joint_1"> <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> </joint> <actuator name="motor_1"> <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> <mechanicalReduction>1</mechanicalReduction> </actuator> </transmission> <transmission name ="trans_2"> <type>transmission_interface/SimpleTransmission</type> <joint name="joint_2"> <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> </joint> <actuator name="motor_2"> <hardwareInterface>hardware_interface/EffortJointInterface</hardwareInterface> <mechanicalReduction>1</mechanicalReduction> </actuator> </transmission> <gazebo> <plugin name="control" filename="libgazebo_ros_control.so"/> </gazebo> </robot>
配置文件(effort.yaml)
joint_1_controller: type: "effort_controllers/JointPositionController" joint: joint_1 pid: {p: 700.0, i: 50.0, d: 70.0} joint_2_controller: type: "effort_controllers/JointPositionController" joint: joint_2 pid: {p: 700.0, i: 50.0, d: 70.0}
启动文件(effort.launch)
<param name="robot_description" textfile="$(find mrm_desp)src/urdf/mrm.urdf"/> <include file="$(find gazebo_ros)/launch/empty_world.launch" /> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model mrm_desp" /> <rosparam file="$(find mrm_desp)src/config/effort.yaml"/> <node name="Controller_Spawner" pkg="controller_manager" type="spawner" args="joint_1_controller joint_2_controller" />
排查建议
- 路径合法性检查:确认launch文件中URDF和yaml的路径是否正确。ROS包的资源文件通常直接放在包根目录的
urdf/、config/文件夹下,而非src/子目录(src/一般存放源码),可尝试将路径改为$(find mrm_desp)/urdf/mrm.urdf和$(find mrm_desp)/config/effort.yaml。 - 控制器启动时机:模型在Gazebo中加载需要时间,若控制器先于模型完成加载会失败。可给Controller_Spawner节点添加延迟启动,比如
launch-prefix="sleep 5 && ",或者设置respawn="true"让节点自动重试。 - PID参数调试:当前PID参数(P=700)可能过大,导致关节震荡或无法稳定跟踪目标。先调低P值(如200)测试,根据关节运动情况逐步调整。
- URDF惯性参数验证:检查各link的惯性参数是否与模型质量分布匹配,尤其是link_2的惯性张量是否符合圆柱体的惯性计算逻辑。
- 关节限位检查:joint_2的运动范围是0~0.5弧度,发送目标位置时不要超出该范围,避免控制器触发限位保护。
- 日志分析:用
roslaunch mrm_desp effort.launch --screen启动,查看终端输出的错误日志,重点关注控制器加载失败、URDF解析错误、硬件接口不匹配的提示信息。
内容的提问来源于stack exchange,提问作者Aishwarya Palit
相关产品推荐
相关产品推荐

