arduino 机器视觉编程_万物皆可仿真的MATLAB/Simulink神奇在哪?解析如何将其应用于一整套机器人设计开发流程...

75bdcabdad3d04d48c0794f27ec3b125.png

MATLAB/Simulink:万物皆可仿真 MATLAB是由美国MathWorks公司出品的一款商业数学软件。它是一个多功能的科学计算平台,将算法开发、数据分析、矩阵计算等诸多强大功能集成在一个易于操作的视窗环境中。MATLAB下的Simulink更是被认为可以“仿真任何系统”。正是由于MATLAB/Simulink的强大功能,它在机器人领域得到了广泛的运用。
机器人系统主要由机械结构、传感器、嵌入式硬件、自动控制、决策执行算法这五个部分组成,MATLAB对这几大部分的开发研究都提供了很好的支持。
对于机器人算法研究人员(尤其是高校的硕士博士),首选工具必然是MATLAB,因为它简便快捷,封装性好,更重要的是全世界几乎所有的算法大牛、精英教授都会首先公布对应的MATLAB源码,然后在逐步改写成其他语言进行实际应用。相对于其他仿真环境,MATLAB在机器人的开发研究中有着极大的优势:硬件多样化:预设Arduino和树莓派的硬件包,支持微控制器、PLC、FPGA、GPU等多种设备。不仅仅可以仿真,更可以对硬件进行直接的控制。

0f2e82f988047b43c6a6066ca5afd524.png


Simulink直接仿真控制Arduino和树莓派编程环境多样化:支持C/C++,可以直接连接到ROS系统。

45c8f8d80b1c7652b071b4cd42992f4d.png


直接连接ROS系统可以自动生成代码:MATLAB Coder和Simulink Coder可以根据你建立的模型自动生成控制代码,大大减轻工作量,开发神器有木有? 工具箱:关于机器人设计开发,你想要的,这里都有
MATLAB/Simulink最强大的功能在于其针对各种特殊需求定制的工具箱,接下来我将按照机器人的开发流程为大家逐一介绍。1、 机器人机械结构设计
Simscape可以用来设计和分析三维刚体机械结构(譬如汽车平台、机械臂等等)。除此之外,它还可以使用电气、液压或气动以及其他组件进行多域系统建模。

de8c64a9fc7c91520ac3358665dc810b.png


Simscape
你可以直接在模型库(命令行输入sm_lib)里选择自己想要添加的块,模型库提供了常见的机械结构如简单的几何体、转动副、齿轮、带轮…当然对于复杂的零部件,你也可以先在SolidWorks里面建立好模型然后导入。

265c216f045bb9f4ffb465d9e85e36aa.png


Simscape三维模型库
如下图所示,我们用仿真实现控制机械将物体从一个传送到搬运到另一个上面。

4b8ed4566618dc6e56ef791b45240a11.gif


机械臂仿真2、 机器人传感器融合
机器人用传感器感知外部物理环境,常见的传感器有红外、超声、惯性姿态传感IMU、激光雷达、摄像头等等。
RoboticsSystem Toolbox可以让你通过ROS直接连接到传感器并且对传回来的信息进行校准、降噪等操作。

03f74277c9c93a7cc90db3d144d2f773.png


通过ROS连接到传感器
同时,针对机器视觉,MathWorks开发了单独的工具箱Computer Vision Toolbox。它支持单目、立体、鱼眼等相机的校准,提供了对象的检测跟踪,特征提取和匹配等算法,同时可以根据数据进行三维重建和3D点云处理。

ab7fb729bde009114bb1502eb2c30681.png


配准和拼接一系列点云3、嵌入式
Simulink提供了一系列的嵌入式硬件支持,你可以在Add-Ons的最后一行添加所需要仿真或者控制的硬件。

273366672d6dae03b164d12db83fae66.png


添加硬件支持
点开后下载相应的插件即可使用,这些插件不仅可以仿真,更可以直接控制单片机硬件。

5b16d03a62b1e08e25dd99d5508b1a08.png


Arduino插件下载4 、自动控制
你可以使用Simulink系统性地分析、设计复杂系统在时域和频域中的行为。对此用过Simulink的同学应该是再熟悉不过了。

e922797a46cf135089e7aabd30f00ca6.png


Simulink设计控制系统
你可以利用根轨迹法来自动调节补偿器参数,并且同时指定多个调节目标,比如干扰参考跟踪、稳定裕度等等。5、 决策执行算法
完成了上述步骤后,我们就可让机器人完成最终的执行和决策功能了。
使用雷达或者视觉传感器的数据,你可以通过Simultaneous Localization and Mapping (SLAM)创建环境地图,从而实现自动路径规划到达指定位置。
你也可以使用Deep Learning Toolbox深度学习工具箱或者强化学习来实现端到端的机器人控制策略。

1d4c7c491d2b4050ca497d838795165b.png


基于强化学习的机器人控制测量 MATLAB控制移动机器人的一个实例:TurtleBot1 、TurtleBot介绍
TurtleBot是一个低成本的、带有开源软件的个人机器人套件,它的目的是给入门级的机器人爱好者或从事移动机器人编程开发者提供一个基础平台。通过直接使用TurtleBot自带的软硬件,开发者可以专注于应用程序,避免了从头开始“造轮子”的麻烦。
TurtleBot可以说是搭载ROS系统中最为重要的机器人,每个版本的ROS测试都会以TurtleBot为主,包括ROS2也率先在TurtleBot上进行了大量测试。所以TurtleBot对ROS兼容性很好。你可以在ROS社区中获得大量关于TurtleBot的相关资源,很多功能包都能直接复用到自己的移动机器人平台上。

3e5c9d6a7ae9a37236fed751650fdcdf.png


TurtleBot全线产品2 、使用MATLAB进行建图和路径规划
我们的目标就是将TurtleBot从房间的开始位置移动到指定位置。

b2668c734aad0a91e5c6680cd0da65a8.png


Turtlebot开始和结束位置
使用MATLAB控制移动机器人的方法发如下图所示,主要分为导入地图、规划路径,循迹行走三个步骤。

8baa256eed473766ea15aab21497f955.png


MATLAB控制移动机器人步骤
在导入地图时,你可以使用二值图像直接建立栅格地图。

8baa256eed473766ea15aab21497f955.png


导入栅格地图
或者连接ROS,使用SLAM实时生成地图。

a730cb755ccebb7ed6af9b076c5dbdec.png


使用SLAM实时生成地图

f852fc3c2e0334c9599113fa374db5f5.gif


通过路径规划,可以寻找到起始点到目标位置距离最短的路径。

d4f314edebe97f7465e07d29bd000132.png


路径规划
你可以在MATLAB里让小车按照规划好路径行走。

12731515b00219d2cd0987892728a874.gif


循迹行走
当你对你的仿真结果满意后,你可以将相同的代码直接部署到实际的TurtleBot机器人上看看实际运行效果。

2c856b81b0cdc6b8479eae99599d09ec.gif


TurtleBot实际运行效果 尾声 本文着重讲解了MATLAB/Simulink以及一系列工具箱在机器人开发中的使用。梳理了整个机器人开发流程和MathWorks公司相对应的产品线。并通过TurtleBot的一个实例来介绍MATLAB如何仿真并实际控制机器人硬件的。受于篇幅限制,本文只列举MATLAB/Simulink部分功能,你可以在官网查看更多相关信息。
随着“中国制造2025”和“工业4.0”的提出,中国机器人领域在最近几年也得到了飞速的发展。而作为机器人开发研究的重要工具,MATLAB/Simulink也将赋予机器人更多可能。了解更多机器人解决方案:(复制到浏览器打开)https://ww2.mathworks.cn/solutions/robotics.html?s_eid=PEP_23453你可以申请30天免费试用的MathWorks工具包:(复制到浏览器打开)https://ww2.mathworks.cn/campaigns/products/trials.html?s_eid=PEP_23453

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

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

相关文章

排序算法(1) 快速排序 C++实现

快速排序基本特性 时间复杂度:O(n*lgn)最坏:O(n^2)空间复杂度:最好情况下:O(lgn),最坏情况:O(n),平均情况:O(l…

boost 变量类型转换

如果vs版本比较低,会不支持一些std类型转换函数(vs2008就不支持),比如: std::to_string \\数字转字符串 std::stoll \\字符串转数字而且项目碰巧用boost库,可以考虑用下面的的方法来进行类型转换…

PB增删改

新建一个数据窗口----选择需要更新的表,或者直接写sql也可以如下图已经建立好的数据窗口,根据要求将需要更新的列、unigue key 还有需要更新的表设置好,【将需要更新列的taborder设置大于0 这样维护的时候可以编辑(等于0是不能编辑…

(五十六)iOS多线程之NSOperation

NSOpertation是一套OC的API,是对GCD进行的Cocoa抽象。 NSOperation有两种不同类型的队列,主队列和自定义队列。 主队列运行于主线程上,自定义队列在后台运行。 【NSBlockOperation】 通过Block创建任务,下面比较主队列和自定义队列…

android 系统源码调试 局部变量值_如何方便快速的整编Android 9.0系统源码?

点击上方“刘望舒”,选择“星标”多点在看,就是真爱!作者 : 刘望舒 | 来源 :刘望舒的博客地址:http://liuwangshu.cn/framework/aosp/3-compiling-aosp.html前言在上一篇文章是时候下载Android 9.0系统源码了中&…

boost 文件操作

如果要简单处理文件和文件夹的时候&#xff08;删除、重命名等&#xff09;&#xff0c;使用Windows的系统函数会十分麻烦&#xff0c;可以尝试一下使用Boost库来进行处理 头文件 #include <boost/filesystem.hpp>如果要获得每次处理的结果错误码&#xff0c;需要加上头…

让“是男人就下到100层”在Android平台上跑起来

原工程:https://github.com/jeekun/DownFloors 移植后的代码&#xff1a;HelloCpp.zip 移植后的APK&#xff1a;HelloCpp.apk 说明&#xff1a;&#xff08;cocos2d-x版本是“ 2.2&#xff09; 1.该工程是直接在HelloCpp上修改完成,所以包名也不修改了 2.原工程里面可能是采用g…

Codeforces Round #277 (Div. 2) 题解

Codeforces Round #277 (Div. 2)A. Calculating Functiontime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputFor a positive integer n lets define a function f: f(n)   - 1  2 - 3  ..  ( - 1)nn Your …

QT 边框圆角处理

平时的边框是平角的&#xff1a; 如果需要圆角的话&#xff0c;就要加stylesheet加上这个&#xff1a; border-radius:3px;比如&#xff1a; QPushButton{ border-radius:3px; }就变成圆角了&#xff1a; px前面的数字越大就越圆&#xff0c;比如5px比3px圆 假如只需要某一…

3级调度 fpga_Vivado HLS学习笔记——1.了解FPGA架构

本篇文章为本人学习Xilinx的Vivado HLS教程记录的学习笔记&#xff0c;仅供学习参考。Vivado HLS官方视频教程&#xff1a;优酷视频​v.youku.com目录&#xff1a; Vivado HLS课程简介FPGA与CPU、GPU、DSP的区别FPGA的优势Xilinx FPGA架构:逻辑单元、算术逻辑单元、存储单元使用…

[LeetCode]Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node. 思考&#xff1a;DFS。 /*** Definition for binary tree* struct TreeNode {* int val;* Tree…

BZOJ2435 [Noi2011]道路修建

这是NOI11年题&#xff0c;你在逗我&#xff1f; 直接dfs就可以了&#xff0c;Linux下貌似不会爆栈。。。 1 /**************************************************************2 Problem: 24353 User: rausen4 Language: C5 Result: Accepted6 Time:5184 …

Qt异常结束程序无法重新运行

有时候代码有问题会导致qt异常结束 修改完后重新运行又会出现 查看任务管理器又没有这个进程 可以使用资源管理器打开看看 也可以考虑使用process explorer查看 发现程序挂起来&#xff0c;结束掉它就可以重新运行了

hadooppythonsql_半小时搞定Hadoop+Mysql+Hive+Python

1. 说明搭建过Hadoop集群的小伙伴一定知道&#xff0c;如果不用docker&#xff0c;半小时配好HadoopMysqlHive(后简称Hive)肯定是胡吹&#xff0c;有了Docker镜像&#xff0c;没有说明文档&#xff0c;配好了也不一定会用。本文将介绍如何在半小时内&#xff0c;让Hive在你的Li…

PHP 切割字符串 点号 不用双斜杠

$name "tupian.png"; $nameArr explode(".", $name); 习惯了Java的程序员容易写成 $nameArr explode("\\.", $name);//在PHP中是不正确的转载于:https://www.cnblogs.com/wuyou/p/3463425.html

Qt新添加的类无法链接

通过这个方法给工程添加了个类&#xff1a; 编译的时候就出现了这个问题&#xff1a; 执行一下qmake 然后再重新构建项目就可以了

URAL 1830 Help in the RNOS 思路,读题 难度:1

http://acm.timus.ru/problem.aspx?space1&num1830 这道题需要理解题目操作的意思, 要更改第i位的状态,第i-1位必须激活为1,0-i-2位必须为0,如果0-i-1位开始时全为0,那么从0位开始进行操作 一.首先考虑对于0-i-1位都是0,需要更改i位的情况,需要 1.更改i-1位,2.按一下打开下…

openssh升级sftp_OpenSSH 8.2 发布 包括 sftp 客户端和服务器支持

OpenSSH 8.2 发布了。OpenSSH 是 100% 完整的 SSH 协议 2.0 版本的实现&#xff0c;并且包括 sftp 客户端和服务器支持。此版本变化不少&#xff0c;其中有两个地方值得特别关注。一个是新特性&#xff0c;此版本增加了对 FIDO/U2F 硬件身份验证器的支持。FIDO/U2F 是廉价硬件双…

任务队列摘自新锋

在开发C程序时&#xff0c;一般在吞吐量、并发、实时性上有较高的要求。设计C程序时&#xff0c;总结起来可以从如下几点提高效率&#xff1a; l 并发l 异步l 缓存下面将我平常工作中遇到一些问题例举一二&#xff0c;其设计思想无非以上三点。 1任务队列 1.1 以生产者-消…

C++容器遍历时删除元素

vector 错误做法 这样做会在遍历过程中越界导致程序崩溃 std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (auto i vecInt.begin(); i ! vecInt.end() ; i) {if (*i 1) {vecInt.erase(i);}}正确做法 std::vector<int> vecInt({ 1, 3, 2, 1, 4, 1 });for (a…