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.pswp.cn/news/376215.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376215.shtml
英文地址,請注明出處:http://en.pswp.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…