当前位置: 首页 > news >正文

机械臂力控方法概述(一)

目录

1. MoveIt 适用范围

2. 力控制框架与 MoveIt 的区别

3. 力控方法

3.1 直接力控制 (Direct Force Control)

3.2 间接力控制 (Indirect Force Control)

3.2.1 柔顺控制 (Compliant Control)

3.2.2 阻抗控制 (Impedance Control)

3.2.3 导纳控制 (Admittance Control)

3.3 力/位混合控制 (Force/Position Hybrid Control)

4. 使用 ROS Control 框架:

5. 创建自定义控制器:

6. 集成力传感器与反馈回路:

7. 求解雅可比矩阵进行速度控制:


        在实际的机械臂力控任务中,一般不直接使用 MoveIt 来实现力控制。MoveIt 的主要功能集中在运动规划碰撞检测逆运动学求解路径优化等方面,而力控制通常涉及的是实时的力反馈力矩控制,这些功能不是 MoveIt 的主要强项。下面是更详细的解释:

1. MoveIt 适用范围

        MoveIt 适用于运动规划而非实时控制。MoveIt 的设计初衷是为机器人提供路径规划工具,帮助机器人规划出不与环境碰撞的可行路径,适用于自由运动或复杂环境中的路径计算。它的主要功能集中在:

  • 路径规划:基于环境信息和目标位置计算最优路径。
  • 碰撞检测:确保机械臂在规划路径时避免与环境中的物体发生碰撞。
  • 逆运动学:帮助找到末端执行器(如夹爪)在空间中的姿态对应的关节角度配置。

这些功能是离线或在线路径规划时非常重要的,但它们并不适用于实时的力/位置混合控制任务。

2. 力控制框架与 MoveIt 的区别

        机械臂的力控制(Force Control)要求能够根据传感器数据(例如力/扭矩传感器)的反馈,实时调整机械臂的运动或受力。这通常用于以下场景:

  • 接触控制:例如装配任务、打磨任务,机械臂需要在执行过程中与环境表面保持一定的力。
  • 柔顺控制:允许机械臂在特定方向上产生柔顺的运动,以避免对接触物体施加过大的力。

这种实时的力控制,需要高频率的控制回路,通常通过以下工具或方法实现:

  • 力/位置混合控制器:如 ros_controllers 中的 Cartesian Impedance Controller,或者基于力传感器的自定义控制器。
  • ROS 力矩控制包:例如 ros_control 提供的 force_torque_sensor_controller,用于结合力传感器的数据进行控制。
  • 力矩控制模式:很多机械臂控制器(如 KUKA、Universal Robots)提供了力矩控制模式,直接在硬件层面控制机械臂各关节的力矩输出。

3. 力控方法

3.1 直接力控制 (Direct Force Control)

        直接力控制旨在实时控制机器人末端执行器施加的力。通过使用力传感器实时监测施加的力,控制系统可以动态调整机器人的运动,以确保施加力与目标力相匹配。这种控制方式适用于需要精确施加力的应用,如自动化装配、打磨或焊接等。

3.2 间接力控制 (Indirect Force Control)

        间接力控制通过控制机器人的运动来间接实现对施加力的控制。这种方法通常依赖于机器人模型和动态响应,以调整关节或末端的运动来影响力的输出。间接力控制可以细分为几种主要方法:

3.2.1 柔顺控制 (Compliant Control)

        柔顺控制的目标是使机器人在与环境交互时具有一定的柔顺性。它允许机器人在一定范围内根据外部力进行适应,从而减少冲击或损伤。

        被动柔顺 (Passive Compliance)

被动柔顺通过机械设计(如弹簧、阻尼器等)实现,不需要控制系统的实时调整。机器人在受到外力时能够自然变形,以缓冲冲击或适应环境变化。

        主动柔顺 (Active Compliance)

        主动柔顺需要实时反馈和控制系统的参与。机器人根据力传感器的反馈动态调整运动,以确保施加的力在期望范围内,提供更高的适应能力。

3.2.2 阻抗控制 (Impedance Control)

        阻抗控制通过设置力与位移之间的动态关系来实现对力的控制。机器人能够根据外部力的变化调整其运动,表现出一定的“阻抗”,类似于弹簧的行为。

3.2.3 导纳控制 (Admittance Control)

        导纳控制与阻抗控制相对,主要关注在施加一定的力后,机器人如何反应以改变其运动状态。它允许机器人根据施加的力来调整其位移或速度,从而达到柔顺交互的效果。

3.3 力/位混合控制 (Force/Position Hybrid Control)

        力/位混合控制结合了位置控制和力控制的特性。在抛光或打磨过程中,机械臂需要精确控制末端执行器的位置以跟随工作表面,同时保持恒定的接触力。这种情况下,机器人通过力位控制可以实现目标,即在表面移动时保持适当的施加力,以确保均匀的表面处理效果。例如,打磨时,机械臂可以通过力传感器实时监测施加的力,并根据反馈调整移动速度,以保持恒定的打磨压力。

4. 使用 ROS Control 框架

ROS 提供了ros_control框架,该框架为机械臂的实时控制提供了接口。力控可以通过创建自定义控制器并使用此框架来实现:

  • Position Controller:控制机械臂的关节位置,适用于导纳控制。
  • Effort Controller:直接控制关节的力矩,适用于阻抗控制。
  • Velocity Controller:控制机械臂关节的速度,常用于结合导纳控制的实现。

5. 创建自定义控制器

在 ROS 中,通常需要根据具体的控制需求编写一个自定义控制器:

  • 使用 ROS Control 中的控制器框架,在控制器中订阅外部的传感器数据(例如,力传感器)。
  • 实现实时反馈逻辑:比如,当检测到力传感器的输出超出预设范围时,调整机械臂末端的速度或关节位置。

6. 集成力传感器与反馈回路

  • 力传感器的集成:机械臂末端通常安装力/力矩传感器,实时采集与外部环境的力反馈。
  • 数据处理:通过订阅力传感器的 ROS 话题,将采集到的力数据输入到自定义控制器中。
  • 反馈控制:根据力传感器数据,控制器实时调整机械臂的运动参数(位置、速度或力),以保持恒定的接触力。

7. 求解雅可比矩阵进行速度控制

在实现笛卡尔空间的末端速度控制时,通常需要求解雅可比矩阵,将末端的线速度和角速度转换为各关节的速度。此过程可以通过 ROS 中的 Orocos KDL 库实现:

  • 雅可比矩阵求解:Orocos KDL 库提供了直接的雅可比矩阵求解函数,用于笛卡尔空间与关节空间之间的转换。
  • 速度控制:通过求解雅可比矩阵,实时调整机械臂末端的速度,实现对外力的响应。

相关文章:

机械臂力控方法概述(一)

目录 1. MoveIt 适用范围 2. 力控制框架与 MoveIt 的区别 3. 力控方法 3.1 直接力控制 (Direct Force Control) 3.2 间接力控制 (Indirect Force Control) 3.2.1 柔顺控制 (Compliant Control) 3.2.2 阻抗控制 (Impedance Control) 3.2.3 导纳控制 (Admittance Control…...

1971. 寻找图中是否存在路径

有一个具有 n 个顶点的 双向 图,其中每个顶点标记从 0 到 n - 1(包含 0 和 n - 1)。图中的边用一个二维整数数组 edges 表示,其中 edges[i] [ui, vi] 表示顶点 ui 和顶点 vi 之间的双向边。 每个顶点对由 最多一条 边连接&#x…...

FLINK SQL语法(1)

DDL Flink SQL DDL(Data Definition Language)是Flink SQL中用于定义和管理数据结构和数据库对象的语法。以下是对Flink SQL DDL的详细解析: 一、创建数据库(CREATE DATABASE) 语法:CREATE DATABASE [IF…...

【Fargo】1:基于libuv的udp收发程序

开发UDP处理程序 我正在开发一个基于libuv的UDP发送/接收程序,区分发送端和接收端,设计自定义包数据结构,识别和处理丢包和乱序。 创建项目需求 用户正在要求一个使用libuv的C++程序,涉及UDP发送和接收,数据包包括序列号和时间戳,接收端需要检测丢包和乱序包。 撰写代…...

WebSocket介绍和入门案例

目录 一、WebSocket 详解1. 定义与特点:2. 工作原理:3. 应用场景: 二、入门案例 一、WebSocket 详解 1. 定义与特点: WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行实时、双向的数据传…...

k8s集群版本升级

Kubernetes 集群版本升级是为了获得最新的功能、增强的安全性和性能改进。然而,升级过程需要谨慎进行,特别是在生产环境中。通常,Kubernetes 集群的版本升级应遵循逐步升级的策略,不建议直接跳过多个版本。 Kubernetes 版本升级的…...

XML 和 SimpleXML 简介

XML 和 SimpleXML 简介 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。它定义了一组规则,用于在文档中编码数据,以便人和机器都能理解。XML 的设计目标是既易于人类阅读,也易于机器解析。SimpleXML 是 PHP…...

MySQL 中 LIKE 语句的 `%` 和 `_` 以及 BLOB 和 TEXT 的详细解析和案例示范

1. LIKE 语句中的 % 和 _ 用法 1.1 % 通配符的用法 % 通配符代表零个或多个字符。它是 MySQL 中用于模糊匹配的强大工具之一,可以在任何字符的位置使用。 示例 1:查找以特定字符开头的记录 假设我们有一个电商订单系统的 orders 表,其中包…...

git clone卡在Receiving objects

git clone卡在Receiving objects 一直卡主 $ git clone gitxxx.git Cloning into xxx... remote: Enumerating objects: 75926, done. remote: Counting objects: 100% (18844/18844), done. remote: Compressing objects: 100% (6566/6566), done. Receiving objects: 60% (…...

vue+ant 弹窗可以拖动

通过自定义指令实现拖拽功能 在main.js里加入drag自定义指令 我自己测试时发现modal不管如何设置宽度,居中等,他的初始的left都为0,如果不设置好,容易出现点击后刚开始移动弹窗会偏移一段距离。 Vue.directive(drag, {bind(el)…...

(42)MATLAB中使用fftshift绘制以零为中心的功率谱

文章目录 前言一、MATLAB代码二、仿真结果画图 前言 在分析信号的频率分量时,将零频分量平移到频谱中心会很有帮助。本例给出绘制以零为中心的功率谱的方法。 一、MATLAB代码 代码如下: f 1; % 余弦波的振荡频率&#xf…...

Windows本地部署中文羊驼模型(Chinese-Alpaca-Pro-7B)(通俗易懂版)

最近由于项目原因需要部署大语言模型, 但碍于经济实力, 只能部署在笔记本电脑上部署量化模型, (电脑至少有16G运行内存),搜集了网上的相关部署资料仍然踩了不少坑,原因在于开源项目在不断更新,导致我们看了别人的教程仍…...

Web3的挑战与机遇:技术发展的现状分析

在Web3的世界中,去中心化和用户主权的理念正逐渐走向主流,推动了现有商业模式和技术生态系统的深刻变革。区块链技术及其核心应用之一——智能合约,正在促使这一转变的发生。智能合约的主要功能是通过自动化和预设协议执行,以减少…...

LangGraph - Hierarchical Agent Teams

本文翻译整理自 Hierarchical Agent Teams https://langchain-ai.github.io/langgraph/tutorials/multi_agent/hierarchical_agent_teams/ 文章目录 一、前言二、设置三、创建工具四、Helper Utilities五、定义代理 Team研究 Team文档写作Team 六、添加图层 一、前言 在前面的…...

2021-04-14 proteus中仿真时74HC245三态双向端口扩展输出

缘由proteus中仿真时74HC245输出时电平显示灰色(不确定电平状态)是为什么?-编程语言-CSDN问答 缘由C语言翻译单片机开关检测器-编程语言-CSDN问答 参考74ls245的工作原理及作用详解 - 电子发烧友网 参考74ls245_百度百科...

解决UNSPSC商品分类的层级不足的方法

《联合国标准产品和服务守则》(UNSPSC)是一个分层框架,旨在对产品和服务进行分类。其主要目标是通过提供统一的方法来对产品和服务进行分类,从而简化采购和供应链管理。 虽然 UNSPSC 有效地将产品分为各种商品类别,但…...

Pytest基于fixture的参数化及解决乱码问题

我们知道,Pytest是Python技术栈下进行自动化测试的主流测试框架。支持灵活的测试发现、执行策略,强大的Fixture夹具和丰富的插件支持。 除了通过pytest的parametrize标签进行参数化外,我们通过fixture的param参数也可以比较方便地实现参数化…...

使用excel.js(layui-excel)进行layui多级表头导出,根据单元格内容设置背景颜色,并将导出函数添加到toolbar

本段是菜狗子的碎碎念,解决办法请直接从第二段开始看。layui多级表头的导出,弄了两天才搞定,中途一度想放弃,还好坚持下来了。一开始用的是layui的toolbar里自带的那个导出,但是多级表头没有正常导出,单元格…...

Mysql 5.7 安装与卸载(非常详细)

一、环境介绍 操作系统:CentOS 7 MySQL:5.7 二、MySQL卸载 # 查看软件 rpm -qa|grep mysql # 卸载MySQL yum remove -y mysql mysql-libs mysql-common rm -rf /var/lib/mysql rm /etc/my.cnf 继续查看是否还有 MySQL 软件,有的话继续删…...

030 elasticsearch查询、聚合

文章目录 查询聚合查询RestHighLevelClientElasticsearchRestTemplat SpringData对ES客户端的封装:ElasticsearchRestTemplate SpringData对CRUD的封装:ElasticsearchRepository 原生ES客户端:RestHighLevelClient 查询 package com.xd.cube…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

Android15默认授权浮窗权限

我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

dify打造数据可视化图表

一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

深度学习习题2

1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

02.运算符

目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...

Python的__call__ 方法

在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...