首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ROS AttributeError:模块'moveit_commander‘没有属性'MoveGroupCommander’

ROS AttributeError:模块'moveit_commander‘没有属性'MoveGroupCommander’
EN

Stack Overflow用户
提问于 2022-09-13 12:30:30
回答 1查看 120关注 0票数 2

我正在使用ROS和python编写一个机器人程序。这个程序可以在ROS旋律上正常运行,但是它会引起AttributeError:模块'moveit_commander‘没有符号上的MoveGroupCommander’,请问这是ros版本的原因吗?有办法结束这一切吗?在这里输入图像描述

这是我的密码

代码语言:javascript
复制
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")
EN

回答 1

Stack Overflow用户

发布于 2022-09-14 23:51:15

它在不同版本之间工作不同的原因是,诺亚使用Python3,旋律使用Python2.7。这里的一个关键区别是它们如何处理导入,因此您会遇到问题。确保在您的脚本顶部有:

代码语言:javascript
复制
import moveit_commander

如果这不起作用,那就意味着您需要通过:sudo apt install ros-noetic-moveit安装moveit的注解版本。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73703077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档