ROS机械臂关节空间中的正运动

机械臂moveit编程(python)

程序流程:
1.初始化需要控制的规划组;
2.设置运动约束(可选);
3.设置目标位姿(关节空间 or 笛卡尔空间);
4.使用moveit规划一条到达目标的轨迹;
5.修改轨迹(如速度参数);
6.执行规划出的轨迹。

关节空间中的正运动

程序如下


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import rospy, sys
import moveit_commander
from control_msgs.msg import GripperCommand 

class MoveItFkDemo:
    def __init__(self):
        # 初始化move_group的API
        moveit_commander.roscpp_initialize(sys.argv)

        # 初始化ROS节点
        rospy.init_node('moveit_fk_demo', anonymous=True)
 
        # 初始化需要使用move group控制的机械臂中的arm group
        probot_arm = moveit_commander.MoveGroupCommander('arm')
        gripper = moveit_commander.MoveGroupCommander('gripper')
        
        # 设置机械臂运动的允许误差值
        probot_arm.set_goal_joint_tolerance(0.001)
		gripper.set_goal_joint_tolerance(0.001)
        # 设置允许的最大速度和加速度
        probot_arm.set_max_acceleration_scaling_factor(0.5)
        probot_arm.set_max_velocity_scaling_factor(0.5)
        
        # 控制机械臂先回到初始化位置
        probot_arm.set_named_target('home')
        probot_arm.go()
        rospy.sleep(1)
         
        # 设置机械臂的目标位置,使用六轴的位置数据进行描述(单位:弧度)
        joint_positions = [0.391410, -0.676384, -0.376217, 0.0, 1.052834, 0.454125]
        probot_arm.set_joint_value_target(joint_positions)
                 
        # 控制机械臂完成运动
        probot_arm.go()
        rospy.sleep(1)

        # 控制机械臂先回到初始化位置
        probot_arm.set_named_target('home')
        probot_arm.go()
        rospy.sleep(1)
        
        # 关闭并退出moveit
        moveit_commander.roscpp_shutdown()
        moveit_commander.os._exit(0)

if __name__ == "__main__":
    try:
        MoveItFkDemo()
    except rospy.ROSInterruptException:
        pass

重点API:

moveit_commander.roscpp_initialize(sys.argv)
rospy.init_node('moveit_fk_demo', anonymous=True)

1.首先第一步初始化move_group 和 ros节点。

probot_arm = moveit_commander.MoveGroupCommander('arm')

2.第二步初始化需要用move_group控制的arm规划组。

probot_arm.set_goal_joint_tolerance(0.001)
probot_arm.set_max_acceleration_scaling_factor(0.5)
probot_arm.set_max_velocity_scaling_factor(0.5)

3.第三步设置运动约束:误差、最大速度和最大加速度。

arm.set_named_target('home')
arm.go()
rospy.sleep(1)
               
joint_positions = [0.391410, -0.676384, -0.376217, 0.0, 1.052834, 0.454125]
arm.set_joint_value_target(joint_positions)
arm.go()
rospy.sleep(1)

arm.set_named_target('home')
arm.go()
rospy.sleep(1)

4.第四步设置目标位姿:home —— 六个关节的弧度(关节空间)—— home。
用set_named_target 和 set_joint_value_target 设置位姿。
arm.go()执行规划轨迹。

moveit_commander.roscpp_shutdown()
moveit_commander.os._exit(0)

5.第五步关闭并退出move_group并退出。

下图为运动结果:机器人先回到home位姿,然后运动到指定位姿,在回到home位姿
ROS机械臂关节空间中的正运动_第1张图片

你可能感兴趣的:(ROS机械臂关节空间中的正运动)