You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MoveIt接口控制UR5机器人?代码报错求助

问题修复方案

1. 解决AttributeError: 'MoveRobotNode' object has no attribute 'move_group'

代码中__init__方法里创建的move_group是局部变量,没有绑定为类实例属性,导致go_to_joint_state方法无法通过self.move_group访问。修改方式:将__init__中的局部变量改为实例属性:

def __init__(self):
    moveit_commander.roscpp_initialize(sys.argv)
    rospy.init_node("move_robot_node", anonymous=True)

    self.robot = moveit_commander.RobotCommander()
    self.scene = moveit_commander.PlanningSceneInterface()
    group_name = "manipulator"
    self.move_group = moveit_commander.MoveGroupCommander(group_name)

2. 解决tau未定义错误

代码使用了tau但未定义,tau代表2π,需要导入math模块并定义该变量:
在代码开头添加:

import math
tau = 2 * math.pi

3. 处理运动学求解器警告

警告提示运动学求解器不再支持尝试次数参数,仅支持超时设置,可通过两种方式处理:

  • 临时删除参数:运行代码前在终端执行
rosparam delete /robot_description_kinematics/manipulator/kinematics_solver_attempts
  • 永久删除参数:找到UR5的运动学配置文件(通常在ur5_moveit_config/config/kinematics.yaml),删除kinematics_solver_attempts对应的行。

修复后的完整代码

#!/usr/bin/env python3

import sys
import copy
import rospy
import math
import moveit_commander
import moveit_msgs.msg
import geometry_msgs.msg

tau = 2 * math.pi

class MoveRobotNode():
    """MoveRobotNode"""

    def __init__(self):
        moveit_commander.roscpp_initialize(sys.argv)
        rospy.init_node("move_robot_node", anonymous=True)

        self.robot = moveit_commander.RobotCommander()
        self.scene = moveit_commander.PlanningSceneInterface()

        group_name = "manipulator"
        self.move_group = moveit_commander.MoveGroupCommander(group_name)

    def go_to_joint_state(self):
        move_group = self.move_group

        joint_goal = move_group.get_current_joint_values()
        joint_goal[0] = 0
        joint_goal[1] = -tau / 8
        joint_goal[2] = 0
        joint_goal[3] = -tau / 4
        joint_goal[4] = 0
        joint_goal[5] = tau / 6  # 1/6 of a turn
        joint_goal[6] = 0

        move_group.go(joint_goal, wait=True)
        move_group.stop()

if __name__ == "__main__":
    try:
        robot_control = MoveRobotNode()
        robot_control.go_to_joint_state()
    except rospy.ROSInterruptException:
        pass

内容的提问来源于stack exchange,提问作者Mali

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:21:57