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 的方法,以下將此次測試做一記錄。

我的飛行器 -- 4軸購買清單


圖片來源 https://code.google.com/p/arducopter/

2014年9月10日 星期三

[轉] 英制螺絲 VS 公制螺絲


公制(mm) = 英制(inch) X 25.4

英制螺紋俗稱 " 惠式螺紋 " 標示以 W__*N__.

W就是惠式螺紋(英制). W後面那個數字就是我們俗稱幾分. 幾分就是 8 分之幾英吋, 所指為螺紋外徑大小.

N就是螺紋牙距( 螺紋牙與牙間隔 ). 以每一英吋有多少數量螺紋.

公制螺紋標示以  M__*P__.

M後面那個數字也是指螺紋外徑大小. 表示螺紋外徑 " mm "

P也是指螺紋牙距, 但所表示為每一牙距距離為多少" mm "

( 英制螺紋牙距表示每一英吋有多少數量螺紋
  公制螺紋牙距表示每一牙距距離為多少 )

英制螺紋與公制螺紋在市場上多有固定規格尺寸之螺絲

在標準規格中有分粗牙與細牙(牙距不同 ), 不論粗牙或細牙皆有各外徑所配對之牙距. 成為規格

在市場上大多使用為粗牙螺絲, 所以稱呼上會直稱幾分(英制)或幾mm(公制). 將牙距稱呼簡略. 要細牙也是一樣只說細牙幾分或細牙幾mm. 因為你要平常人們是記各外徑所配對之牙距, 很難.

因市場上成為規格, 所以所有螺絲配套東西皆固定規格.

如果你須要不同規格螺絲(牙紋), 必須另行加工(車床), 無法使用規格配套東西

英制螺紋與公制螺紋是不同牙系規格, 各成一套系統, 二者是沒有互換性, 所以也沒有你所說之 " 對照表 ".

不只英制螺紋與公制螺紋外徑與牙距不同, 連螺絲頭六角帽螺帽規格尺寸多有一點差異, 所以連六角扳手多有分英制與公制

公制就是公制,就是使用在公制螺絲上
英制就是英制,就是使用在英制螺絲上
兩者使用的六角板手是不能共用的
否則將會損傷螺絲或板手

六角板手的號碼就是他的尺寸大小
公制 #3 代表六角面兩個平行面之間的尺寸是 3 mm
英制 #1/2 代表六角面兩個平行面之間的尺寸是 1/2" = 12.7mm
鑽孔尺寸 = 螺絲外徑 - 螺距

例如:

公制
M3 X 0.5 (外徑 = 3mm ,牙距 = 0.5mm) 
鑽孔尺寸 = 3mm - 0.5 = 2.5mm 
M5 X 0.8 
鑽孔尺寸 = 5mm - 0.8 = 4.2mm

英制螺絲

1/8"-40T (外徑 = 1/8" = 3.175mm ,每英寸40牙) 
鑽孔尺寸 = 3.175mm - 0.635mm = 2.54mm 
螺絲攻上面的標示,就可算出應該鑽多大的孔徑 
3/8"-16UNC (外徑 = 3/8"  ,16UNC = 美國粗牙每英寸16牙) 
3/8" = 25.4 * 3 / 8 = 9.525mm 
16UNC牙距 = 25.4 / 16 = 1.5875mm 
鑽孔尺寸 = 9.525mm - 1.5875mm = 7.9375mm 
所以3分螺絲,鑽孔8mm就可以

2014年9月4日 星期四

WebRTC -- 網路資源

此篇收集網路上與 WebRTC 有關的各項文章。

摘要說明
XMPP與IMPP、PRIM、SIP(SIMPLE)合稱四大IM協議主流,在此4大協定中,XMPP是最靈活的。
Google Talk 使用開放的 XMPP 協議(原名Jabber),VoIP功能使用 XMPP 擴展的Jingle協議,若要開發一個 P2P 的服務,可以直接參考 Google 的 libjingle source code,其URL為 https://code.google.com/p/webrtc/。 

2014年9月2日 星期二

iOS -- 使用音頻資料產生波形圖(Waveform)

對於 iOS 上的 Audio 應用,本人已經學會了使用 AudioUnit 進行播放,錄音以及混音,也了解如何使用 AudioConverter 或是 FFmpeg 進行音頻格式的轉換,接著要練習的便是利用 Audio 畫出 Waveform。本篇將針對 Waveform 作一介紹。