MoveIt中“Plan”和“Execute”,Gazebo中的机械臂没有响应

MoveIt中“Plan”和“Execute”,Gazebo中的机械臂没有响应
报错:

[ INFO] [1742396803.648989791, 36.142400000]: Returned 0 controllers in list
[ERROR] [1742396803.649011737, 36.142400000]: Unable to identify any set of controllers that can actuate the specified joints: [ joint1 joint2 joint3 joint4 joint5 joint6 ]
[ERROR] [1742396803.649026625, 36.142400000]: Known controllers and their joints:

[ INFO] [1742396803.657110804, 36.150400000]: ABORTED: CONTROL_FAILED

网上试了各种方法,都行不通
最后发现是pinocchio版本,要安装 2.6.19 或2.7.0

参考:https://github.com/unitreerobotics/z1_ros/issues/11

### 问题分析 该错误 `[ERROR] Unable to identify any set of controllers that can actuate the specified joints` 表明 ROS 控制器管理器未能找到可以驱动指定关节的控制器。这通常发生在 MoveItGazebo 的仿真环境中,可能由多种原因引起。 以下是可能导致此错误的原因以及解决方案: --- ### 原因与解决方法 #### 1. **未加载正确的控制器配置** 如果 `controller.yaml` 文件中的控制器定义不匹配实际使用的机器人模型,则可能会导致此错误。 - 确认 `controller.yaml` 中的控制器名称及其关联的关节列表是否正确。 - 如果使用的是 `joint_state_controller/JointStateController` 或其他类型的控制器(如 `effort_controllers/JointEffortController`),需确保这些控制器已正确定义并启动。 ```yaml # controller.yaml 示例 controller_manager_ns: controller_manager controller_list: - name: arm_controller action_ns: follow_joint_trajectory type: FollowJointTrajectory default: true joints: - joint1 - joint2 - joint3 - joint4 - joint5 - joint6 ``` 确认以上文件路径被正确加载到参数服务器中[^1]。 --- #### 2. **缺少必要的插件描述** ROS 控制器依赖于 `hardware_interface` 插件来实现硬件接口的功能。如果没有正确声明插件类型或其功能包缺失,也会引发此类错误。 - 检查 `robot_description` 是否包含 `<transmission>` 标签,并验证它是否指定了对应的关节执行机构。 - 在 URDF/XACRO 文件中添加以下内容以支持模拟环境下的控制: ```xml <plugin filename="gazebo_ros_control/ControlSystem.so" name="gazebo_ros_control"/> <gazebo> <plugin name="gazebo_ros_control" filename="libgazebo_ros_control.so"> <robotNamespace>/</robotNamespace> </plugin> </gazebo> ``` 此外,还需确保安装了相关软件包,例如 `ros-control`, `ros-gazebo-pkgs` 等[^2]。 --- #### 3. **控制器未成功初始化** 即使配置无误,但如果某些控制器未能正常启动,仍然会触发类似的错误消息。可以通过运行以下命令检查当前活动状态: ```bash rosservice call /controller_manager/list_controllers ``` 理想情况下,应看到目标控制器处于 `state: 'active'` 状态。如果不是这样,请尝试重新加载它们: ```bash rosservice call /controller_manager/load_controller "arm_controller" rosservice call /controller_manager/unload_controller "old_arm_controller" rosservice call /controller_manager/switch_controller "{start_controllers: ['arm_controller'], stop_controllers: [], strictness: 2}" ``` 注意替换 `"arm_controller"` 为你自己的具体名字[^3]。 --- #### 4. **MoveIt 配置冲突** 当 MoveIt 使用的规划组 (Planning Group) 定义与其所期望的动作服务 (`action server`) 不一致时,也可能抛出这种异常提示。因此建议仔细核对 SRDF 文件内的子标签部分是否有遗漏或者拼写失误之处;同时调整 launch 文件里关于 move_group 节的相关属性设置使之兼容最新版本框架需求特[^4]。 --- ### 总结代码片段 下面提供一段完整的 Launch 文件模板供参考: ```xml <?xml version="1.0"?> <launch> <!-- 加载机器人描述 --> <param name="robot_description" command="$(find xacro)/xacro $(arg urdf_file)" /> <!-- 启动 Gazebo 并导入世界场景 --> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="world_name" value="$(find your_package)/worlds/your_world.world" /> <arg name="paused" value="false" /> <arg name="use_sim_time" value="true" /> </include> <!-- 将机器人放入仿真环境 --> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model robot -param robot_description" output="screen"/> <!-- 初始化 ros_control --> <rosparam param="/robot_description" command="load" file="$(find your_package)/config/controller.yaml" /> <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false" output="screen" ns="/" args="arm_controller --shutdown-timeout 3"/> </launch> ``` --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺躺11

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值