基于动力学模型的机械臂pid控制

参考资料:

一、如何实现机械臂的控制

  • 在最常见的对机械臂动力学实现控制的问题中,我们会有一段机械臂末端的期望轨迹S,希望通过对机械臂关节处电机转矩的控制实现末端沿期望轨迹的完美运动。
  • 控制问题主要分为镇定和跟踪两种,上面说的沿期望轨迹运动就是跟踪问题,目标点关于时间一直在变化。镇定问题就是目标点不变,只要快准稳的到达指定位置即可。后面的控制问题为了简化问题,都是讨论的镇定问题
  • 最常用的机械臂控制框架如下:
    在这里插入图片描述
    被控对象的数学形式就是动力徐模型,即输入力输出加速度,之后通过两次积分得到速度和轨迹,这里没有将两次积分画出,在求误差时根据控制器的需要给出轨迹、速度、加速度全部或者部分的误差
  • 关于上面这个图,让我比较疑惑的是工作空间期望轨迹通过逆运动学映射到关节空间期望轨迹这一步。因为这一步是离线的,无法规避运动学模型导致的误差,不知道有没有解决的办法。
  • 最常见的机械臂动力学模型形式如下:
    在这里插入图片描述

二、基础想法

  • 面对机械臂控制的问题,比较容易的想法有两种,一种是基于逆动力学模型的开环控制,另一种就是基于误差的反馈控制。

逆动力学控制器

  • 逆动力学可以通过关节的运动情况求出关节所需的力,如果我们的动力学模型和驱动器器都是完美的,就可以完成控制。但是,完美的模型和驱动器是不存在的,难免会出现误差。并且由于是开环控制系统,无法对产生的误差进行控制。

独立pid控制器

  • 基于误差反馈的控制思路最常见的就是pid,通过期望加速度和实际加速度的差值进行控制 在这里插入图片描述
  • 机械臂是非线性的时变系统,而pid是定常线性控制器。在pid进行独立控制时,将所有系统关于时间和非线性导致的变化全部认为是干扰,这些干扰的来源包括重力、其他关节速度导致的离心力和科氏力、角度变化导致模型参数的变化、摩擦力等,这导致固定参数的独立pid控制难以适应所有工况。
  • 在仿真中,如果假设环境中没有重力,并且其他干扰较小的情况下,独立pid还勉强可以完成工作。

三、基于前馈的pid控制器

  • 上面提到的两种方法都没办法很好的解决实际的控制问题,但如果将两种方法结合在一起就可以成为比较实用的方法了。
  • 开环无法控制误差,反馈没法适应所有工况,将二者结合前馈+反馈即可分别解决系统变化时所需的控制量和剩余误差

1、基于重力补偿的pid控制器

  • 上面提到在假设没有重力时,独立pd可以实现控制,这也说明机械臂姿态变化导致的重力受力情况的变化是较大的干扰量。如果在输出力之前,通过模型对重力进行补偿,则可以解决这一问题。
    在这里插入图片描述

2、基于模型补偿的pid控制器

  • 将重力补偿的思路继续扩展到整个动力学模型,就形成了基于模型补偿的pid控制器
    在这里插入图片描述

四、基于计算力矩法的pid控制器

1、设计思路

  • 前面的方法写出控制器后,都可以在结合被控对象模型后通过李雅普诺夫函数实现稳定判定。但是控制器设计和判定稳定之间没有联系,在设计控制器的过程中,主要源于简单直觉,不够“数学”。
  • 计算力矩法的核心就是通过设置控制器,进而将系统(控制器+受控对象)的数学模型变成一个必然稳定的闭环系统,即系统模型的数学形式如下:
    在这里插入图片描述
    这种数学形式是齐次二阶微分方程,在特定的参数情况下,误差e必然指数级快速趋于0

2、控制器设计

  • 不考虑模型参数误差
    在忽略力矩输出误差情况下,被控对象动力学模型:
    在这里插入图片描述
    在忽略动力学模型参数误差的情况下,控制率如下:
    在这里插入图片描述
    将控制率带入动力学模型:
    在这里插入图片描述
  • 考虑模型参数和控制输出误差
    被控对象动力学模型:
    在这里插入图片描述
    控制率如下:
    在这里插入图片描述
    将控制率带入动力学模型:
    在这里插入图片描述
  • 从上式可知,误差和扰动导致控制器性能下降。处理方式有很多,增加鲁棒项(滑模控制)、增加前馈项(rbf不确定性补偿)等

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用php打印时间精确到毫秒及毫秒转成11位时间戳

在PHP中,可以使用microtime函数来获取当前时间,包括毫秒。以下是示例代码: // 获取当前时间戳(秒) $time microtime(true); // 将当前时间戳转换为毫秒 $milliseconds round($time * 1000); // 输出当前时间&#…

Android开发知识学习——Kotlin基础

函数声明 声明函数要用用 fun 关键字,就像声明类要用 class 关键字一样 「函数参数」的「参数类型」是在「参数名」的右边 函数的「返回值」在「函数参数」右边使用 : 分隔,没有返回值时可以省略 声明没有返回值的函数: fun main(){println…

怎么测量直线模组的精度?

直线模组是一款比较多变的一种产品,适合多种行业,同时它也适合比较多的环境,是一种比较全面的直线运动的装置。直线模组是非常精密的自动化机械设备,在实践中,应该要严格把握具体精度,并且在必要的时候&…

【嵌入式开发工具】STM32+Keil实现软件工程搭建与开发调试

本篇文章介绍了使用Keil来对STM32F103C8芯片进行初始工程搭建,以及开发与工程调试的完整过程,帮助读者能够在实战中体会到Keil这个开发环境的使用方法,了解一个嵌入式工程从无到有的过程,并且具备快速搭建一个全新芯片对应最小软件…

基于元学习神经网络的类人系统泛化

Nature 上介绍了一个关于AI在语言泛化方面的突破性研究。科学家们创建了一个具有人类般泛化能力的AI神经网络,它可以像人类一样将新学到的词汇融入现有词汇,并在新环境中使用它们。与ChatGPT 相比,该神经网络在系统性泛化测试中表现得更好。 …

17、Flink 之Table API: Table API 支持的操作(1)

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

vite安装Tailwind CSS

安装 - Tailwind CSS 中文网 (nodejs.cn) 这是官网,平常我练习一般会用vite脚手架 我们选择这个vite模块 可选择React和Vue版本的,这里选择react的按照操作,没问题的话就要出问题了 1、在npm run dev的时候我是出现了这么个问题&#xff0c…

234. 回文链表、Leetcode的Python实现

博客主页:🏆看看是李XX还是李歘歘 🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗点关注不迷路,总有一些📖知识点📖是你想要的💗 ⛽️今…

竞赛 深度学习疫情社交安全距离检测算法 - python opencv cnn

文章目录 0 前言1 课题背景2 实现效果3 相关技术3.1 YOLOV43.2 基于 DeepSort 算法的行人跟踪 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习疫情社交安全距离检测算法 ** 该项目较为新颖,适合作为竞赛…

【网络奇遇记】那年我与计算机网络的初相识

🌈个人主页:聆风吟 🔥系列专栏:《网络奇遇记》 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 一. 信息时代的计算机网络二. 计算网络的定义和分类三. 计算机网络的特点四. 计算机网路在信息时代的应用五…

图解Linux进程优先级

目录 1.什么是进程优先级? 2.进程优先级原理 3.查看进程优先级 4.修改进程优先级 4.1 setpriority函数原型 4.2 getpriority函数原型 4.3 sched_setscheduler函数原型 4.4 sched_getscheduler函数原型 4.5 sched_setparam函数原型 4.6 sched_getparam函数…

Unity Perception合成数据生成、标注与ML模型训练

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D场景编辑器 任何训练过机器学习模型的人都会告诉你,模型是从数据得到的,一般来说,更多的数据和标签会带来更好的性能。 …

限制LitstBox控件显示指定行数的最新数据(3/3)

实例需求:由于数据行数累加增加,控件加载的数据越来越多,每次用户都需要使用右侧滚动条拖动才能查看最新数据。 因此希望ListBox只加载最后10行数据(不含标题行),这样用户可以非常方便地选择数据&#xff…

JMeter组件

1.JMeter常用组件 必须组件:测试计划,线程组(包含多个线程),取样器 测试计划,JMeter默认创建且仅有一个 线程组: 添加步骤: 选择TestPlan并点击鼠标右键添加 分类以及使用&…

Spring Data Redis + RabbitMQ - 基于 string 实现缓存、计数功能(同步数据)

目录 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 1.1.2、案例实现 1.1.3、效果演示 1.2、计数功能(Redis RabbitMQ) 1.2.1、分析 1.2.2、案例实现 一、Spring Data Redis 1.1、缓存功能 1.1.1、分析 使用 redis 作为缓存, M…

curl(四)证书相关

一 证书相关 ① -k 1、客户端忽略服务端证书校验 -k | --insecure --> 单向[1]、这个选项显式地允许curl 执行不安全 的SSL连接和传输[2]、所有SSL连接都试图通过使用默认安装的CA证书捆绑包来确保安全[3]、这使得所有被认为是不安全的连接失败,除非使用-k --> 自签…

一座 “数智桥梁”,华为助力“天堑变通途”

《水调歌头游泳》中的一句话,“一桥飞架南北,天堑变通途”,广为人们所熟知,其中展现出的,是中国人对美好出行的无限向往。 天堑变通途从来不易。 中国是当今世界上交通运输最繁忙、最快捷的国家之一,交通行…

2023-在mac下安装Homebrew的国内镜像

mac安装Homebrew的国内镜像 尝试使用其他下载源:GitHub 可能会受到访问限制,尝试使用其他镜像或下载源。您可以使用清华大学、中科大或阿里云的 Homebrew 镜像,以提高下载速度和可靠性。例如,可以使用阿里云的镜像来安装 Homebre…

任务1 部署ChatGLM3-6B大模型并进行对话测试

部署ChatGLM3-6B大模型并进行对话测试 0 介绍:1 趋动云项目创建与环境配置1.1 创建项目:1.2 配置环境1.2.1 进入终端1.2.2 设置镜像源1.2.3 克隆项目,并安装依赖 2 修改代码,改路径以及启动代码3 运行代码3.1 运行gradio界面:3.2 …

雷池WAF社区版的使用教程

最近听说了一款免费又好用的WAF软件,雷池社区版,体验了一下虽然还有很多改进的空间 但是总体来说很适合小站长使用,和学习使用 也建议所有想学防火墙和红队(攻击队)练习使用,听说给官网提交绕过还有额外的…