ROS Noetic中moveit_commander无MoveGroupCommander属性问题求助
ROS Melodic到Noetic迁移:moveit_commander.MoveGroupCommander属性错误解决
问题原因
是ROS版本差异导致的。ROS Noetic对moveit_commander的模块结构做了调整:
- 在Melodic(Python2环境)中,
MoveGroupCommander直接属于moveit_commander根模块; - 但在Noetic(Python3环境)中,
MoveGroupCommander被移到了moveit_commander.move_group子模块下,直接调用moveit_commander.MoveGroupCommander就会触发AttributeError。
解决办法
1. 调整导入方式
将原来的导入语句:
import moveit_commander
替换为以下两种方式之一:
- 直接导入需要的类:
from moveit_commander import MoveGroupCommander - 保留原导入,使用子模块路径调用:
import moveit_commander
2. 修改实例化代码
对应导入方式,修改代码中实例化MoveGroupCommander的行:
- 如果用直接导入类的方式,修改为:
left_arm = MoveGroupCommander("l_arm_waist_group") - 如果保留原导入,修改为:
left_arm = moveit_commander.move_group.MoveGroupCommander("l_arm_waist_group")
3. 额外检查事项
- 确保Noetic环境下已正确安装moveit_commander包:
sudo apt install ros-noetic-moveit-commander - 由于Noetic使用Python3,检查代码中是否存在Python2到Python3的语法差异(比如字符串编码、print语句等),你的代码中
print("done")已经符合Python3要求,无需修改。
修改后的关键代码片段
# 导入调整示例(二选一) from moveit_commander import MoveGroupCommander # 或者 import moveit_commander def pick1(self, forward, side, object, euler, nanko): # ... 其他代码不变 ... # 左手实例化修改 left_arm = MoveGroupCommander("l_arm_waist_group") # 对应直接导入的方式 # 或者 left_arm = moveit_commander.move_group.MoveGroupCommander("l_arm_waist_group") # ... 后续代码不变 ...
内容的提问来源于stack exchange,提问作者Wuxx959
相关产品推荐
相关产品推荐

