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

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows Server 2012 搭建网关服务器并端口转发

需求 使用 Windows server 作为Hyper-V 虚拟出许多虚拟机,基本上都分配了内网地址,现在需要这些虚拟机访问外网,或者外网直接访问这些虚拟机,必须配置一个网关服务器。我决定直接使用 Windows 的远程访问中的 NAT 服务来完成。 …

【Vue】div标签实现输入框,利用contenteditable=“true“属性的标签实现

推荐个链接&#x1f517;&#xff0c;可以更好的查阅自己遇到的问题&#xff08;点击此处即可跳转&#xff09; 使用 div 实现 input、textarea 输入框 <template><div class"content"><div class"main editTextList" ><divclass&q…

ChatGPT如何帮助学生学习

​ 一些教育工作者担心学生可能使用ChatGPT作弊。因为这个AI工具能写报告和计算机代码&#xff0c;画出复杂图表……甚至已经有许多学校把ChatGPT屏蔽。 研究发现&#xff0c;学生作弊的主要原因是想考得好。是否作弊与作业和考试的打分方式有关&#xff0c;所以这与技术的便…

《零基础入门学习Python》第062讲:论一只爬虫的自我修养10:安装Scrapy

这节课我们来谈谈 Scrapy 说到Python爬虫&#xff0c;大牛们都会不约而同地提起Scrapy。因为Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。可以应用在包括数据挖掘&#xff0c;信息处理或存储历史数据等一系列的程序中。 Scrapy最初是为了页面抓…

2023年发布的25个开源大型语言模型总结

大型语言模型(llm)是一种人工智能(AI)&#xff0c;在大量文本和代码数据集上进行训练。它们可以用于各种任务&#xff0c;包括生成文本、翻译语言和编写不同类型的创意内容。 今年开始&#xff0c;人们对开源LLM越来越感兴趣。这些模型是在开源许可下发布的&#xff0c;这意味…

HCIA练习2

目录 第一步 启动eNSP&#xff0c;搭建如图所示的拓扑结构 第二步 进行子网的划分 ​第三步 从第二步划分的16个网段中&#xff0c;选择14个网段进行使用 第四步 对路由器各个端口进行IP配置 第五步 对每个路由器的环回接口进行配置 第六步 对路由器进行静态路由配…

Redis 命令介绍

文章目录 Redis字符串操作命令哈希操作命令列表操作命令set集合sorted set 有序集合通用命令 在Java中操作Redis&#x1f350; ❤️ &#x1f6a9;4.1 Redis的Java客户端 &#x1f350;4.2 Spring Data Redis使用方式 ✏️环境搭建步骤1). 导入Spring Data Redis的maven坐标2).…

基于SpringBoot+Vue的“智慧食堂”系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

ARM寄存器组织

一、寄存器二、ARM寄存器三、专用寄存器四、CPSR寄存器 一、寄存器 概念 寄存器是处理器内部的存储器&#xff0c;没有地址 作用 一般用于暂时存放参与运算的数据和运算结果 分类 包括通用寄存器、专用寄存器、控制寄存器 二、ARM寄存器 注 在某个特定模式下只能使用当前模…

Mac m1 下eclipse下载及jdk环境变量配置

一、安装eclipse 1、下载eclipse Eclipse downloads - Select a mirror | The Eclipse Foundation 此版本为m1芯片适用版本 2、下载后下一步安装即可 安装成功后&#xff0c;可以看到图标&#xff1a; 二、安装jdk 1、下载jdk 下载此版本即可&#xff0c;下载完成之后一直…

Django模型将模型注释同步到数据库

1、安装django-comment-migrate库 pip install django-comment-migrate 2、将库注册到settings.py文件中 INSTALLED_APPS [...django_comment_migrate, # 表注释... ] 3、加注释 3.1、给模型&#xff08;表&#xff09;加注释 在模型的class Meta中编辑 verbose_name&…

Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台免费搭建

Java版知识付费-轻松拥有知识付费平台 多种直播形式&#xff0c;全面满足直播场景需求 公开课、小班课、独立直播间等类型&#xff0c;满足讲师个性化直播场景需求&#xff1b;低延迟、双向视频&#xff0c;亲密互动&#xff0c;无论是互动、答疑&#xff0c;还是打赏、带货、…

【Postman】Newman安装与环境配置完整版(内含安装过程中遇到的问题与解决方案)

文章目录 概要Newman安装三步走一、nodejs安装与环境配置1、安装2、环境配置 二、安装newman1、步骤2、问题与解决方案 三、安装newman-reporter-html 概要 Newman&#xff1a;一款基于nodejs开发的可以运行Postman脚本的工具&#xff0c;并且可以生成测试报告。本文介绍了New…

【docker】docker部署mysql

目录 一、步骤二、说明三、示例 一、步骤 1.搜索mysql镜像 2.拉取mysql镜像 3.创建容器 4.操作容器中的mysql 二、说明 1.容器内的网络服务和外部机器不能直接通信 2.容器中部署的mysql端口3306不能被外部机器和宿主机直接通信 3.外部机器和宿主机之间可以直接通信 4.宿主机和…

管理类联考——数学——趣味篇——可视化

Manim: 一个数学可视化的动画引擎 官网&#xff1a;https://3b1b.github.io/manim/index.html 名词解析 python3.7是python语言的解释器, 运行python程序的环境必备品. 这个没啥说的,大家都能懂. 虽然官方建议3.7,但是我用3.8发现也没问题.考虑未来的历史进程,大伙最好还是装…

力扣题库刷题笔记75--颜色分类

1、题目如下&#xff1a; 2、个人Pyhon代码实现如下&#xff1a; 第一种思路是取巧&#xff0c;通过计数0、1、2的个数&#xff0c;去替换nums 备注第10行代码在本地可以跑过&#xff0c;但是力扣跑不过&#xff0c;所以就用了第10-16行代码进行替换 第二种思路是通过冒泡排序去…

小程序创建

1&#xff0c;下载HBuilder X ;(3.8.7) HBuilderX-高效极客技巧 2,下载模板&#xff08;不选云服务的&#xff09;&#xff1b; 3&#xff0c;运行-运行到小程序模拟器&#xff1b; 4&#xff0c;安装小程序开发工具&#xff1b; 5&#xff0c;选择稳定版-windows64版&…

springboot集成

maven配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency><groupId>org.apache.commons</groupId><artifactId>…

【GPT4结对编程】word文档导出功能GPT4来实现

需求背景 最近产品增加了一个导出word文档的需求&#xff0c;之前有导出过pdf格式、excel格式、csv格式&#xff0c;但还没导出过word文档。 开源框架调研 我们的后端服务主要是用golang&#xff0c;因此首先想到的是golang相关的开源工具&#xff0c;找到2个。 unioffice …

第二天 kali代理配置

文章目录 环境一、虚拟机网络模式&#xff08;1&#xff09;NAT&#xff08;2&#xff09;NAT模式&#xff08;3&#xff09;桥接模式&#xff08;4&#xff09;仅主机模式&#xff08;5&#xff09;总结 二、配置代理&#xff08;桥接模式&#xff09;1、基础设置2、虚拟机浏览…