Raspberry PiのカメラモジュールをOpenCVで使おうとしてハマった

YMMFに持っていくロボットを調整してて、カメラモジュール関連でやったことまとめておく。
前回(2013年)はUSBカメラをつけて制御させてたけどパフォーマンスが悪かったので今回カメラモジュールを使うように変更した。
ちなみに前回の時もカメラモジュール自体は入手していたんだが、開催一週間前だったしまだ情報が出回っていなかったので使用を諦めた。
今回調べなおしてカメラモジュールでOpenCVを使うための情報があったので、その通りやってみた。
参考:【Raspberry Pi 2】 RasPiカメラモジュールをOpenCVで使用する

自分の環境がRasPi2でなくて普通のmodelBだったかもしれないがビルド時にエラーが出たので対処法を載せてみる。
まず上記参考ページでは手順が2つあって一つ目がuserlandのビルド、次にraspicamライブラリのビルド
ひとつ目の方で下記のようなエラーがでてしまった。

/opt/vc/include/interface/vcos/vcos_timer.h:112:6: warning: inline function ‘vcos_timer_delete’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_timer.h:109:6: warning: inline function ‘vcos_timer_reset’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_timer.h:102:6: warning: inline function ‘vcos_timer_cancel’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_timer.h:95:6: warning: inline function ‘vcos_timer_set’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_timer.h:80:15: warning: inline function ‘vcos_timer_create’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_mem.h:93:15: warning: inline function ‘vcos_get_free_mem’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_thread.h:269:6: warning: inline function ‘vcos_thread_resume’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_thread.h:262:5: warning: inline function ‘vcos_thread_running’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_thread.h:251:15: warning: inline function ‘vcos_change_preemption’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_thread.h:234:6: warning: inline function ‘vcos_thread_relinquish’ declared but never defined [enabled by default]
/opt/vc/include/interface/vcos/vcos_thread.h:186:15: warning: inline function ‘vcos_thread_get_affinity’ declared but never defined [enabled by default]

最初気付かずにふたつ目の手順までやって、いざライブラリを使おうとしたら実行時にエラーが出たので色々調べてやり直していたらやっとそもそも最初から失敗していたことに気づいた。
検索しても日本語のページが見つからないのでしょうがなくGitHubに上がっているissueみたら同じ症状があった。
vcos_timer_delete and other functions incorrectly declared inline #220
よくわかんないけど、パッチ当ててる人がいたからその情報を見て手で必要な部分を修正した。
userlandを落としたディレクトリに入って以下のファイルを編集
/interface/vcos/vcos_types.h
以下の一行を検索して次のように変更

#define VCOS_INLINE_DECL extern __inline__

↓ ↓ ↓

#define VCOS_INLINE_DECL extern

また、次の一行も変更

#define VCOS_INLINE_DECL static _VCOS_INLINE

↓ ↓ ↓

#define VCOS_INLINE_DECL extern

次に以下のファイルを編集
interface/vcos/pthreads/vcos_platform_types.h

#define VCOS_INLINE_DECL extern __inline__

↓ ↓ ↓

#define VCOS_INLINE_DECL extern

これで再度userlandのビルドからやり直して、ソースをビルドしたところ問題なくカメラモジュールを使うことができるようになった。

コメント

タイトルとURLをコピーしました