
我正在使用ROS和python编写一个机器人程序。这个程序可以在ROS旋律上正常运行,但是它会引起AttributeError:模块'moveit_commander‘没有符号上的MoveGroupCommander’,请问这是ros版本的原因吗?有办法结束这一切吗?在这里输入图像描述
这是我的密码
def pick1(self, forward, side, object, euler, nanko):
target_x = forward+0.07
target_y = side
if object == 1:
object_placeX = 0.55
object_placeY = 0.2
elif object == 2:
object_placeX = 0.4
object_placeY = 0.25
elif object == 3:
object_placeX = 0.3
object_placeY = 0.3
else:
sys.exit()
if nanko > 0:
object_placeX -= 0.05
# 左手
left_arm = moveit_commander.MoveGroupCommander("l_arm_waist_group")
left_arm.set_max_velocity_scaling_factor(0.2)
left_gripper = actionlib.SimpleActionClient("/sciurus17/controller2/left_hand_controller/gripper_cmd", GripperCommandAction)
left_gripper.wait_for_server()
gripper_goal = GripperCommandGoal()
gripper_goal.command.max_effort = 2.0
rospy.sleep(0.3)
gripper_goal.command.position = -0.9
left_gripper.send_goal(gripper_goal)
left_gripper.wait_for_result(rospy.Duration(1.0))
# SRDFに定義されている"home"の姿勢にする
left_arm.set_named_target("l_arm_waist_init_pose")
left_arm.go()
gripper_goal.command.position = 0.0
left_gripper.send_goal(gripper_goal)
left_gripper.wait_for_result(rospy.Duration(1.0))
# 掴む準備をする
target_pose = geometry_msgs.msg.Pose()
target_pose.position.x = target_x
target_pose.position.y = target_y
target_pose.position.z = 0.3
q = quaternion_from_euler(-3.14 / 2.0, 0.0, euler) # 上方から掴みに行く場合
target_pose.orientation.x = q[0]
target_pose.orientation.y = q[1]
target_pose.orientation.z = q[2]
target_pose.orientation.w = q[3]
left_arm.set_pose_target(target_pose) # 目標ポーズ設定
left_arm.go() # 実行
# ハンドを開く
gripper_goal.command.position = -0.7
left_gripper.send_goal(gripper_goal)
left_gripper.wait_for_result(rospy.Duration(1.0))
# 掴みに行く
target_pose = geometry_msgs.msg.Pose()
target_pose.position.x = target_x
target_pose.position.y = target_y
target_pose.position.z = 0.11
q = quaternion_from_euler(-3.14 / 2.0, 0.0, euler) # 上方から掴みに行く場合
target_pose.orientation.x = q[0]
target_pose.orientation.y = q[1]
target_pose.orientation.z = q[2]
target_pose.orientation.w = q[3]
left_arm.set_pose_target(target_pose) # 目標ポーズ設定
left_arm.go() # 実行
# ハンドを閉じる
gripper_goal.command.position = -0.3
left_gripper.send_goal(gripper_goal)
left_gripper.wait_for_result(rospy.Duration(1.0))
# 持ち上げる
target_pose = geometry_msgs.msg.Pose()
target_pose.position.x = target_x
target_pose.position.y = target_y
target_pose.position.z = 0.3
q = quaternion_from_euler(-3.14 / 2.0, 0.0, euler) # 上方から掴みに行く場合
target_pose.orientation.x = q[0]
target_pose.orientation.y = q[1]
target_pose.orientation.z = q[2]
target_pose.orientation.w = q[3]
left_arm.set_pose_target(target_pose) # 目標ポーズ設定
left_arm.go() # 実行
# 移動する
target_pose = geometry_msgs.msg.Pose()
target_pose.position.x = object_placeX
target_pose.position.y = object_placeY
target_pose.position.z = 0.3
q = quaternion_from_euler(-3.14 / 2.0, 0.0, 0.0) # 上方から掴みに行く場合
target_pose.orientation.x = q[0]
target_pose.orientation.y = q[1]
target_pose.orientation.z = q[2]
target_pose.orientation.w = q[3]
left_arm.set_pose_target(target_pose) # 目標ポーズ設定
left_arm.go() # 実行
# 下ろす
target_pose = geometry_msgs.msg.Pose()
target_pose.position.x = object_placeX
target_pose.position.y = object_placeY
target_pose.position.z = 0.14
q = quaternion_from_euler(-3.14 / 2.0, 0.0, 0.0) # 上方から掴みに行く場合
target_pose.orientation.x = q[0]
target_pose.orientation.y = q[1]
target_pose.orientation.z = q[2]
target_pose.orientation.w = q[3]
left_arm.set_pose_target(target_pose) # 目標ポーズ設定
left_arm.go() # 実行
# ハンドを開く
gripper_goal.command.position = -0.7
left_gripper.send_goal(gripper_goal)
left_gripper.wait_for_result(rospy.Duration(1.0))
# 少しだけハンドを持ち上げる
target_pose = geometry_msgs.msg.Pose()
target_pose.position.x = object_placeX
target_pose.position.y = object_placeY
target_pose.position.z = 0.2
q = quaternion_from_euler(-3.14 / 2.0, 0.0, 0.0) # 上方から掴みに行く場合
target_pose.orientation.x = q[0]
target_pose.orientation.y = q[1]
target_pose.orientation.z = q[2]
target_pose.orientation.w = q[3]
left_arm.set_pose_target(target_pose) # 目標ポーズ設定
left_arm.go() # 実行
# SRDFに定義されている"home"の姿勢にする
left_arm.set_named_target("l_arm_waist_init_pose")
left_arm.go()
print("done")发布于 2022-09-14 23:51:15
它在不同版本之间工作不同的原因是,诺亚使用Python3,旋律使用Python2.7。这里的一个关键区别是它们如何处理导入,因此您会遇到问题。确保在您的脚本顶部有:
import moveit_commander如果这不起作用,那就意味着您需要通过:sudo apt install ros-noetic-moveit安装moveit的注解版本。
https://stackoverflow.com/questions/73703077
复制相似问题