台灣不流行的期間基本上幾乎完全沒有消息,也沒有軌道可玩(日本好一點四驅車一直都存在,但也是沉寂多年官方沒有辦全國性的比賽)
回鍋後發現現在的玩家有很大的比例跟我一樣是二十多到三十多歲的大人,小時候有玩過,長大後又跳進來玩
可能因此導致現在軌道跟十多年前相比比較偏向技術軌,多了很多難度,所以不是單純比高速,而是變成在不飛車的前提下盡快跑完全程
之前看了很多四驅車相關的網站、論壇、玩家的部落格
基本上是都是以田宮 or 半田宮 的規則在玩,使用固定的機制去應付像是跳台或交換到這種難關
例如跳台落地為了穩定度,改成避震車或使用金球、吊鐘,為了過彎加裝單向輪/彈簧前後翼等...
為了因應不同場地而做調整,須累積大量的經驗,熟悉各種零件的特性,以整體賽道所有難關的"最大公約數" 的方向去做調整
在這個過程中,不斷的去發揮創意改裝與測試,真的有很多樂趣,這也是四驅車吸引人的地方
不過玩了一陣子後,就一直在想以這種玩法,就算玩到最極限,也是要配合賽道在各種方面(速度、重量、改裝方式等...)做取捨,所以漸漸地有了一個想法:
何不結合單晶片,讓車子自行適應軌道後做調整,這樣可以使用幾個基本車型(像是輕量高速型或是扭力型)來稱霸所有類型跑道
其實這就是卡通裡的GP 晶片啊!!!
在網路上有看到一些玩家使用單晶片改裝GP晶片,但是偏向語音或人工控制車子
https://www.youtube.com/watch?v=85913C7MjoQ
https://www.youtube.com/watch?v=C1x2Jdm_9eA
而我比較感興趣的部分則是讓車子自行學習,能夠自行適應各種跑到跑出不錯的成績
有了這個想法後,漸漸的想了一些可行的架構與做法,部分的功能也曾經做出可行的成品
(綠色部分是已經有做過有經驗的部分,藍色部分是已有方向正在研究中,紅色部分是還沒有想法或是需要重頭學習的領域)
目前先規劃一下架構,整理一下有能力與需要學習的部分,最後再全部整合起來
- 自動偵測與儲存完整軌道
- 使用車身上的感測器,低速跑完軌道後自動記錄
- 例如這樣
- 直線*5->左轉90度->直線*2->上坡*1->直線*2->下坡*1->右轉45度.....
- 四驅車軌道有一些基本的單位,可以參考http://ddddiy.blogspot.tw/2016/08/blog-post_6.html
- 使用陀螺儀與g-sensor來做判斷目前所在的軌道型態
- 自我測試取得數據
- 例如
- 直線: 全速
- 剎車力道(例如直線全速後,接近彎道要降速到適合此彎道的入彎速度)
- 90度轉彎,入彎速度最高10M/s才不會飛車
- 跳台
- 飛越跳台時,空中自我修正車身姿態,使落地時能四輪著地
- 依照跳台後面直線的距離,決定進入跳台的車速,保證落地時仍在直線的範圍內
- 若跳台後接急彎,可使落地姿態為稍微前傾,在使導輪能吃到軌道順利轉彎
- 上坡
- 類似跳台,若上坡後接急彎,需考慮到進上坡速度避免衝上去後還在空中就遇到彎道
- 自動學習與控制方法
- 得知軌道排列後,需要計算在哪些路段要運甚麼速度,實際在跑時也要動態控制車子
- 計算的部分運算量可能較大,可以使用
- 自己開發合適的演算法,如果太複雜,也可基於專家系統或人工智慧
- 專家系統
- 大學時修過相關的課程,可使用CLIPS(http://clipsrules.sourceforge.net)
- 使用有限的時間去找出相對較好的解
- 適合變因太多,就算用電腦也無法簡單算出最佳解的用途(以前有學長姊專題用專家系統做出排課系統,最後也真的在學校內上線使用了)
- 這部分以前有寫過一些小專題,真的要做算是有方向
- 人工智慧
- machine learning(最有名的就是Alpha Go了),這部分目前完全沒概念
- 不過這邊有先天上的限制,圍棋可以讓電腦自行對弈,輸了或贏了直接重來,但四驅車有續航力的限制,"失敗"(飛車/翻車/掛軌...) 後須人工修正,甚至壞了需修復,無法快速累積夠多經驗
- 系統平台
- 目前比較熟悉的有8051/Arduino,不過現在Arduino資源很多,有問題也比較好找到高手討論,應該採用Arduino
- Arduino 目前有很多開發板,手邊有的玩過幾張體積比較小的各有優缺點,考量到效能與IO數量,Arduino Micro應該是較好的選擇
- Arduino Pro Mini
- https://www.arduino.cc/en/Main/ArduinoBoardProMini
- ATmega328
- 需使用ISP 燒錄
- Arduino Micro
- https://www.arduino.cc/en/Main/ArduinoBoardMicro
- 效能較強
- ATmega32u4
- 內建micro USB
- Arduino Nano
- https://www.arduino.cc/en/Main/ArduinoBoardNano
- Atmel ATmega168 or ATmega328
- 內建USB
- DigiSpark
- http://digistump.com/products/1
- http://ddddiy.blogspot.tw/2016/08/arduino-digispark.html
- Attiny85
- 體積超級小,但IO太少
- 基本感測器
- 車身姿態
- 可以直接套用四軸姿態系統
- 使用卡爾曼濾波結合g-sensor + gyro 來算出車身姿態
- http://ddddiy.blogspot.tw/2016/08/gyro-g-sensor.html
- 使用整合性的硬體(MPU6050)
- 轉向
- 使用陀螺儀確認彎道的角度
- 車身是否離地
- 接近感應器(手機接電話拿到耳朵邊時自動關螢幕) <==可從公司報廢的開發板上拆下
- 電池電壓
- 單晶片通常都內建ADC可直接用
- 車速
- 車身未離地時的輪胎轉速
- 可用光遮斷器(滑鼠滾輪的原理, 組合了光電晶體與LED)
- 搭配G-sensor可判斷輪胎是否空轉
- 紅外線感應器
- 如果排軌時軌道有分色,可以參考自走車的作法,偵測跑了幾節軌道
- 基本控制功能
- 車速
- 可由電子變速器控制車速,也可做到剎車
- 調電壓來調速
- PWM調速
- 可藉由偵測輪胎轉速回授,使用PID控制馬達達到定速功能,這樣對於上層控制系統來說,能用更簡單的演算法來控制
- 轉向
- 使用電磁鐵 - 一些便宜的玩具遙控車的作法
- 成本低,但通常只能兩段控制,且力道不大
- 使用伺服機 - 一般遙控車做法
- 控制簡單,且拉力大又能夠比例控制
- http://ddddiy.blogspot.tw/2016/08/blog-post_5.html
- 重心
- 前後方向
- 可使用馬達轉速控制前後傾斜,原理同遙控車跳跳台
- 在空中時,加油門用輪胎的反作用力抬起車頭,反之剎車可壓低車台
- 搭配車身姿態偵測,使車身在空中自我保持水平
- 左右方向
- 移動重捶? 目前還沒有太好的想法
- 通訊
- BT
- 一般NB/手機都有內建
- 成本較高,使用SPP 實做簡單
- http://ddddiy.blogspot.tw/2014/02/hc-05-bt-module.html
- http://ddddiy.blogspot.tw/2014/03/arduino.html
- digital RF 模組
- NRF24L01 - 便宜好取得(露天拍賣就一堆),沒加PA控制距離就跟藍芽差不多
- NB端需外掛一個Arduino + NRF24L01 來做通訊
- http://ddddiy.blogspot.tw/2016/08/x9d-nrf24l01-v2x2-protocoljj1000.html