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

news2024/11/27 8:23:19

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

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.coloradmin.cn/o/793863.html

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

相关文章

[golang gin框架] 42.Gin商城项目-微服务实战之后台Rbac微服务角色增删改查微服务

一.重构后台Rbac用户登录微服务功能 上一节讲解了后台Rbac微服务用户登录功能以及Gorm数据库配置单独抽离,Consul配置单独抽离,这一节讲解后台Rbac微服务角色增删改查微服务功能,Rbac微服务角色增删改查微服务和后台Rbac用户登录微服务是属于…

Vue--Vuex

一、Vuex 概述 1.是什么 Vuex 是一个 Vue 的 状态管理工具,状态就是数据。 大白话:Vuex 是一个插件,可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。例如:购物车数据 个人信息数 2.使用场景 某个状态 在 很多个组件 来使…

leetCode刷题记录3-面试经典150题

文章目录 不要摆,没事干就刷题,只有好处,没有坏处,实在不行,看看竞赛题面试经典 150 题80. 删除有序数组中的重复项 II189. 轮转数组122. 买卖股票的最佳时机 II 不要摆,没事干就刷题,只有好处&…

169. 多数元素

题目 题解一&#xff1a;map集合计数 /*** map集合计数* param nums* return*/public static int majorityElement(int[] nums) {Map<Integer, Integer> map new HashMap<>();//第一个for循环将数组中的元素作为key 出现次数作为value存入map 并且key重复 就v…

代码随想录算法学习心得 48 | 583.两个字符串的删除操作、72.编辑距离...

一、两个字符串的删除操作 链接&#xff1a;力扣 描述&#xff1a;给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 思路如下&#xff1a;整体思路是不变的。 这次是两个字符串可以相互…

OceanMind海睿思助力南京钢铁基于数字化审计为核心的全域风控管理

近日&#xff0c;中新赛克海睿思 与 南京钢铁股份有限公司&#xff08;以下简称“南钢”&#xff09;达成深度战略合作&#xff0c;携手推进企业内审数字化迈向智慧化发展。 双方将依托 OceanMind海睿思 提供业内领先的大数据平台和丰富的审计行业经验&#xff0c;积极利用先进…

《向量数据库指南》:向量数据库Pinecone备份索引教程

目录 ⚠️警告 使用集合创建备份 检查集合的状态 列出您的集合 删除一个集合 本文档描述如何使用集合备份索引。 要了解如何从集合创建索引,请参阅管理索引。 ⚠️警告 本文档使用集合。这是一个公开预览功能。在使用此功能生产负载之前,请进行充分测试。 使用集合…

一种有趣的 OTA 升级思路(基于 LoRa 通信的 OTA 固件升级的调试记录)

文章目录 1 概述2 调试之路2.1 想法2.2 函数和变量定义在绝对地址的实现2.2.1 IAR的扩展关键字2.2.2 函数的绝对定位2.2.3 变量的绝对定位2.2.4 常量的绝对定位2.2.4 .c文件的绝对定位 2.3 Bootload 共有函数的实现2.4 APP 共有函数的使用 3 注意事项4 调试坎坷之路5 补充 1 概…

学习React(四)

学习React&#xff08;四&#xff09; componentWillMount&#xff08;被放弃使用&#xff09;rendercomponentDidMountshouldComponentUpdatecomponentWillUpdate&#xff08;被放弃使用&#xff09;componentDidUpdatecomponentWillReceiveProps&#xff08;被放弃使用&#…

idea连接远程服务器上传war包文件

idea连接远程服务器&上传war包 文章目录 idea连接远程服务器&上传war包1. 连接服务器2.上传war包 1. 连接服务器 选择Tools -> Start SSH Session 添加配置 连接成功 2.上传war包 Tools -> Deployment -> Browse Remote Host 点击右侧标签&#xff0c;点击&…

【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-在表单里拿到列表上下文onlineTableContext

【二开】JeecgBoot-vue3二次开发 前端 扩展online表单js增强等-在表单里拿到列表上下文 onlineTableContext 对应的属性方法 acceptHrefParams"<p> 跳转时获取的参数信息"currentPage"<p> 当前页数"currentTableName"<p> 当前表…

读取有重复section的ini格式文件最新的几个不同section

文件内容示例如下 可以看到文件并不是标准的 ini 配置文件的格式&#xff0c;存在很多重复的 section&#xff08;中括号里的就是section&#xff09; &#xff0c; 我的任务是读取文件末尾最新的四个不同 section&#xff0c;并发送出去。 按照读取 ini 文件那样读取显然是不…

常用API学习08(Java)

格式化 格式化指的是将数据按照指定的规则转化为指定的形式 。 那么为什么需要格式化&#xff1f;格式化有什么用&#xff1f; 以数字类为例&#xff0c;假设有一个比分牌&#xff0c;在无人得分的时候我们希望以&#xff1a;“00&#xff1a;00”的形式存在&#xff0c;那么…

睡眠健康数据分析

项目背景 背景描述 本数据集涵盖了与睡眠和日常习惯有关的诸多变量。如性别、年龄、职业、睡眠时间、睡眠质量、身体活动水平、压力水平、BMI类别、血压、心率、每日步数、以及是否有睡眠障碍等细节。 数据集的主要特征&#xff1a; 综合睡眠指标&#xff1a; 探索睡眠持续时…

Gitlab服务器备份恢复及系统升级

居安思危&#xff0c;思则有备&#xff0c;有备无患。 基于此&#xff0c;申请了一个测试服务器&#xff0c;准备先安装同版本服务器&#xff0c;按照最新的数据进行恢复&#xff0c;然后再将现在的服务器升级到Gitlab的最新版本&#xff0c;记录一下完整的过程&#xff0c;以…

文件上传漏洞总结2

文件上传的大体都已经学习过了 这个假期在给他强化一下 什么是webshell webshell是web入侵的脚本攻击工具。webshell就是一个asp或php木马后门&#xff0c;黑客在入侵了一个网站后&#xff0c;常常在将这些asp或php木马后门文件放置在网站服务器的web目录中&#xff0c;与正常…

C++初阶之一篇文章让你掌握string类(了解和使用)

string类及其模拟实现 1.我们为什么要学习string类2. 标准库中的string类2.1 string类的实例化标准2.2 了解string 3.string类的常用接口说明3.1 string类对象的常见构造3.2 string类对象的容量操作3.3 string类对象的元素访问3.4 string类对象的Iterators&#xff08;迭代器&a…

Websocket协议-http协议-tcp协议区别和相同点

通讯形式 单工通讯-数据只能单向传送一方来发送数据&#xff0c;另一方来接收数据 半双工通讯-数据能双向传送但不能同时双向传送 全双工通讯-数据能够同时双向传送和接受 注&#xff1a;http的通讯方式是分版本 http1.0&#xff1a;单工。因为是短连接&#xff0c;客户端…

C++笔记之对指针类型的变量进行+1操作

C笔记之对指针类型的变量进行1操作 在C中&#xff0c;对指针类型的变量进行"1"操作会根据指针的数据类型而有所不同。这涉及到指针的算术运算&#xff0c;C中的指针算术运算是根据指针所指向的数据类型的大小来进行的。 code review! 文章目录 C笔记之对指针类型的…

扫地机语音提示芯片,智能家居语音交互首选方案,WT588F02B-8S

智能家居已经成为现代家庭不可或缺的一部分&#xff0c;而语音交互技术正是智能家居的核心。在智能家居设备中&#xff0c;扫地机无疑是最受欢迎的产品之一。然而&#xff0c;要实现一个更智能的扫地机&#xff0c;需要一颗语音提示芯片&#xff0c;以提供高质量的语音交互体验…