第 8 章 機器人底盤Arduino端電機驅動(自學二刷筆記)

重要參考:

課程鏈接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ

講義鏈接:Introduction · Autolabor-ROS機器人入門課程《ROS理論與實踐》零基礎教程

?

8.4.4 底盤實現_03Arduino端電機驅動

自定義電機驅動的實現與上一節的編碼器驅動流程類似:

  1. ROSArduinoBridge.ino 中需要注釋之前的電機驅動,添加自定義電機驅動;
  2. motor_driver.h 中設置左右電機引腳;
  3. motor_driver.ino 中實現初始化與速度設置函數;
  4. 測試
1.定義電機驅動

ROSArduinoBridge.ino需要添加電機宏定義,代碼如下:

#define USE_BASE      // Enable the base controller code
//#undef USE_BASE     // Disable the base controller code/* Define the motor controller and encoder library you are using */
#ifdef USE_BASE/* The Pololu VNH5019 dual motor driver shield *///#define POLOLU_VNH5019/* The Pololu MC33926 dual motor driver shield *///#define POLOLU_MC33926/* The RoboGaia encoder shield *///#define ROBOGAIA/* Encoders directly attached to Arduino board *///#define ARDUINO_ENC_COUNTER/* 使用自定義的編碼器驅動 */#define ARDUINO_MY_COUNTER/* L298 Motor driver*///#define L298_MOTOR_DRIVER//使用自定義的L298P電機驅動#define L298P_MOTOR_DRIVER
#endif
2.修改motor_driver.h文件

修改后內容如下:

/***************************************************************Motor driver function definitions - by James Nugen*************************************************************/#ifdef L298_MOTOR_DRIVER#define RIGHT_MOTOR_BACKWARD 5#define LEFT_MOTOR_BACKWARD  6#define RIGHT_MOTOR_FORWARD  9#define LEFT_MOTOR_FORWARD   10#define RIGHT_MOTOR_ENABLE 12#define LEFT_MOTOR_ENABLE 13
#elif defined L298P_MOTOR_DRIVER#define DIRA 4#define PWMA 5#define DIRB 7#define PWMB 6
#endifvoid initMotorController();
void setMotorSpeed(int i, int spd);
void setMotorSpeeds(int leftSpeed, int rightSpeed);
3.修改motor_driver.ino 文件

主要添加內容如下:

#elif defined L298P_MOTOR_DRIVERvoid initMotorController(){pinMode(DIRA,OUTPUT);pinMode(PWMA,OUTPUT);pinMode(DIRB,OUTPUT);pinMode(PWMB,OUTPUT);}void setMotorSpeed(int i, int spd){unsigned char reverse = 0;if (spd < 0){spd = -spd;reverse = 1;}if (spd > 255)spd = 255;if (i == LEFT) { if (reverse == 0) { digitalWrite(DIRA,HIGH);} else if (reverse == 1) { digitalWrite(DIRA,LOW);}analogWrite(PWMA,spd);} else /*if (i == RIGHT) //no need for condition*/ {if (reverse == 0) { digitalWrite(DIRB,LOW);        } else if (reverse == 1) { digitalWrite(DIRB,HIGH);}analogWrite(PWMB,spd);}}void setMotorSpeeds(int leftSpeed, int rightSpeed){setMotorSpeed(LEFT, leftSpeed);setMotorSpeed(RIGHT, rightSpeed);}
4.測試

編譯并上傳程序,打開串口監視器,然后輸入命令,命令格式為:?m num1 num2,num1和num2分別為單位時間內左右電機各自轉動的編碼器計數,而默認單位時間為 1/30 秒。

舉例,假設車輪旋轉一圈編碼器計數為 3960(減速比90,編碼器分辨率11且采用4倍頻計數),當輸入命令為 m 200 100 時:

左電機轉速為:?200 * 30 * 60 / 3960 = 90.9 (r/m)

右電機轉速為:?100 * 30 * 60 / 3960 = 45.45 (r/m)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/12624.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/12624.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/12624.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

終于知道公司薪資為什么保密了!無意中拿到了部門薪資列表,自己身為小組長,只有28k,手下好幾個35k左右,心態崩了

大家好&#xff0c;我是瑤琴呀。 一直以來&#xff0c;員工不能私下談論薪資是職場公開的規定&#xff0c;入職的時候&#xff0c;HR 也會要求每個員工在保密薪資文件上簽字。 記得在大學上職業規劃課的時候&#xff0c;當時老師就給我們講過一個案例&#xff0c;公司里小李和…

數據結構與算法學習筆記九---循環隊列的表示和實現(C++)

目錄 前言 1.為什么要使用循環隊列 2.隊列的順序存儲方式的實現 1.定義 2.隊列初始化 3.銷毀 4.清空隊列 5.隊列是否為空 6.隊列長度 7.隊頭 8.入隊 9.出隊 10.遍歷隊列 11.完整代碼 3.參考資料 前言 這篇文章介紹循環隊列的表示和用法。 1.為什么要使用循環隊…

詳細分析Vue3中的defineExpose(附Demo)

目錄 前言1. 基本知識2. Demo3. 實戰 前言 其基本知識可參考官網&#xff1a;Vue3中的defineExpose 1. 基本知識 defineExpose 是 Vue 3 的 Composition API 中一個新的實用函數&#xff0c;用于在 <script setup> 語法下顯式暴露組件的公共屬性和方法 這在處理子組件…

OpenAI 重磅發布:ChatGPT Mac 桌面應用震撼上線!

OpenAI 重磅發布&#xff1a;ChatGPT Mac 桌面應用震撼上線&#xff01; 博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff0…

51單片機:點亮一個LED燈

1.新建工程 選擇AT89C52&#xff0c;在Atmel下顯示的是See Microchip 并不需要添加啟動文件到文件夾中。 添加main.c文件&#xff0c;c比cpp效率高&#xff0c;.asm匯編即更底層 程序編寫好后 nop(); 該函數在這個頭文件里面 #include <INTRINS.H> #include <R…

Java JDK下載安裝教程(2024年)

博主介紹&#xff1a;?Java老徐、7年大廠程序員經歷。全網粉絲12w、csdn博客專家、掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和畢業項目實戰? &#x1f345;文末獲取源碼聯系&#x1f345; &#x1f447;&#x1f3fb; 精彩專欄推薦訂閱&#x1f447;&…

2024 Google I/O Android 相關內容匯總

2024 Google I/O Android 相關內容匯總 本次 Google I/O 的核心雖然是 AI &#xff0c;但是 Android 也是作為主要議題出現&#xff0c; Android 部分可以簡單分為產品和開發相關內容&#xff0c;接下來主要介紹這兩部分的相關更新。 重點開始開發相關&#xff0c;內容不少 產…

業務系統加固和安全設備加固

業務系統加固 業務系統包含哪些系統? 業務系統漏洞面臨的風險 1web風險 2漏洞掃描&#xff0c;端口掃描 3系統漏洞 4邏輯漏洞 5 信息泄露 6拒絕服務 7口令爆破 加固方式&#xff1a; 在風險加上修復 1web漏洞&#xff1a; 包括csrf,xss&#xff0c;口令破解等等 修…

koa2 + jsonwebtoken + koa-jwt:實現node token驗證

一、koa token生成、驗證 koa-jwt官網 https://github.com/koajs/jwt 推薦一個koa-jwt學習文檔&#xff1a; https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html jsonwebtoken方法添加 const { sign, verify } require(jsonwebtoken); const secretKey …

ICode國際青少年編程競賽- Python-4級訓練場-列表綜合練習

ICode國際青少年編程競賽- Python-4級訓練場-列表綜合練習 1、 Flyer[3].step(1) Flyer[7].step(2) Flyer[11].step(1) for i in range(4):Flyer[i * 2].step(1) Flyer[8].step(3)for i in range(3):Dev.turnRight()Dev.step(-5)2、 for i in range(5):Flyer[i5].step(Flyer[…

JavaWeb--18 tlias-web-management 登錄認證

登錄認證 1 登錄功能功能開發 2 登錄校驗2.1 問題分析2.2 會話技術CookieSession令牌技術 2.3 JWT令牌介紹生成和校驗登錄下發令牌 2.4 過濾器Filter攔截路徑過濾器鏈 登錄校驗-Filter 2.5 攔截器InterceptorInterceptor詳解執行流程 登錄校驗- Interceptor 3 異常處理3.1 當前…

【會議征稿】2024年機器人前沿技術與創新國際會議(FTIR 2024, 7/19-21)

2024年機器人前沿技術與創新國際會議&#xff08;FTIR 2024&#xff09;將于2024年7月19-21日在中國杭州舉行。FTIR 2024聚焦前沿技術與創新&#xff0c;將把機器人領域的創新學者和專家聚集到一個共同的論壇。會議的主要目標是促進機器人的研究和開發活動&#xff0c;另一個目…

基于EBAZ4205礦板的圖像處理:11閾值系數可調的圖像局部閾值二值化

基于EBAZ4205礦板的圖像處理&#xff1a;11閾值系數可調的圖像局部閾值二值化 先看效果 還是一樣拿我的pynq當模特&#xff0c;然后用usb——HDMI采集卡把輸出圖像采集到電腦上。 注意看右邊mobelxtem中的通過串口調節的參數&#xff0c; 我這里是實現了閾值系數可調的局部閾…

利用CAD繪制角度斜線的簡易指南---模大獅模型網

在CAD設計中&#xff0c;繪制角度斜線是常見的需求&#xff0c;尤其在工程、建筑等領域中。正確繪制角度斜線不僅可以提高圖紙的清晰度和美觀度&#xff0c;還有助于準確表達設計意圖。本文將介紹如何利用CAD軟件進行角度斜線的繪制&#xff0c;為您提供簡明易懂的操作指南。 一…

安全設備篇——抗DDOS設備

寫在前面&#xff1a;up初研究這個設備的時候以為很容易&#xff0c;畢竟ddos嘛大家都懂&#xff0c;但是實際去找資料和研究的時候發現資料少的可憐&#xff0c;再加上大家知道ddos但大多沒見過&#xff0c;萬幸up的老東家某普有這類設備&#xff0c;和之前的同事溝通了一下還…

實戰期權:權利金=定金;無需等到期日

買方: 無需支付保證金,只需支付較低的權利金(定金)。 風險: 虧損有上限,即權利金損失;但盈利無限,以小博大。 使用場景: 大型單邊行情。 行情的絕對頂部 or 底部,最好是第二次頂或者第二次抵,風險較小。 買方舉例: 假如判斷當前在底部,買入看漲期權call…

網絡完全精通版

一、目錄結構 1.1目的的特點 windows和linux windows中C、D、E盤&#xff0c;每個都是一個根系統【多跟系統】 linux中只有一個根【單根系統】 1.2各個目錄存儲的內容 /root&#xff1a;linux中掛管理員用戶的家目錄 /home&#xff1a;linux中掛存儲普通用戶的家目錄的目…

GitLab CI/CD的原理及應用詳解(三)

本系列文章簡介: 在當今快速變化的軟件開發環境中,持續集成(Continuous Integration, CI)和持續交付(Continuous Delivery, CD)已經成為提高軟件開發效率、確保代碼質量以及快速響應市場需求的重要手段。GitLab CI/CD,作為GitLab平臺提供的一套強大的自動化工具集,為開…

Unity射擊游戲開發教程:(17)添加推進器推進和推進器推進動畫

添加推進器打開功能 我們可以添加一個推進器欄,用于跟蹤玩家使用推進器增強(按住左 Shift 鍵)的時間。當未使用推力時,將會有一段延遲,直到推力條開始再生。當棒再生時,可以使用推進器,但再生過程將重新開始。 我們將使用 Unity 的 UI Slider 組件,因此我們將其添加到已…