麦克纳母轮(全向)移动机器人集群控制的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;导入…

Windows10安装Docker Desktop - WSL update failed

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

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

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

【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…

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

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

【Basic】BUU LFI COURSE

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

【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;线程是“一…

2024中青杯数学建模C题:“X 疾病”在人群中的传播代码论文思路分析

2024中青杯数学建模C题论文和代码已完成&#xff0c;代码为C题全部问题的代码&#xff0c;论文包括摘要、问题重述、问题分析、模型假设、符号说明、模型的建立和求解&#xff08;问题1模型的建立和求解、问题2模型的建立和求解、问题3模型的建立和求解&#xff09;、模型的评价…

c++ queue容器

在C标准库中&#xff0c;std::queue 是一个容器适配器&#xff0c;它提供了队列&#xff08;FIFO - First In First Out&#xff09;的数据结构。队列是一种特殊的线性数据结构&#xff0c;只允许在表的前端&#xff08;front&#xff09;进行删除操作&#xff0c;而在表的后端…

nssctf(Web刷题)

[SWPUCTF 2021 新生赛]gift_F12 打开题目是一个时间页面&#xff0c;不过看了一会儿发现没有什么用 直接F12打开网页源代码 CtrlF搜索flag 找到了flag NSSCTF{We1c0me_t0_WLLMCTF_Th1s_1s_th3_G1ft} [第五空间 2021]签到题 NSSCTF{welcometo5space} [SWPUCTF 2021 新生赛…

钉钉算是在线办公系统的设计标杆,尽管它依然很难用

不吹不黑&#xff0c;钉钉界面谁的的确简洁&#xff0c;无奈它面向的是场景复杂的办公领域&#xff0c;导致其越来越臃肿难用&#xff0c;反正我是该研究研究&#xff0c;但绝对不会用的。 举报 评论 1

Invoking “make cmake_check_build_system“ failed

前言&#xff1a; 在看过站内其他的方法且试过之后没奏效之后&#xff0c;偶然&#xff0c;无意间&#xff0c;随手整对了&#xff0c;然后后续在老赵的文档也找到了原因&#xff0c;对的上号&#xff0c;那在此我提出一种新的方法&#xff0c;且很简单的小tips。首先先来看看…

数据挖掘与机器学习——机器学习概述

一、什么是机器学习 机器学习的英文名称叫Machine Learning&#xff0c;简称ML&#xff0c;该领域主要研究的是如何使计算机能够模拟人类的学习行为从而获得新的知识。 机器学习与数据挖掘的联系&#xff1a;简单来说&#xff0c;机器学习就是让计算机从大量 的数据中学习到相关…

yaml文件格式详解 及 k8s实战演示

目录 一 k8s 支持的语言格式 1&#xff0c;YAML 语法格式 2&#xff0c;查看 api 资源版本标签 二 k8s 运行nginx pod实例 yaml文件 具体讲解 1&#xff0c;写一个yaml文件demo 2&#xff0c;deployment 管理nginx 的yaml 文件 3&#xff0c;创建资源对象 4&#…

【四、性能测试】Linux stress 压力模拟测试工具

在做 CPU 问题解析之前&#xff0c;需要先了解一下压力模拟工具&#xff0c;可以将 CPU、MEM、IO 等进行压力模拟&#xff0c;可以在模拟压力的过程中进行问题解析 一、STRESS 模拟对CPU、Memory、IO、磁盘进行压力测试。可以使用 stress 工具&#xff0c;它是专门针对 linux…