麦克纳母轮(全向)移动机器人集群控制的Simulink/Simscape虚拟仿真平台搭建

      麦克纳姆轮是一种常见的全向移动机构,可以使机器人在平面内任意方向平移,同时可以利用差速轮车的属性实现自转,能够在狭窄且复杂多变的环境中自由运行,因而被广泛应用于竞赛机器人和特殊工业机器人场景。

       Ps:最新的BYD仰望U8也有一款是麦克纳母轮版本,但是由于运动的不稳定性和轮胎摩擦大等问题,始终不能大规模量产,B站有个up主特别搞笑,还可以用个管子去塞住仰望U8的麦克纳母轮间隙,想着开在路上这么多杂物还实在是难绷。而且由于他的运动学原理规定了他的移动速度不能过快,如果在崎岖不平的路面,可能会造成辊棒无法分解为横向和纵向两个分力,不能分解力就会造成侧移误差。而且麦轮在这种崎岖不平的路面存在较大的滚动摩擦,辊棒的磨损比汽车那种普通轮胎要更严重,继而带来的是使用成本的增加,所以麦轮只适用于低速场景和比较平滑的路面。即使满足路面平滑的要求了,汽车乘坐的舒适性也需要考虑,辊棒永远不会像轮胎那样始终与地面接触,这样就会造成颠簸震动。在实际的应用过程中我也发现,单纯靠开环位置控制和速度控制是无法实现麦轮移动机器人的精准控制的,需要添加姿态反馈和实时的位置反馈才能做到,这也是因为路面和轮子误差的问题,这也是他无法做到普及的原因。

特性和控制问题:

       但是呢,在室内狭隘的环境,他能做到不完整约束机器人做不到的事情,例如自动旋转侧移去完成所需要的任务,为此,本文基于MATLAB Simulink的Simscape模块介绍一个麦轮移动机器人具体的控制建模过程,包含麦轮的建模,运动学和动力学模型,simscape导入搭建、力接触配置、位置环和转速环PID控制策略

1. 麦克纳母轮移动机器人运动学和动力学建模

1.1 运动学方程

      运动学模型(可以参考论文或者古月居的文章,都有建模)是为了构建起电机驱动角度坐标系、机器人坐标系和大地坐标系三者之间的实时相互映射关系。 

以单个轮子为例:

当单独考虑四个轮子时:

因此,正运动学方程如下:

逆运动学方程:

1.2 动力学方程

      目前有两种方式构建动力学,一种是利用轮子的受力构建起牛顿力学方程,第二种事利用欧拉拉格朗日构建起能量的守恒方程。 

2. 麦克纳母轮移动机器人Simulink/Simscape模型建立

2.1. 单个麦克娜姆轮车的控制回路

 2.2. 底盘到轮子法兰的变换关系

2.3 传感器配置 

 2.4. 单个轮子的接触力配置

  2.5. 空间位置和姿态环PID

function [v_x1, v_y1, omega, Bias] = My_position_loop(K_dis, K_angle, p_x, p_y, angle_z, Target_x, Target_y, Target_angle_z)
v_x1 =0;
v_y1 =0;
delta_x =  Target_x-p_x;
delta_y =  Target_y-p_y;
DIF_x = delta_x * cos(angle_z) - delta_y * sin(angle_z);
DIF_y = delta_x * sin(angle_z) + delta_y * cos(angle_z);
DIF_anglez= Target_angle_z -  angle_z;
Bias = sqrt(DIF_x^2 + DIF_y^2);
Target_V = K_dis * Bias;
angle = atan2(abs(DIF_y), abs(DIF_x));
if Bias > 0.2temp_x = Target_V  * cos(angle);temp_y = Target_V  * sin(angle);omega = K_angle * (DIF_anglez);if DIF_x >=0 && DIF_y >=0v_x1 = temp_x;v_y1 = temp_y;elseif DIF_x >=0 && DIF_y < 0v_x1 = temp_x;v_y1 = -temp_y;elseif DIF_x <0 && DIF_y < 0v_x1 = -temp_x;v_y1 = -temp_y;elseif DIF_x <0 && DIF_y >= 0v_x1 = -temp_x;v_y1 = temp_y;end
elsev_x1 = 0;v_y1 = 0;omega = K_angle * (DIF_anglez);
end
end

  2.5. 运动学速度映射 

function [wd1, wd2, wd3, wd4, flag_A, flag_B, flag_C, flag_D] = statetotheta(R, l_a, l_b, v_x, v_y, omega)
robot_state = zeros(3, 1);
J =[1, 1, (l_a + l_b);1,  -1, -(l_a + l_b);1,  -1, (l_a + l_b);1, 1, -(l_a + l_b)];
robot_state(1) = v_x;
robot_state(2) = v_y;
robot_state(3) = omega;
theta = (1 / R) * J * robot_state;
wd1 = theta(1);
wd2 = theta(2);
wd3 = theta(3);
wd4 = theta(4);
if wd1 >= 0flag_A=1;
elseflag_A=-1;
end
if wd2 >= 0flag_B=1;
elseflag_B=-1;
end
if wd3 >= 0flag_C=1;
elseflag_C=-1;
end
if wd4 >= 0flag_D=1;
elseflag_D=-1;
end
end

3. 电机增量式PID控制器设计

function [U, Bias] = PID(A_0, A_1, Target_A, Encoder, U_now,Last_bias)
Bias =  Target_A - Encoder;
U = U_now + A_0*(Bias - Last_bias) + A_1 * Bias;
end

3. 模型和参数配置

 包括机身的尺寸,摩擦系数,PID增益,滤波器模型,状态初值等等。

A=[1,-1.778631777824585,0.800802646665708];
B=[0.005542717210281,0.011085434420561,0.005542717210281];
l_a=(0.15);
l_b=(0.108+0.032);
l_wheel=0.108;
R_wheel=0.05;
dc=1.000000000000000e-05;
dcr=1.000000000000000e-03;
df=0.3;
dm=1000;
Ki=0.002;
Kp=0.08;
K_dis = 0.095;
K_angle = 0.45;
sf=0.50;
st=1000000;
T=0.01;
numFF=[0.00554271721028068,0.0110854344205614,0.00554271721028068];
denFF=[1,-1.77863177782459,0.800802646665708];
FF=tf(numFF,denFF);
FF.Ts=T;
Ki_angle=1;
Kp_angle=1;
x2_0 = -0.8;
y2_0 = pi+0.8;
z2_0 = 0.05;
x1_0 = -0.8;
y1_0 = -0.8+pi;
z1_0 = 0.05;
x_0 = 0;
y_0 = pi;
z_0 = 0.05;
offset_x1 = -0.8;
offset_x2 = -0.8;
offset_y1 = 0.8;
offset_y2 = -0.8;

4. 仿真效果

4.1. 轨迹曲线

 4.2. 其中一个电机的期望和实际跟踪曲线

  4.3. 空间状态期望和实际跟踪曲线

   4.3. Simscape实际仿真效果

5. 实验效果

该实验也是硕士时候和好哥们合作做的,仅供参考,任务不一样,但是核心算法都是编队规划和PID控制。

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

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

相关文章

项目启动失败,【consul】

如题&#xff0c;启动时项目未能正常启动&#xff0c;但上次都一切正常&#xff0c;日志提示&#xff1a; Consul service ids must not be empty, must start with a letter 经过排查是因为consul的consulconfigservice服务假死&#xff0c;导致无法正常获取到配置文件&am…

【全开源】Java无人共享棋牌室茶室台球室系统JAVA版本支持微信小程序+微信公众号

开启智能共享新时代 一、系统源码概述&#xff1a;引领自助服务潮流 随着科技的不断发展和人们生活节奏的加快&#xff0c;自助服务已逐渐成为人们生活中的一部分。为了满足市场对无人共享棋牌室、茶室、台球室的需求&#xff0c;我们推出了全新的无人共享系统源码。这套源码…

使用决策树对金融贷款数据进行分析

使用决策树对金融贷款数据进行分析 在本篇博客中&#xff0c;我们将通过使用 Python、Pandas 和多种机器学习技术&#xff0c;对一组贷款数据进行全面分析。通过详细的步骤展示&#xff0c;你将学会如何进行数据预处理、可视化分析以及构建预测模型。 第一步&#xff1a;导入…

Sping源码(七)—ConfigurationClassPostProcessor —— 后续处理

序言 前面的文章中介绍了 parser.parse(); 方法的整体处理逻辑&#xff0c; 其中包括Bean、Import、Configuration、CompopnentScan、Component等注解的解析。 来看看注解解析完的后续工作都做了些什么&#xff1f; 源码片段 简单回顾一下主方法processConfigBeanDefinition…

如何在Python爬蟲中設置代理伺服器?

在實際應用中&#xff0c;爬蟲可能會遇到各種限制&#xff0c;如IP封鎖、訪問限制等。通過使用代理伺服器&#xff0c;可以有效地繞過這些限制&#xff0c;提升爬蟲的效率和隱私保護。本文將詳細介紹如何在Python爬蟲中設置代理伺服器&#xff0c;包括使用requests、urllib、Sc…

Windows10安装Docker Desktop - WSL update failed

按照提示更新wsl后&#xff0c;仍然会报错&#xff0c;github上没有找到解决方法。版本28、29、30都会报这个错。 经过尝试&#xff0c;将docker内的设置中&#xff0c;采用wsl禁掉即可。如下图&#xff1a;

《球》

描述 输入球体的半径r&#xff0c;类型为double&#xff0c;求球的体积&#xff0c;结果保留3位小数。 (注&#xff1a;球的体积计算公式为V4/3∗π∗r3&#xff0c;此处π3.1415&#xff09; 输入描述 输入球体的半径r&#xff0c;类型为double 输出描述 求球的体积&#xf…

55. UE5 RPG 处理当前功能在多人模式中的问题

在UE里面&#xff0c;我们运行项目可以设置多种网络模式&#xff0c;主要是分为三种&#xff1a; 运行Standalone 就是单人模式&#xff0c;没有网络交互以监听服务器运行&#xff0c;在界面里运行的游戏会作为服务器使用以客户端运行&#xff0c;UE会单独运行一个线程作为服务…

Java 解析 Linux 不同压缩文件的方法及注意事项

背景 commons-compress 包提供了归档压缩文件的工具类&#xff0c;java.util 里面包含了 Zip 和 gz 文件的解压方法&#xff0c;最终以按扁平方式&#xff0c;遍历到全部文件的文件&#xff0c;包括子目录下的文件。使用 Java 实现的日志采集系统涉及到对压缩文件的解析&#…

【Linux】套接字的理解 基于TCP协议的套接字编程(单/多进程 / 线程池|英汉互译 / C++)

文章目录 1. 前言1.1 网络方面的预备知识&#x1f447;1.2 了解TCP协议 2. 关于套接字编程2.1 什么是套接字 Socket2.2 socket 的接口函数2.3 Udp套接字编程的步骤2.4 sockaddr 结构 3. 代码实现3.1 makefile3.2 log.hpp3.3 tcp_server.hpp① 框架② service() 通信服务③ init…

记录docker ps查找指定容器的几个命令

1.docker ps | grep registry 查询包含registry的容器 2.docker ps | grep -E "reigistry\s" 开启正则匹配模式&#xff0c;匹配registry后面为空格的容器&#xff0c;若是匹配一整行可以这样写docker ps | grep -E "^([0-9a-f]{12})\sregistry\s.*" 这…

电视机顶盒哪个牌子好?618畅销电视机顶盒排行榜

电视机顶盒是我们使用最多的&#xff0c;不管看直播、动画、追剧、上网课都少不了它的存在。大促期间很多朋友问我电视机顶盒哪个牌子好&#xff0c;小编按照各平台的销量情况整理了618畅销电视机顶盒排行榜&#xff0c;看看哪些品牌的电视机顶盒是最受欢迎的吧。 TOP 1&#x…

为了更全面地分析开发人员容易被骗的原因和提供更加深入的防范措施

为了更全面地分析开发人员容易被骗的原因和提供更加深入的防范措施&#xff0c;我们可以进一步探讨以下几个方面&#xff1a; 深入技术细节 不安全的代码注释和文档&#xff1a; 原因&#xff1a;开发人员在代码注释中可能会无意间透露敏感信息&#xff0c;如API密钥、密码或系…

通过扩展指令增强基于覆盖引导的模糊测试

本文由Bruno Oliveira于2024年4月25日发表于IncludeSec的官方网站上。作为IncludeSec的安全研究人员&#xff0c;在他们日常的安全审计和渗透测试工作中&#xff0c;有时需要为客户开发一些模糊测试工具。在安全评估方法中使用模糊测试技术&#xff0c;可以有效地在复杂的现代化…

git 派生仓库怎么同步主仓库的新分支

一、git 派生仓库怎么同步主仓库的新分支 要使你的Git派生仓库同步主仓库的新分支&#xff0c;请遵循以下步骤&#xff1a; 1、添加上游仓库&#xff08;如果尚未添加&#xff09;: 如之前所述&#xff0c;确保上游仓库已经被添加到你的本地仓库。如果没有&#xff0c;使用命…

【Basic】BUU LFI COURSE

文章目录 前言一、BUU LFI COURSE二、知识点PHP的危险函数路径遍历攻击 解题感悟 前言 话不多说直接看题 一、BUU LFI COURSE emmm什么提示也没给啊&#xff0c;那只能点开看一看线索了 okok咱们先分析一下这段php代码 <?php /*** Created by PhpStorm.* User: jinzhao*…

哪类漏洞容易被攻破

这个取决于多种因素&#xff0c;包括漏洞的严重程度、攻击者的技术能力和资源、目标系统的安全配置等。然而&#xff0c;一些常见的漏洞类型由于其普遍性和严重性&#xff0c;往往更容易被攻破。 例如&#xff0c;跨站脚本&#xff08;XSS&#xff09;漏洞是一种非常常见的安全…

怎么安装django特定版本

要安装Django的特定版本&#xff0c;你可以使用Python的包管理工具pip。以下是在命令行中安装Django特定版本的步骤&#xff1a; 确保你的计算机上已经安装了Python和pip。如果没有安装&#xff0c;你可以从Python官方网站下载并安装最新版本的Python&#xff0c;pip通常会随Py…

【HCIP学习】RSTP和MSTP

一、RSTP&#xff08;Rapid Spanning Tree Protocol&#xff0c;快速生成树&#xff09; 1、背景&#xff1a;RSTP从STP发展而来&#xff0c;具备STP的所有功能&#xff0c;可以兼容stp运行 2、RSTP与STP不同点 &#xff08;1&#xff09;减少端口状态 STP:disabled\blockin…

线程的概念和控制

文章目录 线程概念线程的优点线程的缺点线程异常线程用途理解虚拟地址 线程控制线程的创建线程终止线程等待线程分离封装线程库 线程概念 什么是线程&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一…