[心得] 用Raspberry pi 做四軸飛行器

看板LinuxDev作者 (沒有存在感的人)時間8年前 (2015/10/05 03:31), 編輯推噓8(8019)
留言27則, 8人參與, 5年前最新討論串1/1
本文同步分享在我的網誌: http://gnitnawtw.blogspot.fr/2015/10/piquadcopter-raspberry-pi.html (若有違反板規請告知。若是版友想多了解我願意分享更多。) PiQuadcopter(掰咖考特) -- 用Raspberry pi 做四軸飛行器 想做四軸很久了。會想用RPi不外乎以下理由: - 磨練C programming - 了解kernel programming(雖然最後幾乎沒用上) - 想體驗Real-Time Linux的威力(雖然還沒開始用) 一般來說RPi拿來做四軸有點不太適合,因為作業系統是Linux (雖然據說可以安裝其他的RTOS,不過我暫時不討論這個), 而屬於通用型作業系統的Linux為了能在較短時間內完成較多任務, 其即時性(從系統收到任務的時間到系統開始處理這任務的時間)比較差 (正在處理的任務不能被優先權較高的任務插隊)。 我希望用多執行緒程式+搶佔式即時核心(Preempt RT Linux kernel)來改善這個問題。 稍微搜尋了一下前人用Rpi做四軸的經驗: RPi only https://github.com/idavidstory/goPiCopter 使用Go程式語言,sensor更新週期50Hz,控制週期10Hz,9 DOF + PWM(PCA9685) http://blog.pistuffing.co.uk/ 看起來似乎沒完成 RPi + Arduino https://github.com/vjaunet/QUADCOPTER_V2 使用MPU6050,Arduino用來控制SPI介面的硬體和PWM https://github.com/rpicopter/AvrMiniCopter-wiki/wiki 10 DOF https://www.raspberrypi.org/forums/viewtopic.php?f=37&t=35746 MPU6050,使用特殊ESC所以不用PWM,sensor更新週期在300-400Hz,以C++編寫程式, 不用Real-time OS,Arduino用於RFM12無線模組(與筆電交換訊息控制機體) RPi + 其他飛控 http://www.instructables.com/id/Autonomous-Cardboard-Rasberry-Pi-Controlled -Quad/ http://www.botched.co.uk/quadrocopter/ 使用dsPIC30F(PWM+I2C),10 DOF 看起來完全用RPi不用其他MCU好像也不是不可能。 四軸的飛行控制需要的硬體有: - 機架、電池、(無刷馬達+螺旋槳)*4 (廢話) - ESC (electronic speed control) :控制馬達轉速, 需要用四個PWM(Pulse-width modulation,脈衝寬度調變)個別控制 - IMU(Inertial measurement unit,慣性測量單元):三軸加速度計 (測量重力加速度方向+加速度)+三軸角速度計(測量角速度) +三軸電子羅盤(測知方向)+氣壓計(換算海拔高度), 3+3+3+1簡稱10軸 (10 DOF,一般來說6軸勉強夠用)。 - 無線通訊模組(wifi 或RF) - 如果想知道電池電量是不是快到底了,最好加個ADC(類比轉數位輸出)測量電池電壓。 而我手上的RPi model B+上面有: - I2C * 1 (可接多個裝置,支援400kHz以上傳輸速度) - SPI * 1 (可接兩個裝置,支援8MB/s以上傳輸速度) - PWM * 1 (不夠用...),雖然可以用DMA做軟體PWM, 不過更新頻率不能太高(~100Hz差不多極限了) 根據以上需求,結論就是我需要買: - 10軸IMU:GY80(I2C,400kHz,前6軸資料更新可達1600Hz) - nRF24L01*2:一個給RPi用,一個給Arduino用(操縱四軸),SPI - ADC:MCP3008:10bit(量電壓夠用了) ,SPI - PWM:PCA9685(Adafruit有賣已經設計好的電路,坊間也有類似的),I2C, 12bit,頻率可達1526Hz 然後就是程式部份,我選擇bcm2835( http://www.airspayce.com/mikem/bcm2835/ ) 而不是比較知名的wiringPi。因為bcm2835比較單純(找到address->控制), 不需要任何驅動程式,而wiringPi的SPI跟I2C控制是建立在驅動程式上, 我希望能藉此避免驅動程式的介入把操縱單純化, 這樣以後若是用Preempt RT kernel也比較不受影響。 目前我的進度到PID Control(調的好累),希望不久後我的PiQuadcopter能很快飛起來。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 86.200.64.167 ※ 文章網址: https://www.ptt.cc/bbs/LinuxDev/M.1443987101.A.8A3.html

10/05 22:41, , 1F
看來沒人有興趣 XD
10/05 22:41, 1F

10/06 12:23, , 2F
請問目前估計這樣硬體總價格大概要多少?
10/06 12:23, 2F

10/06 13:12, , 3F
cool
10/06 13:12, 3F

10/06 18:08, , 4F
我人不在台灣所以會貴點。
10/06 18:08, 4F

10/06 18:09, , 5F
能夠用淘寶的話應該4000-5000可以搞定
10/06 18:09, 5F

10/07 00:13, , 6F
請問一下要怎樣遙控器? 還有馬達?
10/07 00:13, 6F

10/07 00:26, , 7F
如果沒違反板規的話我可以多寫幾篇介紹
10/07 00:26, 7F

10/07 00:28, , 8F
無線遙控我用nRF24L01,接上arduino和搖桿就是陽春遙控器
10/07 00:28, 8F

10/07 08:36, , 9F
有考慮wifi遙控嗎? usb wifi edimax
10/07 08:36, 9F

10/07 08:42, , 10F
(我之前想的時候是考慮用wifi配手機XD)
10/07 08:42, 10F

10/07 08:43, , 11F
← 不過這個人行動力超低 又被估出來的價格澆熄火焰XD
10/07 08:43, 11F

10/07 15:24, , 12F
我現在測試就是用wifi遙控
10/07 15:24, 12F

10/07 15:24, , 13F
但是我的mt7601信號比較差就是了
10/07 15:24, 13F

10/07 16:18, , 14F
請問RF會隨距離遠近 資料傳輸量逐漸下降嗎?
10/07 16:18, 14F

10/07 16:19, , 15F
還是到一個臨界點後突然消失?
10/07 16:19, 15F

10/07 17:45, , 16F
我的設計是四軸先收後發,遙控器先發後收
10/07 17:45, 16F

10/07 17:46, , 17F
在2Mbps的情況下,距離稍微遠(2m以上)就開始收不到了
10/07 17:46, 17F

10/07 17:46, , 18F
調到250kbps後就沒這問題
10/07 17:46, 18F

10/07 17:47, , 19F
不過我用的是最陽春的type(沒外加天線)
10/07 17:47, 19F

10/07 17:48, , 20F
不過CPU load會因為RF增加10%左右(不過才10Hz)
10/07 17:48, 20F

10/07 17:48, , 21F
我還在想要怎麼辦
10/07 17:48, 21F

10/07 17:53, , 22F
wifi+smartphone就得用螢幕觸控,爽度全失阿
10/07 17:53, 22F

10/07 22:12, , 23F
很厲害,加油
10/07 22:12, 23F

10/11 02:25, , 24F
Wifi 距離太短了... 玩遙控沒意思.. orz
10/11 02:25, 24F

10/11 02:29, , 25F
用觸控的壞處是沒有位置的回饋感..
10/11 02:29, 25F

10/21 18:50, , 26F
太酷了
10/21 18:50, 26F

05/11 11:15, 5年前 , 27F
太讚了 希望有一天我也能做這樣的專案
05/11 11:15, 27F
文章代碼(AID): #1M4NwTYZ (LinuxDev)
文章代碼(AID): #1M4NwTYZ (LinuxDev)