文章目錄
- 前言
- 一、實驗準備
- 二、具體實施
- 1.Ubuntu ROS和Matlab通信
- 2.控制演算法部署樹莓派
- 3.Simulink車輛模型環境
- 總結
前言
在上篇教程中,基于運動學模型和dlqr離散時間線性二次型調節器原理搭建了軌跡跟蹤的demo,恰好家里有一塊樹莓派,于是我突發奇想,把控制演算法刷寫進樹莓派中,然后通過和Matlab/simulink的通信,Simulink中跑車輛模型,這樣一個簡單的驗證平臺就可以搭建起來啦,前提是這樣的平臺是完全不具備產品化的試驗價值,該上Labcar或者Simulator的就上,由于個人買不起“大冰箱”,就自己搭建個簡易的玩一玩,因此本次教程適合個人業余玩家,職業玩家謝絕參賽,本次教程只談程序,細節問題不會描述的十分詳細,有問題可以在下方評論區討論,
一、實驗準備
1.安裝Ubuntu和Ros的樹莓派開發板一塊;
2.安裝Matlab/Simulink的電腦一臺;
3.網線,u盤等其他外設,
我對這類控制器在環仿真平臺的搭建有兩種理解,一種是帶ROS的,一種是不帶ROS的,我分別用兩種架構圖描述一下,

上圖也是本次實驗需要用到的,核心就是ROS架構,Matlab和樹莓派都運行ROS,Matlab跑win,樹莓派跑ubuntu,兩個硬體用網線連接,需要您按照Matlab ROS工具箱,
上圖是第二種我也會用到的一種架構,對于普通單片機跑C代碼,通過USBCAN(Simulink僅支持以下四家的CAN設備:Kvaser;Peak;Vector;NI)接入電腦,使用Simulink車輛通訊工具箱完成CAN或者CANFD通訊,如果你使用Instrument Toolbox也可以使用RS232,TCP,UDP通信,這個看您的單片機通訊介面了,我平時會用到PCAN,這個相對來說便宜點,當然你也可以反向做快速原型操作,只是Matlab是非實時的,驗證一下大致控制策略是沒有問題的,
二、具體實施
1.Ubuntu ROS和Matlab通信
網路上許多教程都講過如何進行ROS和Matlab的通信,為了大家看得懂,我就再講一次如何連接,
首先用網線將樹莓派和筆記本電腦連上,在樹莓派的終端輸入:ifconfig 即可查看樹莓派的ip地址,

其次,在Home界面下鍵入 Ctrl +H 顯示隱藏檔案,雙擊打開 .bashrc 檔案,在最后一行輸入樹莓派的IP地址,保存檔案,退出終端,新建終端鍵入:roscore 啟動ROS,觀察ROS_MASTER_URI是否是樹莓派IP,紅框所示,


以上就完成了樹莓派的操作,下面打開Matlab,輸入以下代碼,將樹莓派作為主節點,Matlab作為從節點,

從圖片可以看到Matlab與樹莓派已經完成了通訊,無論從Ubuntu還是Matlab,都可以看到節點資訊,

2.控制演算法部署樹莓派
下圖即在上篇博客中搭建的軌跡跟蹤控制演算法,我將模型只留出控制演算法部分,因為此部分才是刷寫進實際控制器中的,

那么結合Simulink ROS工具箱,新建幾個Topics,Message type選擇ROS自帶的,通過一頓操作即可完成下面的匹配,從下圖可以看到,參考路徑xr,yr,kr,thetar的資料保存在Model Workspace中,整個模型目前有三個話題,控制演算法訂閱了GPS話題(x、y、橫擺角)和Speed(期望車輛行駛速度)話題,并且發布了Ctrl話題,其中包括速度和前輪轉角資料,


如果您沒有用過Simulink ROS toolbox,你可能對上面的模型不理解,建議跟著看兩個簡單的Examples就可以熟悉了,接下來,就需要對該模型進行C++代碼生成,需要您的Simulink中有Embedded Coder工具箱,進入設定界面,進入Hardware Implementation 選擇Hardware board為ROS,當然這里您用ROS2也是可以的,

然后回到模型界面,直接ctrl+B編譯模型,等待編譯完成(注意:如果您將樹莓派作為主節點,請確保樹莓派系統已經完成了roscore,不然會報丟主節點錯誤),模型編譯完成,會彈出代碼生成報告,當然你不做SiL測驗直接用代碼也行,畢竟是個人玩家,不那么講究,在你的Matlab作業目錄下會出現一個tgz后綴的壓縮包,名字和模型名字一樣,

這里面就是節點代碼,將這個壓縮包解壓到該名字的檔案夾里,拷貝到U盤中,直接放入樹莓派ROS作業空間的SRC源檔案目錄下,如下圖所示,可以看到我的作業空間就這一個檔案夾,

然后,編譯該源檔案即可,在作業空間輸入 catkin build 即可,

等待片刻,可以看到已經將代碼完成編譯,報錯是不會報錯的,因為模型是正確的,這一點Matlab還是做得非常完美的,就是強(尬吹一下),

編譯完成程序,設定環境變數后,直接rosrun即可,接下來,節點就run起來,那么在matlab中輸入 rostopic list就可以看到樹莓派發布和訂閱的話題了,至此在樹莓派上的作業就全部完成了,


3.Simulink車輛模型環境
在此需要鄭重宣告下,Simulink不是實時仿真,TCP傳輸也會有延遲,所以驗證演算法只能說可以做,但是完全達不到實時的工業級別要求,既然樹莓派發布了Ctrl話題以及需要訂閱GPS話題和Speed話題(樹莓派需要期望車速,那么車輛模型就需要提供介面,這里的模型用prescan也好,carsim也好,車輛動力學工具箱也好,都是可以的,將ROS訂閱和發布匹配樹莓派ROS即可,車輛模型我用了上一篇博客的車輛動力學工具箱模型,為了省事,下圖就是搭建好的模型了,已經完全匹配了ROS節點,

需要注意的是:Simulink仿真中可以實時,需要Simulink real-time 工具箱中的模塊,我的2019b沒有此工具箱,就通過以下方式,使仿真和實際同步,這個原則就是在Simulink能計算得過來的時候同步,算不過來了還是同步不了,就會很慢,

搭建完成后,直接run起來就可以了,可以看見車輛還是按照期望軌跡跑了起來,我將硬體在環的仿真結果和離散仿真的實際結果進行了對比,


為了考慮樹莓派的實際性能,我將控制周期設定為了50ms,并且黎卡提方程最大迭代次數為1500,離線仿真用的是10ms,黎卡提方程最大迭代次數為5000,可以看見,軌跡還是有差別的,具體因素太多了,這里就不一一分析了,
總結
本文針對個人玩家搭建的硬體在環平臺,適用人群為個人玩家或者我這種在校學生用來做快速驗證的,樹莓派作為一款性能還算不錯的嵌入式設備(比Arduino性能好多了)還是值得一用的,Jetson Nano也很好,Matlab也支持GPU代碼生成直接部署,搭建這樣簡單平臺的難點就在你能不能熟練地在Matlab環境下使用ROS工具箱,也大致瀏覽下help就可以快速上手,如果您將羅技G29或者游戲手柄裝上,就可以實作駕駛員和控制器都在環的仿真啦!如果您對本次分享有疑問,評論私信交流,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/262457.html
標籤:其他
