[心得] 四軸後續

看板C_and_CPP作者 (沒有存在感的人)時間7年前 (2016/12/23 02:02), 7年前編輯推噓4(403)
留言7則, 5人參與, 最新討論串1/1
(前情提要在LinuxDev板,#1M4NwTYZ) 改寫得差不多了,來分享一下後續 (正在等加了天線的RF module,拿到了再找好天氣試飛) 先給source code https://github.com/gnitnaw/RTPiDrone (mkdir build; cd build; cmake .. 後 make doc可以看到編好的文件,記得要安裝doxygen) 講一下跟本板有關的事項: - linked list很好用 去年的版本我已經發現週期會不定時突然暴增找不到原因。 今年這部份解決了,是卡在file i/o上。 每 1 or 2個 控制週期(4ms)我會將四軸當下的state存下來, 可是SD卡有時會突然不回應(idle快一秒) 四軸飛控如果半秒沒刷新state鐵掛。 (SD卡會有這樣的問題有可能是因為wear leveling的關係, 問題是你不可能不用wear leveling) 所以解決方案就是另開一個thread作file i/o 當有data要存下來時,把該data保存在linked list的最後, 然後叫醒(pthread_cond_signal)做file i/o的thread 該thread會從linked list最前面開始存入,直到該list只剩一個item。 (因為是thread,控制週期一到它會讓出CPU,就算i/o沒結束) - 控制週期的問題 普通的non-RT Linux是不可靠的,你得用Preempt RT或Xenomai 使用以下的函式可以指定在某絕對時間Time醒來。 (不過建議先把ntp關掉就是) clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME, &Time, NULL); 使用Xenomai的情況下,誤差差不多200us左右 Preempt_RT在priority max的情況下會比Xenomai更好。 - 通訊模組 我是用nRF24l01,支援SPI,可以把讀取時間降到最低(8Mbps) 如果改用UART介面會慢很多(最多115200bps) (慢不要緊,可是Preempt RT/Xenomai都會導致系統吞吐量下降) (CPU負擔增加,real time效果也會變差) 不過nRF24l01的問題是訊號太差,我最多只能離5公尺遠,不然收不到訊號。 其他的東西因為跟本板比較無關,就先不說了。 有問題推文問好了。 最後,感謝大家的協助,我從本板學到很多。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 90.41.173.65 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1482429736.A.0DF.html ※ 編輯: wtchen (90.41.173.65), 12/23/2016 02:03:18 ※ 編輯: wtchen (90.41.173.65), 12/23/2016 02:03:27 ※ 編輯: wtchen (90.41.173.65), 12/23/2016 02:04:20

12/23 12:12, , 1F
12/23 12:12, 1F

12/23 12:58, , 2F
nRF24l01有加pa的版本(要裝天線) 個人實測可以到1km
12/23 12:58, 2F

12/23 17:12, , 3F
1km 是指空曠無障礙處?
12/23 17:12, 3F

12/23 18:40, , 4F
河堤空曠無障礙 測到1km之後就沒測了
12/23 18:40, 4F

12/23 22:52, , 5F
已經可以飛了嗎?
12/23 22:52, 5F
我在室內測(綁住一軸),平衡已經沒問題了。 最近因為天氣太差(潮溼)+RF module有效距離不夠(5m),沒機會試飛 試飛恐怕要等一個月後。 現在正在等料送來,順便把該焊好的焊好 剛好arduino也被我玩掛了(唉) ※ 編輯: wtchen (90.41.173.65), 12/24/2016 00:28:36

12/24 18:37, , 6F
真不簡單, 期待後續的分享。
12/24 18:37, 6F

12/24 21:33, , 7F
12/24 21:33, 7F
文章代碼(AID): #1ON1Ke3V (C_and_CPP)