MATLAB - 四旋翼机器人上的飞行机械臂路径规划

news2024/10/9 14:21:11

系列文章目录


前言

        本示例展示了如何使用 “浮动 ”类型的刚体关节(rigidBodyJoint)和操纵器RRT 为浮动基座系统规划无碰撞的几何路径。浮动基座系统的基座带有一个 “浮动 ”关节,可以在空间自由平移和旋转,因此具有六个自由度。本示例以安装了机械臂的四旋翼无人机为例说明浮动基座系统。

        要使用固定基座的刚体树(rigidBodyTree)对象对浮动基座系统进行建模,必须将浮体定义为通过 “浮动 ”关节连接到固定基座的刚体对象。请注意,这种建模方式无法对浮动基座系统进行逆运动学建模。要为浮动基座系统建模以进行逆运动学计算,请参阅浮动基座机器人的逆运动学。


一、将无人飞行器创建为浮动基座

        首先,创建一个空的刚体树和一个带有浮动关节的刚体。

uavWithArm = rigidBodyTree(DataFormat="row");
uav = rigidBody("uav");
uav.Joint = rigidBodyJoint("uav_base_floating_joint","floating");

        通过读取多旋翼无人机 STL 文件,以三角测量对象的形式获取四旋翼无人机的几何图形。

tr = stlread("multirotor.stl");

        缩放几何图形,使其尺寸更精确地反映真实四旋翼无人机的大小。

scaledtr = triangulation(tr.ConnectivityList,tr.Points/200);
trimesh(scaledtr);
title("UAV Triangulation")
xlabel("X (m)")
ylabel("Y (m)")
zlabel("Z (m)")
axis equal

[az,el] = view;

        请注意,碰撞几何体是非凸的。要为碰撞检测精确地模拟此几何体,可使用 collisionVHACD 函数将其分解为近似凸网格的复合体。

options = vhacdOptions("IndividualMesh",MaxNumConvexHulls=8,MaxNumVerticesPerHull=50);
compositeMeshes = collisionVHACD(scaledtr,options);

        使用 addCollision 将每个分解网格添加到刚体上。

for i = 1:length(compositeMeshes)
    addCollision(uav,compositeMeshes{i});
end

        将 UAV 刚体添加到浮动基座刚体树中,并将 UAV 可视化。

addBody(uavWithArm,uav,uavWithArm.BaseName);
show(uavWithArm,Collisions="on");
title("UAV Collision Mesh")
axis equal
xlabel("X (m)")
ylabel("Y (m)")
zlabel("Z (m)")
view([az,el])

二、在无人飞行器上安装机械臂

        为 Robotis 的开源机械臂加载刚体树。

openmanip = loadrobot("robotisOpenManipulator",DataFormat="row");

        要安装到无人飞行器底部的机械臂上,请设置机械臂第一个主体的固定变换,使机械臂在 Y 轴上旋转 pi 弧度,并应用一个小的 Z 轴平移偏移。Z 轴偏移是为了避免自碰撞。或者,也可以指定规划器的 SkippedSelfCollisions 属性,在自碰撞检查时忽略链接对。详情请参阅示例 “跳过特定体对间的自碰撞检查”。

fixedTF = eul2tform([0 pi 0])*trvec2tform([0 0 1e-4]);
setFixedTransform(openmanip.Bodies{1}.Joint,fixedTF);

        将机械臂刚体树模型安装到无人飞行器浮动底座上,并将无人飞行器与安装的机械臂可视化。

addSubtree(uavWithArm,"uav",openmanip);
show(uavWithArm,Collisions="on",Frames="off");
title("UAV With Mounted Robotic Arm")
axis equal
xlabel("X (m)")
ylabel("Y (m)")
zlabel("Z (m)")
view(225,15)

三、运动规划问题

        运动规划问题是要找到一条从起始关节构型到预期目标构型的无碰撞路径。为此,您必须定义问题的这些方面:

  • 起始关节构型
  • 目标关节构型
  • 无人机碰撞模型
  • 环境中的障碍物
  • 机器人运动学约束

3.1 起点和目标关节构型

        无人机的关节构型代表了无人机在世界中的姿态。因此,将描述无人机在世界中姿态的构型向量定义为 [q_\text{ uav }t_\text{uav }q_\text{robotic arm}],其中,

  • q_{\mathrm{uav}} 是刚体 “uav ”上的浮动关节相对于固定基座的方向,用 1-4 单位四元数表示;
  • t_{\mathrm{uav}} 是刚体 “uav ”上的浮动关节相对于固定基座的位置,用 1-3 向量表示;
  • q_\text{robotic arm} 是机器人手臂 openmanip 的关节构型向量,用 1-6 向量表示。

        将浮动体 “uav ”的起始构型设置为 xyz 坐标 [0 0 -1] 和机械臂第三个关节的-pi/3 rad。

qstart = homeConfiguration(uavWithArm);
qstart(5:7) = [0 0 -1];
qstart(end-3) = -pi/3;

        使用起始构型并对其进行修改,得到目标构型。将主体 “uav ”的目标构型设置为 xyz 坐标 [2 0 2],方向为 [pi/2 0 0] 欧拉 ZYX。

qgoal = qstart;
qgoal(5:7) = [2 0 2];
qgoal(1:4) = eul2quat([pi/2 0 0]);

3.2 在环境中添加障碍物

        使用碰撞盒创建环境,并设置碰撞盒的位置,使其在起点和目标构型之间形成一堵墙。

env={collisionBox(0.5,4,3,Pose=trvec2tform([1.0 0.0 -1.3])),...
     collisionBox(0.5,4,1.5,Pose=trvec2tform([1.0 0.0 1.8]))};

        可视化规划问题。显示碰撞几何图形并隐藏无人飞行器上的坐标系。

figure
show(uavWithArm,qstart,Collisions="on",Frames="off");
hold on
showCollisionArray(env);
show(uavWithArm,qgoal,Collisions="on",Frames="off");
title("Planning Problem")
view(0,0)
hold off

3.3 机器人运动学约束

        在本示例中,设置与 “uav ”刚体相关的浮动关节的平移位置限制(PositionLimits),使其在工作空间坐标系的 X 轴[-1,3]、Y 轴[-2,2]和 Z 轴[-2.5,2.5]的笛卡尔边界(例如物理安全笼)内飞行。请注意,浮动刚体关节的旋转限值无法设置,且为 NaNs。

uavBody=getBody(uavWithArm,"uav");
uavBody.Joint.PositionLimits(5:end,:)=[-1,3;-2,2;-2.5,2.5];

四、查找无碰撞路径

        查找起始关节和目标关节构型之间的无碰撞路径。为了找到这样一条路径,本示例使用操纵器RRT 来规划一条几何无碰撞路径。

rrt = manipulatorRRT(uavWithArm,env, ...
    MaxConnectionDistance=0.5, ...
    ValidationDistance=0.1, ...
    SkippedSelfCollisions="parent");

        为随机数生成器加种子,使用 RRT 规划路径,缩短输出规划,并对缩短后的路径进行插值,使其更加平滑。

rng(0,"twister");
plannedpath = plan(rrt,qstart,qgoal);
shortenedPath = shorten(rrt,plannedpath,40);
rrtpath = interpolate(rrt,shortenedPath,10);

五、可视化计划路径

        以动画形式可视化安装了机械臂的无人机的计划几何路径。

show(uavWithArm,qstart,Collisions="on");
title("UAV Flight Animation")
view(0,0)
hold on
plot3(rrtpath(:,5),rrtpath(:,6),rrtpath(:,7),"k-",LineWidth=1)
showCollisionArray(env);
rc = rateControl(10);
for i = 1:1:size(rrtpath,1)
    show(uavWithArm,rrtpath(i,:),...
        PreservePlot=false,...
        FastUpdate=true, ...
        Frames="off", ...
        Collisions="on");
    waitfor(rc);
    view(0,0)
end
hold off

        请注意,机械臂也会沿路径移动,以避免与环境中的障碍物相撞。绘制计划路径中机械臂的关节角度。

plot(rrtpath(:,8:end),"-")
title("Robotic Arm Joint Angles")
xlabel("Time (s)")
ylabel("Joint Angle (rad)")
legend("Joint "+string(1:6))

六、下一步

6.1 为运动计划添加约束条件

        请注意,规划的几何路径并没有对无人机施加任何方向限制,插值状态也没有施加运动学约束以实现可行的轨迹。要在几何路径中添加此类运动学约束,可使用从操纵器状态空间(manipulatorStateSpace)派生的自定义导航状态空间(nav.StateSpace)。请参考 “使用机械手状态空间的末端执行器约束规划路径 ”文档示例。

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

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

相关文章

Tita使用小技巧:项目类型自定义,业务管理个性化

应用场景 某互联网企业,企业内部有研发部,有销售部 研发部通常需要管理各种技术研发类型项目,因此需要管理「研发型」项目,该类型项目需要明确「所属产品」、「级别管理:国家级/省市级」、「项目类别:创新…

DS1302时钟模块(STM32)

目录 一、介绍 二、模块原理 1.原理图 2.引脚描述 3.工作原理:读/写时序 4.寄存器地址/定义 三、程序设计 main.c文件 ds1302.h文件 ds1302.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 DS1302是一款由达拉斯半导体(Dallas Semic…

货拉拉冲刺上市:周胜馥已“套现”16亿元,被指经营管理问题突出

撰稿|多客 来源|贝多财经 10月2日,货拉拉以“拉拉科技控股有限公司-W(简称“拉拉科技”,英文名:Lalatech)”为主体更新递交招股书,继续冲刺港交所上市。此前,货拉拉曾分别于2023年3月、2023年…

面试中遇到的关于Transformer模型的问题有哪些?

Transformer是深度学习中极具影响力的模型架构之一,广泛应用于自然语言处理、计算机视觉等领域。它通过自注意力机制和并行计算等特点,取得了比传统模型(如RNN、LSTM)更优异的性能。本文将针对Transformer的多个关键问题进行详细探…

1,STM32CubeMX生成第一个freeRTOS工程

1,前言 本章内容是CubeMX工程配置freeRTOS的demo工程,后续其他本专栏文章中不再提及,默认在本章内容上完成。 单片机型号:STM32F407 编程环境 :STM32CubeMX Keil v5 2,STM32CubeMX新建工程 双击打开ST…

最新2024 LLM大模型学习路线图:从入门到精通的完整路径,收藏一下吧很难找全的!

ChatGPT的出现在全球掀起了AI大模型的浪潮,2023年可以被称为AI元年,AI大模型以一种野蛮的方式,闯入你我的生活之中。 从问答对话到辅助编程,从图画解析到自主创作,AI所展现出来的能力,超出了多数人的预料&…

JSBSim脚本运行结果

JSBSim 读取飞机xml文件:a 1982 Cessna 172P "C:\jsbsim-master\aircraft\c172p\c172p.xml"上面是文件位置,下面是读取的结果 JSBSim Flight Dynamics Model v1.2.0.dev1 Oct 5 2024 21:22:03[JSBSim-ML v2.0]JSBSim startup beginning ...…

15个出色和使用的python库用于制图与GIS分析

用于 GIS 和制图的 Python 库。Python 库是 GIS 的终极扩展,因为它们允许你增强其核心功能。通过使用 Python 库,你可以摆脱 GIS 的束缚,深入研究一些严肃的数据科学。Python有200 多个标准库。但也有数千个第三方库。所以,你能走…

必须保证信号连续的原因

**引言:**本文首先总体叙述了信号线不连续的情况,然后通过仿真,更直观的表达了各种阻抗不连续对传输线带来的影响,最后针对信号线提出了相应的措施。 信号不连续的情况(阻抗不连续) 1、 参考平面不一致 …

Unity实现自定义图集(五)

以下内容是根据Unity 2020.1.0f1版本进行编写的   在Unity编辑器上的自定义图集已经完成了,但是如何将自定义图集文件打包,以及在移动平台将自定义图集和对应的纹理图(Texture)加载出来是个问题,本篇就来解决这些问题 1、思路 首先是自定义图集的打包。 自定义图集实际…

总结β光滑性的推论

文章目录 1. β光滑性的定义2. 补充知识柯西-施瓦茨不等式中值定理 3. β光滑性的推论4. β光滑性推论的证明 1. β光滑性的定义 2. 补充知识 柯西-施瓦茨不等式 中值定理 3. β光滑性的推论 4. β光滑性推论的证明 其中,第4步:使用梯度差的界限中的小于…

实战分析:为什么TAPD是提升团队协作效率的关键工具?

随着企业的不断发展,企业的团队协作能力变得越来越重要,不同类型的企业,在不同的发展阶段,需要的协作方法和工具是不完全相同的。为了在这个快节奏的环境中保持竞争力,许多企业都在寻找能够有效提升团队协作效率的工具…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04目录1. A Multiple-Fill-in-the-Blank Exam Approach for Enhancing Zero-Resource Hallucination Detection in Large Langua…

en造数据结构与算法C# 之 堆排序

堆的特点 堆排序有两个分类:大顶堆,小顶堆 比如大顶堆就是说所有根节点的值都比左右子节点大 en造数据结构与算法C# 二叉排序树 泛型类的基本构成-CSDN博客 en造数据结构与算法C# 之 二叉排序树的增/查-CSDN博客 en造数据结构与算法C# 之 二叉排序…

YOLO11涨点优化:注意力魔改 | 双重注意力机制DoubleAttention,有效地捕获图像中不同位置和不同特征的重要性

💡💡💡本文改进内容: DoubleAttention该网络结构采用双重注意力机制,包括Spatial Attention和Channel Attention,有效地捕获图像中不同位置和不同特征的重要性 💡💡💡本文改进:分别加入到YOLO11的backbone、neck、detect,助力涨点 改进1结构图: 改进2结构图…

『网络游戏』XML配置文件随机名字【12】

首先制作xml模板 在桌面上创建txt自定义重命名water 将以下代码复制在txt文本中修改后缀为.xml <?xml version"1.0" encoding"UTF-8"?> <root> <item ID""> <surname></surname> <man…

科技云报到:云服务的中场战事,从AI应用开始

科技云报到原创。 从去年的大模型之战&#xff0c;到今年的AI应用之争&#xff0c;云服务正在迈入全新的发展阶段。AI这个杠杆将各家厂商的竞争策略更向前推进了一步。 “云AI”能够孵化出多少可能&#xff1f;在业界眼中&#xff0c;“云AI”则意味着新的悬念&#xff1a;云计…

调度台设计厂家智能化管理体系中到底有多重要?

在当今这个信息化、智能化高速发展的时代&#xff0c;调度台作为各类指挥中心、监控中心及应急响应系统的核心枢纽&#xff0c;其设计与制造水平直接关系到整个系统的运行效率与稳定性。因此&#xff0c;选择一家专业、可靠的调度台设计厂家&#xff0c;成为了众多企事业单位在…

微信小程序——婚礼邀请函

一、界面设计 首页&#xff1a; 精美的婚礼主题背景图&#xff0c;可能是新人的婚纱照或浪漫的插画。温馨的欢迎语&#xff0c;如 “欢迎参加我们的婚礼”。一个 “打开邀请函” 的按钮&#xff0c;引导用户进入邀请函详情页面。 邀请函详情页面&#xff1a; 顶部展示新人的照片…

瑞华技术募资额巨降过半:业绩大幅下滑,信用期外应收账款占比高

《港湾商业观察》黄懿 上市的节奏有快有慢&#xff0c;常州瑞华化工工程技术股份有限公司&#xff08;下称“瑞华技术”&#xff0c;920099.BJ&#xff09;自2023年3月被北交所受理后&#xff0c;于2024年8月29日获得注册批文&#xff0c;9月25日正式挂牌上市。 据了解&#…