MATLAB与ROS联合仿真——实例程序搭建思路

一、基础运动控制实例程序搭建思路

1、需要完成的任务:

(1)通过设定小车运动的速度及转角来控制ROS中小车运动。

(2)通过键盘输入指令控制ROS中小车运动,键盘输入w小车前行,s小车后退,a小车左转,d小车右转,输入其他按键小车停止运动。

(3)订阅Gazebo中反馈的ROS小车的位置信息,并实时绘制出小车的运动轨迹图.

2、参考结构图如下

3、程序搭建思路

       通过Speed And Angle Given模块,给定小车运动的速度和舵机打角,并输送给Control signals Management C模块,通过Keyboard Control模块输出键盘控制系数和可控信号口,并输送给Control signals Management C模块,并使用Constant模块设定Control signals Management C模块所需的其他参数,对于参数key为了使用方便再为其添加一个Slider Switch模块,这样就可以在仿真过程中对key的值进行修改了,将Control signals Management C模块模块的输出值送给Publish Ackermann Sport Information C模块来输送给ROS,到这里控制部分就完成了。

      使用Subscribe Ackermann Location Information C模块订阅ROS中发布的小车的位置信息,并输送给Drawing Trajectories模块,将小车实时的位置绘制出来,本实验中并没有用到目标点位置和完整轨迹,所以可将目标点位置也赋值为小车当前位置,完整轨迹可使用constant模块赋值0

二、轨迹跟踪控制实例程序搭建思路

1、需要完成的任务:

(1)回顾实验一,发布运动控制信息至ROS、订阅ROS中小车的位置信息并绘制轨迹图、键盘控制等内容

(2)订阅IMU传感器的数据,并计算出机器人的姿态(方法自选,如:欧拉角、卡尔曼滤波、互补滤波等)

(3)回顾坐标系变换相关知识,推导纯跟踪算法

(4)实现目标点停车功能

(5)编写纯跟踪算法控制器,并调试参数实现目标点跟踪

(6)实现轨迹跟踪,调试参数,观察效果

2、参考结构图如下

3、程序搭建思路

         通过Eight Letter Track  Given C模块,给定小车当前时刻的目标点坐标以及完整的轨迹信息,并输送给Drawing Trajectories模块,进行绘制图像,同时当前时刻的目标点坐标也要输送给Pure Tracking Controller C模块,进行舵机打角控制。此外需要使用constant模块为Eight Letter Track  Given C模块指定参数key,为其再添加一个Slider Switch模块,这样就可以在仿真过程中对key的值进行修改了

        通过Subscribe  Ackermann  Robot Posture C模块订阅小车的姿态信息,并将其中的yaw输送给Pure Tracking Controller C模块,通过Subscribe Ackermann Location Information C模块订阅小车当前的位置信息,并输送给Drawing Trajectories模块以及Pure Tracking Controller C模块

        到这里我们的核心控制器——纯跟踪控制器,得到了小车的位置信息、姿态信息、以及期望的目标点的信息,我们还需要使用Speed  Controller C模块得到小车的速度信息,即小车以什么样的速度从当前点,前往目标点

        而要想使用Speed  Controller C模块得到小车的速度信息,需要使用Constant模块设定比例系数kp和最大速度,除此之外还需要提供当前点与目标点的位置差Xe和Ye,但是这两个参数是由Pure Tracking Controller C模块输出

        这里我们来捋一下Speed  Controller C模块与Pure Tracking Controller C模块的关系,只有Pure Tracking Controller C模块提供给Speed  Controller C模块Xe和Ye,Speed  Controller C模块才能计算出Speed提供给Pure Tracking Controller C,同样的只有Speed  Controller C模块将Speed提供给Pure Tracking Controller C模块,Pure Tracking Controller C模块才能计算出Xe和Ye,给Speed  Controller C模块,所以说这里陷入了死循环,谁也得不到自己想要的参数,也无法提供给对方想要的参数,那么怎样解决呢,这里就要用到memory模块了,这也是为什么在介绍Speed  Controller C模块时,在输出Speed之前一定要加一个memory模块了,通过使用memory模块,使Speed  Controller C模块退了一步,即使你不给我我想要的Xe和Ye信息,我可以把我上一次的Speed信息(对于第一次运行而言,就是默认值0),给你,然后整个循环就打通了。所以说memory模块功不可没

        解决了以上逻辑问题,再返回来看Pure Tracking Controller C模块,想要计算出Angle,还需要使用constant模块为其提供参数K和L

        将Pure Tracking Controller C模块和Speed  Controller C模块的输出输送给Target Point Parking Control C模块,还需要用constant模块提供给它key和accuracy参数,对于key同样为其再添加一个Slider Switch模块,这样就可以在仿真过程中对key的值进行修改了

        接下来的内容就跟实验一类似了,只不过Control signals Management C模块的speed和angle换为由Target Point Parking Control C模块提供

        通过Keyboard Control模块输出键盘控制系数和可控信号口,并输送给Control signals Management C模块,并使用Constant模块设定Control signals Management C模块所需的其他参数,对于参数key为了使用方便再为其添加一个Slider Switch模块,这样就可以在仿真过程中对key的值进行修改了,将Control signals Management C模块模块的输出值送给Publish Ackermann Sport Information C模块来输送给ROS,到这里控制部分也全部完成了。

三、SLAM建图及自主导航实例程序搭建思路

1、需要完成的任务:

(1)使用键盘控制小车运动,借助slam_gmapping功能包体验建图过程

(2)在gazebo地图的基础上绘制小车的运动轨迹

(3)借助move_base导航框架,体验在已知地图的情况下进行导航操作,在小车的运动路径上,添加障碍物,观察小车的避障能力,体会全局路径规划与局部路径规划的区别与配合

(4)订阅并观测小车搭载的深度相机反馈的RGB彩色图像及深度图像、点云图像

(5)将SLAM建图与导航结合起来,实现未知环境的自主探索与建图

(6)体验使用Simulink生成ROS代码,并在ROS中运行

2、参考结构图如下

 

3、程序搭建思路

(1)用键盘控制小车运动

        经过前面的实验,本部分内容大家应该已经不陌生了,使用Keyboard Control模块与Control signals Management C模块配合输出小车的运动控制指令,再通过Publish Ackermann Sport Information C模块将该指令发送给ROS即可实现

(2)观测深度相机发布的RGB图像、深度图像、点云图像

        通过Subscribe to depth and point cloud images和Subscribe to RGB images模块即可完成

(3)在gazebo地图的基础上绘制运动轨迹

        使用Subscribe Ackermann Location Information C模块订阅小车的位置信息,将其输送给Gazebo Track Plotting模块,Gazebo Track Plotting模块的输入参数的计算和调节是本功能实现的重点。

(4)自动发布和切换导航目标点

        使用Subscribe Ackermann Location Information C模块订阅小车的位置信息,将其输送给Navigation Point Setting C模块,完成导航目标点的控制,再由Publish Target Point Information C模块将其发送给ROS

 

 

 

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

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

相关文章

uniapp 选择城市定位 根据城市首字母分类排序

获取城市首字母排序&#xff0c;按字母顺序排序 <template><view class"address-wrap" id"address"><!-- 搜索输入框-end --><template v-if"!isSearch"><!-- 城市列表-start --><view class"address-sc…

XML (可扩展标记语言)

目录 一、概念 二. 使用&#xff1a; 1. 基本语法&#xff1a; 2. 组成部分&#xff1a; &#xff08;1&#xff09;文档声明 &#xff08;2&#xff09; 指令(了解)&#xff1a;结合css &#xff08;3&#xff09; 标签&#xff1a;标签名称自定义 &#xff08;4&#xff09…

idea 关闭页面右侧预览框/预览条

idea 关闭页面右侧预览框 如图&#xff0c;预览框存在想去除 找了好多方法&#xff0c;什么去掉“setting->appearance里的show editor preview tooltips”的对钩&#xff1b;又或者在该预览区的滚动条上右键&#xff0c;“取消勾选show code lens on scrollbar hover”。都…

《向量数据库指南》——Milvus Cloud2.2.12 易用性,可视化,自动化大幅提升

Milvus Cloud又迎版本升级,三大新特性全力加持,易用性再上新台阶! 近期,Milvus Cloud上线了 2.2.12 版本,此次更新不仅一次性增加了支持 Restful API、召回原始向量、json_contains 函数这三大特性,还优化了 standalone 模式下的 CPU 使用、查询链路等性能,用一句话总…

【MySQL】centos 7下MySQL的环境搭建

从本期博客开始我们正式进入到数据库的学习&#xff0c;在学习数据库时所用到的工具是Linux环境下的MySQL 目录 一、检查环境中是否装有MySQL 二、获取MySQL官方yum源 三、配置MySQL官方yum源 四、一键安装MySQL 五、启动mysql服务 六、登录MySQL 七、修改mysql配置文件…

js实现一次渲染10000条数据,页面加载性能优化

<button class"button">开始</button><div class"box"></div>let num 10000; // 总条数let batchSize 100; // 每批次添加的数量let arr Array.from({ length: num }, (_, i) > i); // 创建一个包含 num 个元素的数组functi…

uniapp微信小程序scroll-view滚动scrollLeft不准确

今天在实现微信小程序的一个横向导航的时候出现了一个问题&#xff0c;就是每次滑到滚动条最右边的时候 scrollLeft的值都不准确 原因&#xff1a;因为每次滚动监听事件都会被调用比较耗费资源系统会默认节流&#xff0c;可以在scroll-view 加一个 throttle“{{false}}” 关闭…

JS正则表达式:常用正则手册/RegExp/正则积累

一、正则基础语法 JavaScript 正则表达式 | 菜鸟教程 JS正则表达式语法大全&#xff08;非常详细&#xff09; 二、使用场景 2.1、校验中国大陆手机号的正则表达式 正则 /^1[3456789]\d{9}$/解释 序号正则解释1^1以数字 1 开头2[3456789]第二位可以是 3、4、5、6、7、8、…

cnn卷积神经网络(基础)

convolutional neural networks 特征提取&#xff08;卷积、下采样&#xff09;->分类器 &#xff08;全连接&#xff09; 卷积过程 依次进行数乘 &#xff08;每个相同位置上的数字相乘再加和&#xff09; 左右数乘矩阵channel数量要一样&#xff0c;输出得到一个通道 卷…

通过源代码修改使 Apache Hudi 支持 Kerberos 访问 Hive 的功能

Hudi 0.10.0 Kerberos-support 适配文档 文档说明 本文档主要用于阐释如何基于 Hudi 0.10.0 添加支持 Kerberos 认证权限的功能。 主要贡献&#xff1a; 针对正在使用的 Hudi 源代码进行 Kerberos-support 功能扩展&#xff0c;总修改规模囊括了 12 个文件约 20 处代码共计…

RabbitMQ 教程 | RabbitMQ 入门

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

动态线程池问题的解决

项目中需要将线程池也监控管理起来。 于是决定引入了hippo4j&#xff0c;这个引入很简单&#xff0c;官方的例子也很简单&#xff0c;拿过来直接跑。 出现问题了&#xff0c;用的和例子一模一样的&#xff0c;也没什么错&#xff0c;但是就是在服务器的管理控制台上没有找到动态…

[SQL系列] 从头开始学PostgreSQL 借鉴MYSQL的隔离级别

SQL 的隔离级别是指在数据库中&#xff0c;事务之间相互隔离的程度。当事务 A 修改了某条数据后&#xff0c;如果事务 B 在这个时候读取该数据&#xff0c;会发生什么情况呢&#xff1f;这取决于数据库的隔离级别设置。 常用的事务隔离级别类型包括以下几种&#xff1a; READ …

实现langchain-ChatGLM API调用客户端(及未解决的问题)

langchain-ChatGLM是一个基于本地知识库的LLM对话库。其基于text2vec-large-Chinese为Embedding模型&#xff0c;ChatGLM-6B为对话大模型。原项目地址&#xff1a;https://github.com/chatchat-space/langchain-ChatGLM 对于如何本地部署ChatGLM模型&#xff0c;可以参考我之前…

解决代理IP负载均衡与性能优化的双重挑战

在当今数字化时代&#xff0c;代理IP的应用范围日益广泛&#xff0c;它不仅在数据爬取、网络抓取等领域发挥着重要作用&#xff0c;也成为网络安全和隐私保护的有力工具。然而&#xff0c;面对庞大的数据流量和复杂的网络环境&#xff0c;如何实现代理IP的负载均衡和性能优化成…

反复 Failed to connect to github.com port 443 after xxx ms

前提&#xff1a;使用了代理&#xff0c;浏览器能稳定访问github&#xff0c;但git clone一直超时 解决方案&#xff1a; 1. git config --global http.proxy http://127.0.0.1:1080 2. 代理设置端口1080 3. 1080可自定义 感谢来自这篇博客和评论区的提醒&#xff1a;解决…

Flutter 状态组件 InheritedWidget

Flutter 状态组件 InheritedWidget 视频 前言 今天会讲下 inheritedWidget 组件&#xff0c;InheritedWidget 是 Flutter 中非常重要和强大的一种 Widget&#xff0c;它可以使 Widget 树中的祖先 Widget 共享数据给它们的后代 Widget&#xff0c;从而简化了状态管理和数据传递…

SpringBoot的三层架构以及IOCDI

目录 一、IOC&DI入门 二、三层架构 数据库访问层 业务逻辑层 控制层 一、IOC&DI入门 在软件开发中&#xff0c;IOC&#xff08;Inversion of Control&#xff09;和DI&#xff08;Dependency Injection&#xff09;是密切相关的概念。 IOC&#xff08;控制反转&a…

常见的远程代码执行漏洞的注入点和注入方式

10个常见的远程代码执行漏洞的注入点和注入方式的举例&#xff1a; 用户输入&#xff1a;当用户输入未经验证和过滤的数据被用于构建动态命令或查询时&#xff0c;攻击者可以通过输入恶意代码来执行远程命令。 文件上传功能&#xff1a;如果文件上传功能没有正确地验证和限制上…

webpack如何实现热更新?

webpack如何实现热更新&#xff1f; 要使用 Webpack 实现热更新&#xff0c;可以按照以下步骤进行配置&#xff1a; 1.在项目中安装 Webpack 和相关的开发依赖&#xff1a; npm install webpack webpack-cli webpack-dev-server --save-dev2.创建一个名为 webpack.dev.js 的…