MATLAB与ROS联合仿真——控制类功能模块介绍

1、Keyboard Control

(1)输入参数:无

(2)输出参数:Speed Factor为输出的速度系数(1代表前行,0停止,-1代表后退),Turn Factor为输出的舵机系数(1代表左转,0代表前行或后退,-1代表右转),Switching Signals为一路控制信号,当键盘输入0时,该参数输出0,键盘输入1时,该参数输出1。

(3)主要作用:键盘输入w小车前行,键盘输入s小车后退,键盘输入a小车左转,键盘输入d小车右转,键盘输入0第三个端口输出0, 键盘输入1第三个端口输出1,键盘输入其他按键小车停止运动。

(4)内部结构:

(5)具体实现过程:从实验资料中获取Keyboard模块,该模块有两个输出,当你从键盘按下一个按键时,第一个输出会输出其对应的Ascall码值,第二个输出我们并不关心。

接下来使用if模块分情况进行讨论,按照我们的需求,将keyboard第一个输出的分为119、115、97、100、48、49和其他7种情况

接下来使用if action模块配合if模块,将if模块所分的7种情况,配置其对应的输出,比如当if模块输出为119时,也就是对应键盘输入了w,此时我们想让小车直着往前走,那么速度系数应该输出1,转向系数输出0,为了简洁,我们将其用constant模块写成向量[1 0]的形式,if模块输出为119时对应的if action模块如下图所示:

以此类推,当键盘输入s时对应的if action模块应该输出[-1 0],当键盘输入a时对应的if action模块应该输出[1 1],当键盘输入d时对应的if action模块应该输出[1 -1],当键盘输入其他按键时对应的if action模块应该输出[0 0]

以上五种情况每种情况各对应一个包含两个元素的向量,但是他们应该对应于同一个变量,因此需要使用merge模块将其融合为一个变量

此时我们想将速度系数与转向系数进行拆分,并独立输出,此时就要用到Demux模块

如果你想看一下输出的数字是多少,可以使用display模块,到这里前五种情况就配置好了,对应的第一个和第二个输出也就配置好了,还剩下的第六第七种情况对应第三个输出,有了上面的介绍大家可以很简单的写出,就不介绍了,不过有一点需要注意,为了让默认情况下(当键盘没有输入0和1时,该变量默认为0)小车是运动的,当键盘输入0时,应该输出1,键盘输入1时,应该输出0

(6)其他说明:无

2、Pure Tracking Controller C

(1)输入参数:speed为小车的运动速度,k为需要调节的纯跟踪算法的系数,L为小车前轮与后轮之间的距离,如实验中用到的阿克曼小车为0.335,单位m,yaw是小车坐标系(机器人坐标系)X轴与世界坐标系X轴之间的夹角,xr和yr为小车在世界坐标系下当前的位置坐标,X和Y世界坐标系下当前目标点的位置坐标

(2)输出参数:angel为舵机打角(弧度制),Xe和Ye分别为世界坐标系下当前位置与目标位置的横纵坐标之差

(3)主要作用:在已知小车当前位置及目标位置的情况下,通过纯跟踪算法计算出小车应该输出的舵机打角,从而控制小车从当前位置移动到目标位置,同时输出目标位置与当前位置的距离差

(4)内部结构:

(5)具体实现过程:在这里大家需要回顾机器人学中的坐标变换的相关知识,及简单了解纯跟踪算法的推导过程及工作原理,然后就可以写出以下的纯跟踪控制器的代码

(6)其他说明:参考资料

    

   机器人学基础知识回顾

      纯跟踪算法推导过程

(9中的sina可以用8和ld=K*Vx进一步化简)

3、Target Point Parking Control C

(1)输入参数:key为预留的交互按钮接口,用来控制该模块是否发挥作用,当key为1时开启目标点停车,为0时关闭目标点停车 ,inspeed和inangle为小车的速度和舵机打角,Xe和Ye分别为世界坐标系下当前位置与目标位置的横纵坐标之差 ,Accuracy用来设定目标点停车的控制精度,由于阿克曼转向车的灵活性有限,很难完美的到达我们设定的停车点,这个参数用来设定我们允许的误差是多少,该参数不宜太小,太小后一直达不到,阿克曼小车到达目标点附近时就会不停的围绕目标点画圈,比如车速为0.7m/s时,可设定该误差为0.1m左右

(2)输出参数:outspeed和outangle经过该模块控制后的小车的速度及舵机打角,当启用该模块时,到达目标点的误差范围之内时,outspeed和outangle输出值均为0,其他情况下 outspeed和outangle的输出值分别与输入的inspeed和inangle相等

(3)主要作用:当启用该模块的情况下,若小车到达目标点的误差范围之内,则将小车的速度及舵机打角设为0,使小车停止运动

(4)内部结构:

(5)具体实现过程:根据以上的介绍,不难写出以下代码

(6)其他说明:无

4、Speed  Controller C

(1)输入参数:kp为需要调节的比例系数,Xe和Ye分别为世界坐标系下当前位置与目标位置的横纵坐标之差 ,speed_max为设定输出的速度上现是多少,实验中车身长为0.335m,结合实际设置即可,比如可设为3m/s

(2)输出参数:speed为小车的运动速度

(3)主要作用:根据小车的当前位置与目标点位置的距离差,对小车的速度进行调节,距离差越大输出速度就越大,通过比例系数kp进行调节,来达到更好的跟踪效果

(4)内部结构:

(5)具体实现过程:根据以上的介绍,不难写出以下代码

(6)其他说明:注意一定要在speed的输出之前加一个memory模块,这里涉及到逻辑问题,在实验中会对此进行介绍

5、Control signals Management C

(1)输入参数:key为预留的交互按钮接口,用来控制是否开启键盘控制,当key为1时开启键盘控制,为0时关闭键盘控制 ,speed和angle为小车的速度和舵机打角,Speed_Factor和Turn_Factor为键盘控制模块输出的小车的速度系数和舵机打角系数,Switching为键盘控制模块输出可控0和1信号,key_Speed_Set和key_Angle_Set为使用键盘对小车的运动进行控制时的小车速度和舵机打角,均应该设为正数,比如0.7和0.4

(2)输出参数:speed为小车的运动速度,Angle为小车的舵机打角

(3)主要作用:对小车的控制信号进行宏观控制,避免小车同时接受键盘的控制信号和跟踪轨迹或目标点时控制器输出的控制信号而造成的运动冲突,当key的值为1时,该模块切断跟踪目标点或轨迹控制器输出的speed和angle信息,小车仅接收来自键盘的控制信息,并根据键盘信息与key_Speed_ Set和key_Angle_Set的值配合得到并输出小车的Speed和Angle,当key的值为0时,小车按照跟踪轨迹或目标点时控制器输出的控制信号进行运动,此时可使用键盘输入0来停止运动或键盘输入1来继续运动,而除此之外的键盘输入信息被屏蔽,不再发挥作用。

(4)内部结构:

(5)具体实现过程:根据以上的介绍,不难写出以下代码

(6)其他说明:在键盘控制模块中,键盘输入0时,Switching输出为1,键盘输入1时,Switching输出为0,要想达到输入0小车停止运动,输入1小车继续运动的效果,需要用(1-Switching) 作为系数。

6、Navigation Point Setting C

(1)输入参数:xr和yr是当前小车的位置,point是设定的一系列导航目标点,使用constant模块以一维向量的形式给定,可以给定任意多个点,比如想要小车依次经过点(5,6)点(3,4),则point输入端输入为[5 6 3 4]

Error_accuracy用于设定与目标点距离多近时,认为已到达目标点,可设为0.2,用于多个目标点的自动切换

(2)输出参数:x和y是当前给定的目标点的坐标

(3)主要作用:给定一系列目标点,根据小车的实时位置,自主判断是否已经到达当前的目标点,若已到达,则自主将目标点切换为下一个目标点。可用于对未知环境的自主探索及建图

(4)内部结构:

(5)具体实现过程:根据以上的介绍,不难写出以下代码

(6)其他说明:实现过程中一定要加pause()函数,比如pause(1),每一秒发送一次目标点,用于间歇性发送

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

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

相关文章

webpack联邦模块介绍及在dumi中使用问题整理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、ModuleFederationPlugin参数含义?二、如何在dumi中使用及问题整理1. 如何在dumi中使用(这个配置是好使的)2.相关问题整理2.1 问题12.2 问题2 总…

【LeetCode-中等】剑指 Offer 67. 把字符串转换成整数(详解)

题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时&#…

【浩鲸科技】济南Java后端面经

本文目录 写在前面试题总览题目解析1.说一下SpringBoot中常用的注解2.Redis中的基本数据类型3.TCP的网络协议4.java中常见的锁5.Hashmap的底层数据结构、底层源码、扩容机制源码6.java面向对象的特点 写在前面 关于这个专栏: 本专栏记录一些互联网大厂、小厂的面试实…

华为HCIP第二节-------------------------ISIS

IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP(ConnectionLessNetwork Protocol&…

Vue 常用指令 v-on 自定义参数和事件修饰符

自定义参数就是可以在触发事件的时候传入自定义的值。 文本框,绑定了一个按钮事件,对应的逻辑是sayhi,现在无论按下什么按钮都会触发这个sayhi。但是实际上不是所有的按钮都会触发,只会限定某一些按钮,最常见的按钮就…

【能量管理系统( EMS )】基于粒子群算法对光伏、蓄电池等分布式能源DG进行规模优化调度研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

MyBatis学习笔记之逆向工程

文章目录 逆向工程配置与生成QBC查询风格 所谓的逆向工程是:根据数据库表逆向生成的Java的pojo类、SqlMapper.xml文件、以及mapper接口类等 要完成这个工作,需要借助别人写好的逆向工程插件。 虽然有点经典白学,但好像也没不白学 思考&#x…

【爬虫案例】用Python爬取iPhone14的电商平台评论

用python爬取某电商网站的iPhone14评论数据, 爬取目标: 核心代码如下: 爬取到的5分好评: 爬取到的3分中评: 爬取到的1分差评: 所以说,用python开发爬虫真的很方面! 您好&…

基于Java+Springboot+Vue的民宿管理系统(源代码+数据库)092

基于JavaSpringbootVue的民宿管理系统(源代码数据库)092 一、系统介绍 本项目前后端分离 本系统分为管理员、商家、用户三种角色 用户角色包含以下功能: 注册、登录、民宿信息查看、房间信息(查看/预订/评论/收藏/退订/投诉)、在线客服、房间预订管理、房间退订…

基于vue3.0实现vr全景编辑器

随着社会的不断发现,现实生活中有很多时候会使用到全景现实,比如房地产行业vr看房,汽车行业vr看车之类的,全景可视化真实还原了现场的场景,真正做到沉浸式体验。 现在我们基于vue3.0版本开发出了一款沉浸式的编辑器&a…

前后端项目分离开发

问题说明: 开发人员同时负责前端和后端代码开发,分工不明确开发效率低前后端代码混合在一个工程中,不便于管理对开发人员要求高,人员招聘困难 解决方法: 前后端分离开发 介绍 前后端分离开发,就是在项…

Asp.Net 6中使用Log4Net

Asp.Net 6中使用Log4Net 1. 先新建一个ASP.NET Core空项目 2. 通过Nuget包管理器安装下面两个包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 3. 在项目根目录下新建log4net的配置文件log4net.config&#xff0c;并将其设置为始终复制。 <?xml version&quo…

【Spring】IOC的原理

一、 IOC 的概念 Spring 的 IOC &#xff0c;即控制反转&#xff0c;所谓控制反转 —— 本来管理业务对象&#xff08;bean&#xff09;的操作是由我们程序员去做的&#xff0c;但是有了 Spring 核心容器后&#xff0c;这些 Bean 对象的创建和管理交给我们Spring容器去做了&am…

如何选择低代码/零代码平台(最全平台总结)

来谈论这个问题之前&#xff0c;我们先来看看到底什么是低代码/零代码—— 低代码 对于“低代码”的宣传其实已经很久很广泛了&#xff0c;但是争议从来都没有停止。 忘记之前在哪里看到过一个“低代码将会取代程序员”之类的说法&#xff0c;觉得很好笑&#xff0c;看了一些…

【C++】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 在【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值一文中介绍了如何利用…

2023年深圳杯数学建模A题影响城市居民身体健康的因素分析

2023年深圳杯数学建模 A题 影响城市居民身体健康的因素分析 原题再现&#xff1a; 以心脑血管疾病、糖尿病、恶性肿瘤以及慢性阻塞性肺病为代表的慢性非传染性疾病&#xff08;以下简称慢性病&#xff09;已经成为影响我国居民身体健康的重要问题。随着人们生活方式的改变&am…

opencv-18 什么是色彩空间?

1.什么是色彩空间类型&#xff1f; 色彩空间类型&#xff0c;也称为颜色空间类型或色彩模型&#xff0c;是一种表示图像中颜色的方式。在计算机图形学和数字图像处理中&#xff0c;有许多种色彩空间类型&#xff0c;每种类型有不同的表达方式和特点。 常见的色彩空间类型包括&a…

maven

一、为什么需要使用maven 如今我们构建一个项目需要用到很多第三方的类库 &#xff0c;例如我们在开发项目中 需要引入 这些依赖jar包 一个项目Jar包的数量之多往往让我们瞠目结舌&#xff0c;并且Jar包之间的关系非常复杂&#xff0c;一个Jar包往往又会引用其他Jar包&#x…

flex 弹性布局学习

一.Flex布局: Flex是Flexible Box 缩写“弹性布局”,用来为盒状模型提供最大得灵活性。 任何一个容器都可以指定为 Flex 布局。 .box{display: flex; } 行内元素也可以使用 Flex 布局。 .box{display: inline-flex; } Webkit 内核的浏览器&#xff0c;必须加上-webkit前缀。…

微服务模式:业务服务模式

无论是单体应用还是微服务&#xff0c;构建企业应用的业务逻辑/服务在更多方面上都有相似之处而不是差异。在两种方法中&#xff0c;都包含服务、实体、仓库等类。然而&#xff0c;也会发现一些明显的区别。在本文中&#xff0c;我将试图以概念性的方式强调这些区别&#xff0c…