2014年9月23日 星期二

我的飛行器 -- 建構四軸時所遇到的問題與解決方式

以下整理自己建構四軸飛行器時所遇到的問題與解決方式。持續更新中...

1. Mission Planner 無法解鎖。
問題在於 Devo10 搖桿方向的值剛好介於 1100~1900,但是Mission Planner要求解鎖時,方向按鈕值需大於1900。 
有二種方法可以解決
a. 透過搖桿的微調按鈕進行微調,
b. 透過搖桿的控制介面調整比例,將比例由 100 改為 101
    [模型選單]->[混控器]->[方向]

我的飛行器 -- 插頭焊接

在實作4軸飛行器的過程中,會需要自行焊接連接用的插頭,可能會用到以下三種插頭
  • 金插,
  • T型接頭,
  • XT-60,
對於從未拿過焊槍的我,實在不敢貿然下手,因此在網路上先透過各種銲接影片學習,今將參考到的影片整理如下。

2014年9月17日 星期三

我的飛行器 -- DEVO 10 遙控器的設定方式

APM 可以透過多種遙控器進行控制,此處我選的是華科爾 DEVO10 遙控器 + RX1002接收器,以下記錄對此遙控器的設定方式。

我的設備如下
  • 遙控器  Devo10 + RX1002
  • APM 2.6

2014年9月15日 星期一

我的飛行器 -- 編譯各類型 DEVO 遙控器的模擬器

本篇介紹如何編譯 Deviation source code,因為我並不需要自行修改遙控器的韌體,因此重點擺在如何自行編譯模擬器,以下將以編譯我的遙控器 DEVO 10為例,說明如何分別在(Ubuntu, Mac OSX) 這兩個作業系統編譯模擬器。

一、Ubuntu 14.04 TLS

1. 下載程式碼控管軟體 mercurial
$ sudo apt-get install mercurial
2. 下載程式碼
$ hg clone https://bitbucket.org/PhracturedBlue/deviation
3. 編譯程式
$ cd deviation/src
$ sudo apt-get install g++
$ sudo apt-get install libfltk1.3-dev
$ make TARGET=emu_devo10
4. 執行程式
$ ./emu_devo10.elf
模擬器畫面如下

5. 編譯其他版本遙控器模擬器
只要改變 TARGET 值重新編譯即可,例如需要編譯 DEVO 8 模擬器,便可輸入make TARGET=emu_devo8,其模擬器畫面如下

二、Mac OS X 10.9.4

1.  下載程式碼控管軟體 sourcetree (Mercurial client for Mac) 並進行安裝

2. 下載程式碼,輸入 https://bitbucket.org/PhracturedBlue/deviation,如下圖

3. 編譯執行檔
需先安裝 xcode command line tool
$ sudo port -v selfupdate
$ sudo xcode-select --install 
接著安裝 fltk
$ cd deviation/src
$ sudo port install fltk-devel
$ ../utils/buiild-osx.sh
註:FLTK(Fast Light Toolki,讀做「fulltick")是一個跨平台的C++GUI工具集,用在UNIX/Linux(X11)、微軟Windows和Mac OS X上。 
編譯執行檔
$ make TARGET=emu_devo10 LFLAGS="`fltk-config --ldflags`"

4. 錯誤處理
編譯時遇到了一些錯誤,主要原因是因為 gcc 與 clang compiler 所允許的語法不同所致,若能改用gcc compiler應該就沒問題了,針對 clang 的解決方式說明如下: 
a. builtin function conflict
a.1 錯誤訊息如下:
In file included from target/emu_devo8/channels.c:15:
./common.h:189:8: error: conflicting types for '__builtin___strlcpy_chk'
/usr/include/secure/_string.h:105:3: note: expanded from macro 'strlcpy'  __builtin___strlcpy_chk (dest, src, len, __darwin_obsz (dest))
  ^
./common.h:189:8: note: '__builtin___strlcpy_chk' is a builtin with type
      'unsigned long (char *, const char *, unsigned long, unsigned long)'
/usr/include/secure/_string.h:105:3: note: expanded from macro 'strlcpy'  __builtin___strlcpy_chk (dest, src, len, __darwin_obsz (dest))
  ^
1 error generated.
a.2 修改方式
修改 src/Makefile,CFLAGS 加入 -fno-builtin 
修改 /Users/liaokuohsun/deviation/src/common.h
#ifdef strlcpy
#undef strlcpy // use our own strlcpy()
size_t strlcpy(char* dst, const char* src, size_t bufsize);
#endif 
b. Clang 不支援 nested function,需改寫 nested function
_putc(), _putchw(), assign_int()
c. 改寫下列巨集  
  • OFFSET(s,v)   
  • OFFSETS(s,v)  
  • OFFSET_SRC(s,v)   
  • OFFSET_BUT(s,v)
  • OFFSET_COL(s,v) 
  • OFFSET_FON(s,v) 
d. 需要定義 FLTK_ABI_VERSION 
修改 /opt/local/include/FL/Enumerations.H,將下列這行程式碼的註解拿掉
//#define FLTK_ABI_VERSION 10303
e. 更改過後的檔案放在此處,列表如下,有需要可以自行下載比較。
src/Makefile  
src/common.h
src/std.h
src/config/display.c
src/config/model.c
src/target/common/stm32/printf.c
src/target/common/emu/fltk.h

2014年9月12日 星期五

內存越界檢查 -- 使用 XCode 與 Instrument

最近用 C語言 改寫 webrtc 內的 pseudoTCP,在記憶體配置與釋放遇到一個問題,將本次的解法記錄如下。

問題現象:

pseudoTCP(1403,0x7fff7cc17310) malloc: *** error for object 0x100103c10:
incorrect checksum for freed object - object was probably modified after being freed.

問題可能原因:

一般記憶體出錯的可能原因如下
  • you are freeing an object twice,
  • you are freeing a pointer that was never allocated
  • you are writing through an invalid pointer which previously pointed to an object which was already freed

2014年9月11日 星期四

我的飛行器 -- DEVO 10 遙控器的模擬器

Deviation 設計了一個 DEVO 10 遙控器的模擬器,可以在電腦上先試試看如何操作此遙控器。以下介紹使用方式。

我的飛行器 -- 在 MacOS 上安裝 MissionPlanner

ArduCopter 提供了一個很棒的工具 MissionPlanner,可惜的是只能夠在 Windows 下使用,偏偏我只有 iMac,因此只好設法找出在 MacOS 上安裝 MissionPlanner 的方法,以下將此次測試做一記錄。