运行环境:ROS操作系统
需要安装:VMware Workstation Pro
系列文章目录
[机器人机构学]课设四:moveit配置及python接口控制
文章目录
一、moveit是什么?
MoveIt! 是ROS系统中集合了与移动操作相关的组件包的运动规划库。它包含了运动规划中所需要的大部分功能,同时其提供友好的配置和调试界面便于完成机器人在ROS系统上的初始化及调试,其具体架构如下图所示:
(1)move_group: move_group是MoveIt!的核心部分,它的功能在于集成机器人的各独立模块并为用户提供一系列的动作指令和服务。其本身并不具备太多的功能,起到的是积分器的作用,完成各功能包和插件的集成。
(2)场景规划(Planning Scene): 通过场景规划,用户可以创建一个具体的工作环境或者加入障碍物。
(3)运动规划(motion panning): 在MoveIt!中,运动规划器起的作用是实现运动规划算法,其以插件的方式通过ROS的pluginlib接口完成信息的通讯,根据需求可制作或选用不同的规划算法。
(4)运动学(Kinematics): 运动学算法是机械臂控制算法中的核心内容,其中包括正运动学算法和逆运动学算法,在MoveIt!中,运动学算法同样以插件的形式完成于ROS的集成,因此可根据实际需求,编写自己的运动学算法来控制机器人。
(5)碰撞检测(collision checking): 为避免机器人自身或者和环境发生干涉导致意外的发生,在进行运动规划时碰撞检测是必不可少的一部分,在MoveIt!中,采用FCL(Flexible Collision Library)进行对象碰撞的运算。
(6)开源运动规划库(open motion planning library): OMPL是一个的开源的C++库,主要用于运动规划,其中包含了大量用于运动规划的先进算法。该库中的算法以采样规划算法为主,通过其可以实现不同目标点之间的路径规划。
二、操作步骤
1.打开moveit_setup_assistant
同时按住ctrl+alt键,再按住t键,打开一个终端,输入
roscore
再用同样的方法打开一个新终端,依次输入
cd /home/你的用户名/catkin_ws
source ./devel/setup.bash
roslaunch moveit_setup_assistant setup_assistant.launch
此时会出现一个GUI界面
2.配置setup_assistant
(1)创建一个新的moveit配置包
此时可以在gui界面的右侧预览你的机械臂模型。
(2)设置自碰撞检测
其中sampling density(采样密度)越低,运行速度越快,结果越不精细,反之则相反,一般使用默认参数。下面的表格可以设置是否碰撞有效,一般也不用修改。
(3)添加虚拟关节
即将机械臂的base_link坐标系固定在大地上,小车等移动机器人不需要设置
(4)添加规划组
添加手臂arm和手hand两个规划组
(5)添加机器人位姿
至少添加两个位置,起始位姿home和抓取位姿1
同样的方法新建其他几个pose
(6)添加末端执行器
(7)设置活动关节(没有被动关节则不需要设置)
(8)添加控制器
(9)配置gazebo仿真
此时即可打开urdf文件,复制粘贴,替换原理的字符内容
(10)配置3D感知(课设中用不到)
moveit官网有详细的配置介绍
(11)填入作者信息
(12)生成moveit功能包
3.打开rviz界面测试
CTRL+ALT+T打开一个新的终端,依次输入
cd /home/你的用户名/catkin_ws
source ./devel/setup.bash
roslaunch moveit demo.launch
其中roslaunch moveit demo.launch中的moveit应改为你自己创建的moveit功能包名。
此时会出现rviz的展示界面。
三、python脚本控制
CTRL+ALT+T打开一个新的终端,依次输入
cd /home/你的用户名/catkin_ws/src
catkin_create_pkg move2 std_msgs rospy roscpp
cd move2
mkdir script
cd script
sudo gedit move2.py
在脚本中写python代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#created by wzl
import rospy, sys
import moveit_commander
from geometry_msgs.msg import PoseStamped, Pose
class MoveItIkDemo:
def __init__(self):
# 初始化move_group的API
moveit_commander.roscpp_initialize(sys.argv)
# 初始化ROS节点
rospy.init_node('monitored_planning_scene')
# 初始化需要使用move group控制的机械臂中的arm group
arm = moveit_commander.MoveGroupCommander('arm')
# 获取终端link的名称
#end_effector_link = arm.get_end_effector_link()
# 设置目标位置所使用的参考坐标系
reference_frame = 'base_link'
arm.set_pose_reference_frame(reference_frame)
# 当运动规划失败后,允许重新规划
arm.allow_replanning(True)
# 设置位置(单位:米)和姿态(单位:弧度)的允许误差
arm.set_goal_position_tolerance(1)
arm.set_goal_orientation_tolerance(1)
joint_goal = arm.get_current_joint_values()
print('joint_goal:',joint_goal)
# 设置允许的最大速度和加速度
arm.set_max_acceleration_scaling_factor(1)
arm.set_max_velocity_scaling_factor(1)
# 控制机械臂先回到初始化位置
arm.set_named_target('home')
arm.go()
rospy.sleep(1)
# 设置机械臂工作空间中的目标位姿,位置使用x、y、z坐标描述,
# 姿态使用四元数描述,基于base_link坐标系
target_pose = PoseStamped()
target_pose.header.frame_id = reference_frame
target_pose.header.stamp = rospy.Time.now()
target_pose.pose.position.x = 0.593
target_pose.pose.position.y = 1.0636
target_pose.pose.position.z = 0.7787
target_pose.pose.orientation.x = 0.70692
target_pose.pose.orientation.y = 1.57
target_pose.pose.orientation.z = 0.0
target_pose.pose.orientation.w = 1.57
# 设置机器臂当前的状态作为运动初始状态
arm.set_start_state_to_current_state()
# 设置机械臂终端运动的目标位姿
#arm.set_pose_target(target_pose, end_effector_link)
arm.set_pose_target(target_pose)
# 规划运动路径
traj = arm.plan()
# 按照规划的运动路径控制机械臂运动
arm.execute(traj)
rospy.sleep(1)
# 控制机械臂回到初始化位置
arm.set_named_target('home')
arm.go()
# 关闭并退出moveit
moveit_commander.roscpp_shutdown()
moveit_commander.os._exit(0)
if __name__ == "__main__":
MoveItIkDemo()
保存并退出,在终端中输入
sudo chmod 777 move2.py
CTRL+ALT+T打开一个新的终端,依次输入
cd /home/你的用户名/catkin_ws
source ./devel/setup.bash
rosrun move2 move2.py
此时你可以看到你的机械臂末端执行器运动到你设置的xyz点
<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="Co3aGXuj-1734927144251" src="https://player.bilibili.com/player.html?aid=113700132360627"></iframe>moveit配置及python接口控制
总结
例如:本篇简单介绍了moveit的架构,配置步骤,及运行python控制机械臂运动。此系列文章到这里就结束了,后续仍会完善和改进,有不妥之处和建议还请提出,下期再见。
标签:set,target,课设,python,setup,pose,arm,moveit From: https://blog.csdn.net/m0_73052218/article/details/144608178