Moveit-轨迹优化

mvoeit轨迹周期不固定的问题,以及我们希望对moveit规划出来的轨迹进一步优化的项目需求

首先看一个关节角运动的python函数,通过这个函数我们可以实现机械臂从当前位姿运动到设定位姿的功能

#用于控制机械臂移动到目标位置,接受三个参数
#target_place:目标位置的关节角度列表,单位为度。这里将角度转换为弧度,并设置为机械臂的目标关节角度
#v:机械臂的速度缩放因子,用于设置最大速度的比例。
#a:机械臂的加速度缩放因子,用于设置最大加速度的比例。
    def arm_go(self, target_place, v, a):
        self.arm_group.set_joint_value_target(
            [target_place[0]*math.pi/180,
             target_place[1]*math.pi/180,
             target_place[2]*math.pi/180,
             target_place[3]*math.pi/180,
             target_place[4]*math.pi/180,
             target_place[5]*math.pi/180])
        self.arm_group.set_max_acceleration_scaling_factor(a)
        self.arm_group.set_max_velocity_scaling_factor(v)
        #实际使机械臂执行移动操作
        self.arm_group.go(wait=True)

我们通过上一篇中的方法来捕捉一下mvoeit到底做了什么,让这个函数最终实现到robot上,我们通过代码让robot从零位(对于UR5,就是平躺的那个姿态),到达给定的pose1

pose1 = [-9.38, -56.31, 94.33, -125.08, 276.39, 84.7]
self.arm_go(pose1,0.25,0.25)

 

 

 

 

关节速度以及关节加速度图上可以看到,由于我的joint_limit.yaml中关节最大速度是6.28,程序中的因子设定为0.25,途中紫色的线就可以看到最大速度被限制在了1.57。

我们看到mvoeit给这个目标一共设定了18个轨迹点,还是主要关注两个问题,一个是周期不定,一个是加速度存在突变,但是这个问题倒不是很严重。

还是参考上一篇文章那位大佬的帖子

使用 MoveIt 控制自己的真实机械臂【3】——优化轨迹发给真实机械臂执行_ros moveit 控制实际机械臂-CSDN博客

首先是下载对应的工业包

 GitHub - ros-industrial/industrial_core at kinetic-devel

下载后修改ompl_planning_pipeline.launch.xml文件,主要是增加了

industrial_trajectory_filters/UniformSampleFilter

这一行代码,以及

sample_duration (float) — 两个路径点间的时间步进值(单位为秒)

<param name="sample_duration" value="0.1"/>

这里的sample_duration参数来适配合适的控制周期,这里的0.1对应了100ms的控制周期

<launch>

  <!-- OMPL Plugin for MoveIt! -->
  <arg name="planning_plugin" value="ompl_interface/OMPLPlanner" />

  <!-- The request adapters (plugins) used when planning with OMPL. 
       ORDER MATTERS -->
       <!--这里加了一个ind包-->
  <arg name="planning_adapters" value="
  industrial_trajectory_filters/UniformSampleFilter
               default_planner_request_adapters/AddTimeParameterization
				       default_planner_request_adapters/FixWorkspaceBounds
				       default_planner_request_adapters/FixStartStateBounds
				       default_planner_request_adapters/FixStartStateCollision
				       default_planner_request_adapters/FixStartStatePathConstraints" />

  <arg name="start_state_max_bounds_error" value="0.1" />

    <!-- 机械臂的控制周期是 100ms -->
  <param name="sample_duration" value="0.1"/>

  <param name="planning_plugin" value="$(arg planning_plugin)" />
  <param name="request_adapters" value="$(arg planning_adapters)" />
  <param name="start_state_max_bounds_error" value="$(arg start_state_max_bounds_error)" />

  <rosparam command="load" file="$(find ur5_moveit_config)/config/ompl_planning.yaml"/>

</launch>

这样就可以再次运行机器人运动的程序

可以看到周期已经变成0.1秒,也就是100ms

 

 从三张图中也可以看到,周期已经是固定的了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/904412.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高效实现用友BIP与吉客云的数据集成方案案例

用友BIP数据集成到吉客云的技术案例分享 在企业信息化建设中&#xff0c;数据的高效流动和准确对接是实现业务协同的重要基础。本文将重点介绍一个实际运行的系统对接集成案例&#xff1a;如何通过轻易云数据集成平台&#xff0c;将用友BIP的数据无缝集成到吉客云中&#xff0…

Golang高级语法-工具链

Golang工具链是一个强大的工具集&#xff0c;可以帮助开发人员管理和构建Golang应用程序&#xff0c;包括编译、链接、测试、代码分析、文档生成等。本文将介绍Golang工具链的基本用法和示例代码&#xff0c;让您更好地了解和使用它。 1 环境 在开始之前&#xff0c;您需要安装…

中间件安全(三)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 本文主要讲解apache命令执行漏洞&#xff08;cve_2021_41773&#xff09;。 靶场链接&#xff1a;Vulfocus 漏洞威胁分析平台 一&#xff0c;漏洞简介。 cve_2021_41773漏洞…

双十一我都入手了啥大件?这几款超值好物分享给你

​马上就到一年一度的“双11”大促&#xff0c;简单与大家分享&#xff0c;最近自己买过或者是看好的生活好物。以数码为主&#xff0c;平常的一点生活会提及一些。 耳机党必备&#xff0c;听歌不伤耳朵&#xff01;——南卡OE MIX开放式耳机 一句话推荐&#xff1a;百元旗舰…

PHP海外矿物矿机理财投资源码-金融理财投资源码

PHP海外矿物矿机理财投资源码/金融理财投资源码 海外矿物矿机理财投资源码 测试不错,可以做其他产品理财,功能都没啥太大问题

持续更新...记录

一、Random类 1、构造方法&#xff1a; ①有参&#xff1a;通过指定种子数进行创建 &#xff08;使用相同的种子数创建多个Random对象&#xff0c;这些对象生成的随机数序列将完全相同‌&#xff09; &#xff08;适用于需要可重复生成相同随机数序列的场景&#xff0c;如科学…

Redis项目中应用

1. Redis简介 Redis是一个基于内存的key-value结构数据库。Redis 是互联网技术领域使用最为广泛的存储中间件。 官网&#xff1a;https://redis.io 中文网&#xff1a;Redis中文网 2. Redis下载与安装 2.1 Redis下载 Redis安装包分为windows版和Linux版&#xff1a; Wind…

cursor连接远程jupyter

cursor的步骤跟vscode应该是基本一样的&#xff0c;主要需要两个插件&#xff0c;一个是remote-ssh&#xff0c;另一个是jupyter 第一步 首先连接远程的ssh&#xff0c;因为我已经新建好了&#xff0c;所以直接选207&#xff0c;没有连接过的就选Add New SSH Host&#xff…

9款热门CRM客户关系管理系统大盘点

在当今竞争激烈的商业环境中&#xff0c;客户关系管理&#xff08;CRM&#xff09;系统已成为企业不可或缺的工具。CRM系统不仅帮助企业管理客户信息&#xff0c;还能提高销售效率、改善客户服务、增强客户满意度。本文将为您盘点9款热门的CRM客户关系管理系统&#xff0c;并重…

IMX6ULL裸机-汇编_反汇编_机器码

程序处理的4个步骤 我们编写的C程序是不能直接在ARM等平台上运行的&#xff0c;必须经过一系列的程序处理才可以&#xff0c;我们的第一个LED程序涉及两个文件&#xff1a;start.S、main.c&#xff0c;它们的处理过程如下&#xff1a; 对于汇编程序&#xff0c;经过汇编之后&a…

【Unity】游戏UI中添加粒子特效导致穿层问题的解决

这里介绍一下简易的ui系统中&#xff0c;添加粒子特效导致的穿层问题 首先是在ui界面中添加粒子特效预制体&#xff0c;这个时候&#xff0c;控制这个粒子显示层级的有两个方面 上图中&#xff0c;如果你的Sorting Layer ID的值&#xff08;Layer排序&#xff09;是大于当前C…

SAP 根据不同生产版本创建销售预测简介

SAP 根据不同生产版本创建销售预测简介 业务场景前台操作1、创建BOM2、创建工艺路线3、创建生产版本4、创建销售预测5、调整销售预测6、查看物料需求业务场景 很多工厂一个物料可能会存在多个BOM,当有多个BOM存在的情况下就会存在多个生产版本,当创建计划独立需求的时候,系…

STM32 RTC 驱动代码(解决了使用HAL库函数导致的复位或者掉电后导致RTC年月日日期清零的问题)

问题背景&#xff1a;在RTC中断里面使用HAL库HAL_RTC_GetDate()和HAL_RTC_GetTime()来获取RTC时间日期。 源码如下图&#xff1a; 问题描述&#xff1a;单片机断电或者复位后的时分秒的时间可以接上&#xff0c;但年月日的日期就会被清零。如图&#xff1a; 导致问题的根本原因…

SpringBoot3+SpringSecurity6基于若依系统整合自定义登录流程

SpringBoot3SpringSecurity6基于若依系统整合自定义登录流程 问题背景 在做项目时遇到了要对接统一认证的需求&#xff0c;但是由于框架的不兼容性&#xff08;我们项目是springboot3&#xff0c;jdk17&#xff0c;springsecurity6.1.5&#xff09;等因素&#xff0c;不得不使…

Mount Image Pro,在取证安全的环境中挂载和访问镜像文件内容

天津鸿萌科贸发展有限公司从事数据安全服务二十余年&#xff0c;致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务&#xff0c;并针对企业面临的数据安全风险&#xff0c;提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 GetData 公司数据恢复与取证工…

PHP合成图片,生成海报图,poster-editor使用说明

之前写过一篇使用Grafika插件生成海报图的文章&#xff0c;但是当我再次使用时&#xff0c;却发生了错误&#xff0c;回看Grafika文档&#xff0c;发现很久没更新了&#xff0c;不兼容新版的GD&#xff0c;所以改用了intervention/image插件来生成海报图。 但是后来需要对海报…

React 前端框架全面教程:从入门到进阶

React 前端框架全面教程&#xff1a;从入门到进阶 引言 在现代前端开发中&#xff0c;React 作为一款流行的 JavaScript 库&#xff0c;以其组件化、声明式的特性和强大的生态系统&#xff0c;成为了开发者的首选。无论是构建单页应用&#xff08;SPA&#xff09;还是复杂的用…

基于Python的自然语言处理系列(42):Token Classification(标注分类)

在本篇文章中&#xff0c;我们将探讨如何进行 Token Classification&#xff08;标注分类&#xff09;&#xff0c;这是一类为句子中的每个 token&#xff08;词或子词&#xff09;分配标签的任务。该任务可以解决很多问题&#xff0c;例如命名实体识别&#xff08;NER&#xf…

用Pyhon写一款简单的益智类小游戏——2048

文字版——代码及讲解 代码—— import random# 初始化游戏棋盘 def init_board():return [[0] * 4 for _ in range(4)]# 在棋盘上随机生成一个2或4 def add_new_tile(board):empty_cells [(i, j) for i in range(4) for j in range(4) if board[i][j] 0]if empty_cells:i,…

『Linux学习笔记』如何在 Ubuntu 22.04 上安装和配置 VNC

『Linux学习笔记』如何在 Ubuntu 22.04 上安装和配置 VNC 文章目录 一. 『Linux学习笔记』如何在 Ubuntu 22.04 上安装和配置 VNC1. 介绍 二. 参考文献 一. 『Linux学习笔记』如何在 Ubuntu 22.04 上安装和配置 VNC 如何在 Ubuntu 22.04 上安装和配置 VNC 1. 介绍 虚拟网络计算…