ROS與arduino的通訊使用了ros_arduino_bridge,代碼也是根據學校師兄的代碼進行修改的,師兄說直接燒錄就可以使用了但我還是遇到了很多問題,Debug的很難受,以下操作僅供參考,需要根據實際情況自行調整
L298N的使用

連接方式
- 不調速:直接與IN1、IN2連接,ENA、ENB鍵帽不動(鍵帽的作用是讓ENA、ENB默認與5V連接,這樣才能驅動電機轉動,只有ENA、ENB處于高電平時對應的電機才能轉動)
- 調速:IN1.2.3.4與arduino連接后,將ENA、ENB在IN平行一側的針腳與arduino的PWM輸出引腳連接,對ENA和ENB使能端輸入PWM脈沖
- 也有文章說可以直接arduino的pwm輸出直接連接IN1、IN2來調速,但是在多次嘗試后發現不行
與arduino的連接
這里要注意L298N與arduino一定要共地,直接GND與arduino的GND連接,除錯的時候可以將L298N的5V口與arduino連接供電(因為供電口鍵帽沒有拔掉的時候5V可以用來輸出)
附上接線部分代碼
//電機定義,ENCODER_1代表編碼器正極,A標號為左側電機
#define PWMA 10
#define AIN1 4
#define AIN2 5
#define AENCODER_1 3 //INT1--中斷號 只能讀取B相的
#define AENCODER_2 2 //INT0
#define PWMB 11
#define BIN1 6
#define BIN2 7
#define BENCODER_1 18 //INT5
#define BENCODER_2 19 //INT4
//需要注意arduino mega的中斷引腳以及引腳號,后邊會用到,如果進行修改的話需要按照自己的接線來修改
arduino
使用mega的原因如下
- 引腳比較多,也是ros_arduino_bridge原代碼中使用的板子
- 中斷引腳比較多,將來如果要做四輪或者三輪小車可以使用
- 電源引腳也比較多,不用在外部焊接排針
注:原版比較貴,這里我用的是國產板
已經將代碼上傳到github上,同步進行更新,文末附帶連接,下邊說明一下代碼(代碼中已經有大量注釋,這里只講一些自己覺得重要的)以及專案進行程序中遇到的問題,有遇到相同問題的小伙伴可以一起討論
- 代碼中使用了大量的宏定義,閱讀代碼時需要留意這部分代碼,背景關系結合
- communication這部分是上下位機通訊用的,可以根據自己需要進行修改
- 中斷:中斷這個地方有個隱藏技巧,因為編碼器的正負極的方向是一樣的,但是裝到輪子上后就是方向相反的了,所以如果編碼器1進入正極引腳對應的中斷,那么編碼器2就進入負極對應的中斷,這樣做當機器人向某個方向走的時候,才能兩個編碼器同時進入中斷,如果都讓兩個編碼器的正極對應的線進入中斷,那么前幾個數值可能會有正負值跳變
- pid除錯:這里可以參考這篇文章,不過ros_arduino_bridge的pid代碼感覺有點奇怪,因為我曾經遇到一個問題,不上電的時候,pid.out會慢慢增加到255,全速轉動,推測是pid問題
代碼:https://github.com/LinErTe/roscar
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263902.html
標籤:其他
上一篇:STM32:硬體IIC,實作EEPROM跨頁寫入資料,(接上文)
下一篇:撰寫函式,接受三個string引數,s,oldVal,newVal.使用迭代器和erase和insert函式,將所有oldVal替換為newVal
