首页 > 编程语言 >[机器人机构学]课设四:moveit配置及python接口控制

[机器人机构学]课设四:moveit配置及python接口控制

时间:2024-12-24 13:26:35浏览次数:11  
标签:set target 课设 python setup pose arm moveit

运行环境:ROS操作系统
需要安装:

VMware Workstation Pro

ROS操作系统

不想自己安装ROS的看这里

系列文章目录

[机器人机构学]课设一:通过杆件四大参数确定机械臂模型

[机器人机构学]课设二:三维建模及爆炸图动画制作

[机器人机构学]课设三:SOLIDWORKS模型转URDF

[机器人机构学]课设四: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

相关文章

  • Python机器学习笔记(十一、特征提取)
    特征提取PCA的另一个应用是特征提取。特征提取背后的思想是,可以找到一种数据表示,比给定的原始表示更适合于分析。特征提取很有用,它的一个很好的应用实例就是图像。图像由像素组成,通常存储为红绿蓝(RGB)强度。图像中的对象通常由上千个像素组成,它们只有放在一起才有意义。现在......
  • python web知识点梳理
    目录1、第1章Django概述(1)环境搭建:需要安装django,使用国内镜像(2)创建项目和应用2、第2章路由系统(1)路由工作原理:(2)内置路由转换器(3)路由分发:include函数(4)向视图传递额外参数(5)命名空间①URL命名和reverse解析函数②应用命名空间,app_name属性3、第3章模型(1)定义和使......
  • (2024最新毕设合集)基于SpringBoot的小说在线阅读网咖+86615|可做计算机毕业设计JAVA、P
    目 录摘要1绪论1.1 选题背景1.2研究内容1.3本文的组织结构2相关技术介绍2.1MySQL数据库2.2Java编程语言2.3SpringBoot框架介绍3 系统需求分析与设计3.1可行性分析3.1.1技术可行性分析3.1.2经济可行性分析3.1.3法律可行性分析3.2需......
  • 利用Python爬虫快速获取商品历史价格信息
    在电商时代,商品价格波动频繁,对于消费者和市场分析师来说,掌握商品的历史价格信息至关重要。这不仅能够帮助消费者做出更明智的购买决策,还能为市场趋势分析提供数据支持。本文将介绍如何使用Python爬虫技术快速获取商品的历史价格信息,并进行初步分析。Python爬虫技术简介Pytho......
  • 【Python GUI 编程】tkinter:Ttk 进度条 Progressbar
    在本文中,将介绍TkinterProgressbar进度条小部件。Progressbar进度条小部件向用户提供长时间运行任务时的进度反馈。要创建Progressbar进度条小部件,请使用以下构造函数:ttk.Progressbar(container,orient,length,mode)主要参数如下:进度条模式determinate模式:进度......
  • 【Python GUI 编程】tkinter :Ttk 小部件
    在本文中,将介绍Tkinter.ttk主题小部件,是常规Tkinter小部件的升级版本。Tkinter有两种小部件:经典小部件、主题小部件。Tkinter于1991年推出了经典小部件,2007年在Tk8.5中添加新式的主题小部件。主题小部件更新了部分经典小部件,并增加了部分新的小部件。要使用tkinter.tt......
  • 【Python GUI 编程】tkinter :Ttk 树视图 Treeview
    在本文中,将介绍TkinterTreeview树视图小部件以及如何使用它来显示表格和分层数据。Tkinter中,没有专门的表格部件,Treeview可以很好地显示表格数据,支持多列显示。要创建Treeview树视图小部件,可以使用以下构造函数:tree=ttk.Treeview(master,**options)Treeview显示表......
  • webshell-decryptor:一款使用python tkinter进行GUI开发的Webshell自动解密流量分析工
    免责声明该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。工具介绍webshell-decryptor是一款使用pythontkinter进行GUI开发的Webshell自动解密流量分析工具,可通过获取到的webshell......
  • Python TypeError: list和list之间不支持减法操作
    在本文中,我们将介绍Python中的TypeError错误,特别是在进行列表相减时出现的TypeError:unsupportedoperandtype(s)for-:‘list’and‘list’错误。我们将深入探讨这个错误的原因,并提供一些解决这个错误的方法。 了解TypeError错误TypeError是Python中常见的错误类型之一......
  • python 个人微信自动回复(Windows GUI自动化)
    #根据预定的csv数据自动回复importtimeimportnumpyasnpimportpandasaspd#匹配回复数据fromuiautomationimportWindowControl#用于WindowsGUI自动化target_name="老婆"defwxListent():#通过pd读取数据df=pd.read_csv('回复数据.csv',en......