实际的机械臂控制(9)Moveit单独控制机械臂末端在XYZ三个轴的平移和旋转(基于python)

2023-11-16

0. 序言

在moveit中,控制机械臂的末端执行器运动的API有两个,分别是:

  1. shift_pose_target
  2. set_pose_target

第一个API:shift_pose_target

其实这个函数在旋转角度这块并不会得到让大家满意的结果,因为控制末端执行器的角度往往会让机械臂六个关节都作出很大的调整来,因此这个过程往往不是大家想象的那种末端执行器只简单的旋转一下,而是整个机械臂都在动。

group_name.shift_pose_target(DOF_Index, DOF_moveit_value, end_link_name)

一个个分析
group_name时你的规划组的名字。就比如,我用的规划组的名字是 arm
那么我调用这个API时就是:


arm.shift_pose_target(1, -0.05, end_link_name)

下面来主要分析shift_pose_target这个API

第一个参数:DOF_Index

DOF_Index={0,1,2,3,4,5}分别表示沿着世界坐标系的xyz三个轴方向的平移与绕着世界坐标系的zyx三个轴旋转
需要注意的是,六个自由度,是分方向的,比如在X轴上的运动,平移应该是可以左右平移的,旋转应该是也可以左右旋转的。
因此,可以参考第二个参数。

第二个参数:DOF_moveit_value

第二个参数用于控制在这六个自由度上面的移动或旋转的量,单位为m或者弧度。
这个分量是有正负号的,还是以X轴为例,就拿平移来说,当DOF_moveit_value = 0.01时,控制机械臂向x轴正方向平移1cm(记住单位是m)。当DOF_moveit_value = -0.01时,控制机械臂向x轴正负向平移1cm。
目前,只知道移动,可能也知道是末端执行其,但是如何指定呢?
这就涉及到第三个参数了

第三个参数:end_link_name

首先,我们获取我们想控制的link的名称,一般来讲,我们都是控制末端执行器的运动,因此可以直接调用下面这个函数

end_effector_link = arm.get_end_effector_link()

其中,end_link_name = end_effector_link

第四点需要注意的

需要注意的是,在这里移动的方向都是以机械臂的当前点为基础,以base_link为参考。也就是以一般是用机械臂基坐标系或者世界坐标系为参考。所以想要实现的效果一般可以满足大多数人的要求。

第二个API:set_pose_target

arm.set_pose_target(target_pose, end_effector_link)

这个set_pose_target是以一种打包的方式直接运行的,也就是说它输入的是一个完整的位姿:目标点的坐标xyx以及要求的姿态。
需要指出的是,set_pose_target也是可以控制末端执行器在xyz三个轴上的平移运动,但是无法控制旋转运动。
与上面的shift_pose_target不一样,shift_pose_target主要做的是单个自由度的移动。

具体看一下这个set_pose_target()的参数,前面的arm就不介绍了,是规划组的名字
后面的end_effector_link也不多说了,是要移动的关节的名字。

看看这个target_pose

		target_pose = PoseStamped()
        target_pose.header.frame_id = reference_frame
        target_pose.header.stamp = rospy.Time.now()     
        target_pose.pose.position.x = 0.2593
        target_pose.pose.position.y = 0.0636
        target_pose.pose.position.z = 0.1787
        target_pose.pose.orientation.x = 0.70692
        target_pose.pose.orientation.y = 0.0
        target_pose.pose.orientation.z = 0.0
        target_pose.pose.orientation.w = 0.70729

在上面的好多代码中,四元素修(pose.orientation.)改的意义不大,一般不会得到你想要的。
可以修改的是pose.position
比如我们可以单独修改x轴的运动:
object_position_info = pose.position
target_pose.pose.position.x = object_position_info.x+0.02
然后在使用arm.go()控制移动,也可以用move()函数

末端执行器运动的两种移动方式:直线和弧线

通过对关节空间下的机器人6个轴进行控制,每个轴的变化都是通过插补进行完成运动,六个轴互相不会关心其他轴是如何运动的,机器人轴端在两个点之间走出的轨迹是任意的曲线。
但是对于一些任务,要求机械臂终端轨迹的形状是直线或者圆弧等,即对轨迹的形状是有要求的,这个时候就要使用笛卡尔孔规划,增加笛卡尔路径约束。

两个控制移动的API:arm.go()和arm.move()</font

arm.go()是python环境下提供的驱动机械臂运动的API,arm.go()是一个阻塞函数,相当于是在rviz下面先点击plan再点击execute。

arm.move()是C++环境下提供的驱动机械臂运动的API。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实际的机械臂控制(9)Moveit单独控制机械臂末端在XYZ三个轴的平移和旋转(基于python) 的相关文章

  • 围绕 readline 构建的 python 批处理的触发器选项卡完成

    背景 我有一个 python 程序 它导入并使用 readline 模块来构建自制的命令行界面 我有第二个 python 程序 围绕 Bottle 一个 Web 微框架构建 充当该 CLI 的前端 第二个 python 程序向第一个程序打开
  • python 中的代表

    我实现了这个简短的示例来尝试演示一个简单的委托模式 我的问题是 这看起来我已经理解了委托吗 class Handler def init self parent None self parent parent def Handle self
  • Python模块可以访问英语词典,包括单词的定义[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 python 模块 它可以帮助我从英语词典中获取单词的定义 当然有enchant 这可以帮助我检查该单词是否存在于英语中
  • 如何使用 imaplib 获取“消息 ID”

    我尝试获取一个在操作期间不会更改的唯一 ID 我觉得UID不好 所以我认为 Message ID 是正确的 但我不知道如何获取它 我只知道 imap fetch uid XXXX 有人有解决方案吗 来自 IMAP 文档本身 IMAP4消息号
  • Argparse nargs="+" 正在吃位置参数

    这是我的解析器配置的一小部分 parser add argument infile help The file to be imported type argparse FileType r default sys stdin parser
  • Pandas 中允许重复列

    我将一个大的 CSV 包含股票财务数据 文件分割成更小的块 CSV 文件的格式不同 像 Excel 数据透视表之类的东西 第一列的前几行包含一些标题 公司名称 ID 等在以下列中重复 因为一家公司有多个属性 而不是一家公司只有一栏 在前几行
  • 在Python中调整图像大小

    我有一张尺寸为 288 352 的图像 我想将其大小调整为 160 240 我尝试了以下代码 im imread abc png img im resize 160 240 Image ANTIALIAS 但它给出了一个错误TypeErro
  • 为什么在 Python 2.4 中使用 Unicode 数据会出现 ASCII 编码错误,而在 2.7 中却不会?

    我有一个程序 当在 Python 2 7 中运行时 会生成正确的 Unicode 输出到标准输出 当在 Python 2 4 中运行时 我得到UnicodeEncodeError ascii codec can t encode chara
  • python suds SOAP 请求中的名称空间前缀错误

    我使用 python suds 来实现客户端 并且在发送的 SOAP 标头中得到了错误的命名空间前缀 用于定义由element ref 在 wsdl 中 wsdl 正在引用数据类型 xsd 文件 请参见下文 问题出在函数上GetRecord
  • 使用 OLS 回归预测未来值(Python、StatsModels、Pandas)

    我目前正在尝试在 Python 中实现 MLR 但不确定如何将我找到的系数应用于未来值 import pandas as pd import statsmodels formula api as sm import statsmodels
  • 如何通过在 Python 3.x 上按键来启动和中断循环

    我有这段代码 当按下 P 键时会中断循环 但除非我按下非 P 键 否则循环不会工作 def main openGame while True purchase imageGrab if a sum gt 1200 fleaButton ti
  • 对图像块进行多重处理

    我有一个函数必须循环遍历图像的各个像素并计算一些几何形状 此函数需要很长时间才能运行 在 24 兆像素图像上大约需要 5 小时 但似乎应该很容易在多个内核上并行运行 然而 我一生都找不到一个有据可查 解释充分的例子来使用 Multiproc
  • 如何设置 Celery 来调用自定义工作器初始化?

    我对 Celery 很陌生 我一直在尝试设置一个具有 2 个独立队列的项目 一个用于计算 另一个用于执行 到目前为止 一切都很好 我的问题是执行队列中的工作人员需要实例化一个具有唯一 object id 的类 每个工作人员一个 id 我想知
  • 按元组分隔符拆分列表

    我有清单 print L I WW am XX newbie YY ZZ You WW are XX cool YY ZZ 我想用分隔符将列表拆分为子列表 ZZ print new L I WW am XX newbie YY ZZ You
  • mac osx 10.8 上的初学者 python

    我正在学习编程 并且一直在使用 Ruby 和 ROR 但我觉得我更喜欢 Python 语言来学习编程 虽然我看到了 Ruby 和 Rails 的优点 但我觉得我需要一种更容易学习编程概念的语言 因此是 Python 但是 我似乎找不到适用于
  • 使用yield 进行字典理解

    作为一个人为的例子 myset set a b c d mydict item yield join item s for item in myset and list mydict gives as cs bs ds a None b N
  • 默认情况下,Keras 自定义层参数是不可训练的吗?

    我在 Keras 中构建了一个简单的自定义层 并惊讶地发现参数默认情况下未设置为可训练 我可以通过显式设置可训练属性来使其工作 我无法通过查看文档或代码来解释为什么会这样 这是应该的样子还是我做错了什么导致默认情况下参数不可训练 代码 im
  • 如何为每个屏幕添加自己的 .py 和 .kv 文件?

    我想为每个屏幕都有一个单独的 py 和 kv 文件 应通过 main py main kv 中的 ScreenManager 选择屏幕 设计应从文件 screen X kv 加载 类等应从文件 screen X py 加载 Screens
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 如何读取Python字节码?

    我很难理解 Python 的字节码及其dis module import dis def func x 1 dis dis func 上述代码在解释器中输入时会产生以下输出 0 LOAD CONST 1 1 3 STORE FAST 0 x

随机推荐

  • vue 实现全屏

    通过引用第三方库 screenfull 实现全屏 1 首先通过 npm install screenfull 执行下载 2 在使用页面进行import screenfull from screenfull 引入 3 然后绑定事件 调用提供的
  • 【第22例】IPD 体系进阶:综合创新地图

    目录 简介 专栏目录 内容 第一步 搭建框架 第二步 构思 第三步 筛选
  • 算法分析

    声明 凡代码问题 欢迎在评论区沟通 承蒙指正 一起成长 目录 一 实验内容与要求 二 概要设计 三 直接上代码 四 运行结果 一 实验内容与要求 内容 布线问题 印刷电路板将布线区域分成n m个方格阵列 精确的电路布线问题要求确定连接方格A
  • 线性表的顺序存储结构(数组插入,删除)——c语言描述

    文章目录 1 线性表的顺序存储结构 1 2 线性表的存储结构的表示 1 2 线性表的操作 OperatorList 1 3 打印线性表 PrintList 1 4 创建线性表 1 5 清零线性表 ClearList 1 6 获取线性表指定位
  • python的赋值操作浅析

    目录 前言 一 不可变类型的赋值 1 Numbers的赋值 2 String类型的赋值 3 Tupes类型赋值 4 函数传参赋值 二 可变类型的赋值 1 List赋值 2 函数传参 总结 前言 python中Numbers 数
  • mysql初始化命令_mysql初始化命令及其他命令

    这个问题纠结了我两年 为了配置my cnf中 undo的 参数生效 以及生成undo文件 使用一下命令 usr bin mysql install db defaults file etc my cnf datadir dbfiles da
  • type object xxx has no attribute objects

    在Django 2 0以下版本 使用自定义管理器存在一个BUG 该BUG引发的原因 是因为报错模型使用自定义管理器 导致默认的objects管理器被覆盖掉了 我的解决方案是 升级Django版本 升级到Django 2 2 1 如果有大佬知
  • Uniapp录音实时回调原生插件-YL-AudioRecorder

    YL AudioRecorder 插件地址 https ext dcloud net cn plugin id 14028 升级版 YL AudioRecorderPlus 支持mp3录制及实时回调 https ext dcloud net
  • 30条经典的SQL语句

    关于索引 推荐转载的这篇文章 http blog csdn net dutguoyi archive 2006 01 10 575617 aspx 改善SQL语句的效率 http community csdn net Expert topi
  • 2017年严重拖延着患者欠下的债

    扩展基础知识面 Android 面试 全站式导航 http mp weixin qq com s fTfudY1DBYS5JiSkPnbjAg 100篇精选干货 感谢你与码个蛋共同成长 含5重福利 http mp weixin qq com
  • 使用com.alibaba里面的druid连接数据库

    1 添加依赖
  • Spark性能调优之Shuffle调优

    Spark性能调优之Shuffle调优 Spark底层shuffle的传输方式是使用netty传输 netty在进行网络传输的过程会申请堆外内存 netty是零拷贝 所以使用了堆外内存 shuffle过程中常出现的问题 常见问题一 redu
  • 服务器物理结构,物理 I/O 体系结构

    物理 I O 体系结构 与以前发行版的 M 系列服务器相比 这些服务器的物理 I O 体系结构发生了变化 使用了不同的名称 并且 CPU 不再拥有 PCIe 结构 I O 术语 用于描述 I O 体系结构的术语发生了如下变化 根联合体 在
  • React Effects(副作用)

    我们在之前提到过 React 组件在渲染过程中不应该有可观察到的副作用 但是有些时候副作用确实必要的 我们也许需要进行管理 focus 状态 用 canvas 画图 订阅数据源等操作 在 React 中 这些都可以通过声明 effect 来
  • ag-grid 自带css样式记录

    本篇文章是打算自己用于记录ag grid自身的css样式的记录和功能 1 ag header group cell with group 作用 多表头 前几层 最后一行表头除外 表头样式的设置 ag header group cell wi
  • pg备份数据库

    原文 http www weijingbiji com 1975 PostgreSQL备份工具pg dump和pg dumpall PostgreSQL 数据库 作者 viking PostgreSQL使用 pg dump 和 pg dum
  • [知识图谱实战篇] 七.HTML+D3实现关系图谱搜索功能

    前面作者讲解了很多知识图谱原理知识 包括知识图谱相关技术 Neo4j绘制关系图谱等 但仍缺少一个系统全面的实例 为了加深自己对知识图谱构建的认识 为后续创建贵州旅游知识图谱打下基础 作者深入学习了张宏伦老师的网易云课程 星球系列电影 并结合
  • Python利用demoji库删除文档中的表情符号

    在进行数据清洗时 往往需要删除文档中的出现的表情符号 因为他们无法被读取 借助demoji库 可以非常简单地完成这项工作 关于demoji 库的文档 可以访问demoji PyPI 首先 需要在环境中利用pip install安装demoj
  • 可拖拽的easyui treegrid

    引用 JQuery EasyUI TreeGrid控件的使用 支持拖拽与禁止拖拽 演示
  • 实际的机械臂控制(9)Moveit单独控制机械臂末端在XYZ三个轴的平移和旋转(基于python)

    0 序言 在moveit中 控制机械臂的末端执行器运动的API有两个 分别是 shift pose target set pose target 第一个API shift pose target 其实这个函数在旋转角度这块并不会得到让大家满