RaspberryPi3にopencv3.1を導入してRaspiカメラモジュールを使う
RaspberryPi3で画像処理をするにあたり,とりあえずopencvを導入することに.
せっかくなので最新版のopencv3.1を自前でbuildして入れる.(opencv2.xで構わないという人はapt-getで入れられるのでそっちで入れた方がずっと楽)
opencvをbuildするための参考ページはいろいろ探してみたけど
Install guide: Raspberry Pi 3 + Raspbian Jessie + OpenCV 3 - PyImageSearch
ここが環境が完全に一致しているうえ,説明も丁寧で非常に分かりやすかった.結構長い手順だけど途中でpythonとvirtualenvの話をかなりがっつりやっているため,すでに入れている人やPythonを使う気がない人は無視してしまっていいかも.
opencvのmakeは結構重い作業で,二回ほど途中で止まっていた(再開したら何事もなく進むという謎).結局4コアすべて使って合計80分程度かかった.
opencvの準備はこれで完了だが,Raspiのカメラモジュールをopencvで使うためにはRaspicam_cvを導入する必要がある.
GitHub - cedricve/raspicam: AVA RaspiCam: C++ API for using Raspberry camera with/without OpenCv
READMEが結構詳しいため導入は割と順調に進んだ.動作確認のためにREADME下部にあるOpenCV Interfaceのサンプルコードをコンパイルしてみる.NetBeansの場合はプロジェクトプロパティのリンカ―タブの追加のオプションの項に
-lraspicam -lraspicam_cv -lopencv_core -lopencv_highgui
を書いてライブラリの指定を行ってからビルド.
(追加のオプションの指定)
ところがDSO missingが出て怒られた.どうもimwriteで怒られているらしい.
原因はimwriteの含まれるライブラリで,opencv3からはhighguiではなくopencv_imcodecsが必要らしい.
というわけで先ほどのオプションに-lopencv_imgcodecsを追加してビルドしてみると無事に通った.
RaspberryPiの開発環境の構築
RaspberryPi3の開発を始めるにあたり,ひとまず以前A+の開発に使っていたときの環境をベースに環境構築.
基本的に母艦のWindowsベースで開発するので基本操作はVNCかSSH経由.
SSHに関してはraspi-configからSSHをenableにするだけで準備は完了するので楽ちん.
の記事を参考に導入していく.VNCサーバは自動起動させておきたいので
Raspberry Piで遊ぼう [No.5:VNC接続をしよう]:アシマネくんのほんわか日記:So-netブログ
に従って設定.
あと,VNC接続中にクリップボードの内容を同期できるautocutselは非常に便利なので一緒に導入
raspbian - TightVNC copy/paste between local OS and Raspberry Pi? - Raspberry Pi Stack Exchange
ホスト名参照
ラズパイと接続するときにいちいちIPアドレスを調べてられないのでホスト名による参照を導入.
Raspberry Piにホスト名の設定をしたメモ – 1ft-seabass.jp.MEMO
Windows側の準備としてはBonjourを導入する必要があったのだが,Windows10からはデフォルトでホスト名参照できるらしい.なおどちらにせよファイアウォールの登録が必要.受信と送信のどちらにも必要っぽい.
登録の手順
コントロールパネル→システムとセキリュティ→Windowsファイアウォールから詳細設定をクリック.受信or送信の規則→新しい規則 を選び,
規則の種類:ポート
プロトコルおよびポート:UDP,特定のリモートポート:5353
後は適用範囲や名前を適当に決めて完了.
以降ホスト名.localでアクセスできるようになる.
フォルダ共有
VNCベースで開発を進めていると共有フォルダがほしくなることが多いので,
プログラムの開発についてはNetBeansというIDEを使用.NetBeansはWindows上で開発しながらコンパイルのみラズパイ上で行うという器用なことができる.
https://netbeans.org/downloads/
から対象のインストーラを入手してインストール.
以降ラズパイとの接続設定.C/C++の例だがたぶん他も同じ.これらはネットワーク上にラズパイが繋がっていることを確認してから行う.
1.ひとまず普通にプロジェクトを作成
2.ツール→オプション→C/C++のビルド・ツールタブをクリック
3.右上の編集ボタンをクリックしてRaspberryPiの情報を追加
4.プロジェクトのプロパティのビルドの項でビルド・ホストを選択
これでラズパイ上でのコンパイルが可能に.
なおデフォルト設定でコンパイルを行った場合,実行ファイルは
~/.netbeans/remote/ホスト名/ユーザー名-Windows-x86_64/Windows上でのプロジェクトのパス/dist/Debug/GNU-Linux-x86
というめちゃくちゃ深いところに作られる.プロジェクトのプロパティのリンカの項目から,出力ディレクトリを
/home/pi/ファイル名
のように指定すれば変更できるが,IDE上での実行やデバッグはできなくなる?
実行やデバッグのパスを合わせればできそうなものだけど,どうもうまくいかないのでSSHやVNCで直接起動している.いずれなんとかしたい.
今のところの開発環境はこんな感じ.また便利なものを見つけたら紹介する予定.
RaspberryPi3の下準備
若干時間に余裕ができてきたので,この機にRaspberryPi3をセットアップ.以前に初代A+で開発してたので機材については使いまわせるかと思いきや,Pi3の圧倒的な消費電力のせいで電源回りは総とっかえ.2.5A消費ておいおい...
とりあえず最終的に自作ロボットに乗せる予定なので電源はモバイルバッテリーを使いたい.容量はそんなになくてもいいので軽くて2.5A流せるモバイルバッテリーを探していたらTECさんのモバイルバッテリーが見つかった.
次に2.5A流せる上で短くて安いUSBケーブルを見繕っていたところ,秋月電子で取り扱ってた.さすが秋月.痒い所に手が届く.
USBケーブル Aオス−マイクロBオス 0.15m A−microB: パーツ一般 秋月電子通商 電子部品 ネット通販
ただモバイルバッテリーで本当に使用に耐えるのかはまた別問題.Pi3の電源問題は結構話題になっているらしく,スイッチサイエンスさんが比較検証してくれていた.
http://doc.switch-science.com/support/RaspberryPi3/raspi3power.pdf
これを見るに2.4A対応のACアダプタでぎりぎりといった様子.でもこのグラフを見る限り突入電流でやられてる感じがするからバカでかい平滑コンデンサ乗せればなんとかならないのかなぁ...
それはそれとして,モバイルバッテリーはACアダプタに比べて出力容量が少ないような気がするので低電圧になりやすい気がする.若干不安.
追記
openCVのmake(CPU100%使用で1時間以上かかる)をしたところ,2回ほどエラーで中断された.再開すると何事もなかったかのように進んだので電源に起因する可能性有?
ただmakeにかかった時間は70~80分と他の方の情報と大差ないので実用的には問題なさそうか.
追記終わり.
後はmicroSDカードを適当に見繕って...
Toshiba microSDHC 東芝 UHS-I 超高速 Class10 [並行輸入品] (16GB, 40MB/s)
- 出版社/メーカー: 東芝
- メディア: エレクトロニクス
- この商品を含むブログを見る
いまや16GBでこんなに安いのか.昔は2GBを5000円で買った記憶があるが,すごいもんだ.
ともあれこれで準備完了.A+のときはWifiドングルやらBluetoothドングルやら必要だったのでいろいろ調べた覚えがあるけどPi3は楽でいい.
フリスクでraspberry piカメラのケースを作る
raspberry piカメラを買ったはいいものの,いかんせんむき出しの回路.公式でも静電気に注意しろと言っているのでぜひともケースがほしいところ.
そんな折にフリスクを使ってケースを作っている記事を見つけた
ラズパイのカメラモジュール用ケースの自作 | hiro345
ので試してみることに.(ついでにカメラ雲台の存在を初めて知って衝動買いしてしまった)
どうにもカメラの寸法図は見当たらなかったので,手元の安物ノギスで適当に寸法を測ってinventorにてモデルを作成してみた.
ケースのほうはこんな感じ.
一応図面.寸法は参考値ということで.
購入した雲台の固定部分の幅は30mmだったため,フリスクの29.5mmの幅は実によくフィットする.すごい.
雲台に取り付けてみたところ
雲台を使わないときはカバーを付けられるし,このカメラモジュールとフリスクの相性は抜群だと思う.目を付けた人すごいな.
ケースには満足できたけど,それはそれとしてカメラケーブルの短さにびっくり.取り回しが悪すぎるでしょうに.
というわけでアマゾンで長いケーブルを探してみたら,見つかりはするけど価格設定にびっくり.コネクタもないただのケーブルなのに.
さすがに手が出ないのでeBayで探してみると,100円くらいでわらわらと見つかる.
http://www.ebay.com/sch/i.html?_from=R40&_sacat=0&LH_BIN=1&_nkw=raspberry+camera+cable&_sop=15
とりあえず使い勝手のよさそうな30cmと50cmのものを買ってみた.届くまで時間がかかるけどこの安さは正義.とはいえ品質に問題がないかはわからないので届いたらしっかり検証しよう.
AtmelStudio7.0に「RelativeNumber」を導入する
やはりVimを使うなら行番号の相対表示は欲しい.
有名どころでは「RelatveNumber」とか「RelativeLineNumbers」とかあるけど,どちらもそのままじゃAtmelStudioに入ってくれなかった.
幸い「RelativeNumber」の方はMITライセンスでソースコードが公開されているので,まだ手が付けられそう.
前回(AtmelStudio7.0に「VsVim」を導入する - 徒然創作記)は有志がAtmelStudio用にBuildしてくれてたけど,今度はそんなのもなさそうだ.
VisualStudioのExtentionなんていじったことないけど,とりあえず手を付けてみるか.
まずはソースを
https://github.com/brianschmitt/relativenumber
から入手.RelativeNumber.slnを開こうとすると,SDKがないため正常に開けないと怒られたのでSDKを
Microsoft Visual Studio 2013 SDK extension
から入手.
VsVimのQ&Aを参考に,source.extension.vsixmanifestに <InstallationTarget Version="[7.0,]" Id="AtmelStudio" />を追加.
で,buildするとbin\ReleaseにRelativeNumber.vsixができているので前回と同様にVSIXInstallerにドラッグ&ドロップ(.vsixに関連づけられているものはバージョンが一致していない可能性があるため,直接叩いた方が安心).
これで無事に導入できた.
AtmelStudio7.0に「VsVim」を導入する
普段使いのPCとしてSurfacePro3を愛用しているけれど,Surfaceのキーボードはカーソルキーが小さくプログラミングには非常に不向き.
そこで,プログラミング用にキーボードを探していたところ,そもそもカーソルキーを使わないで済むエディタを使えばいいのではと逆転の発想に至り,巷で話題のVimを導入することに.
ひとまず普段よく使う環境にVimを導入して回っていたところ,AtmelStudio7.0にVimアドオン「VsVim」をインストールする際に躓いたのでメモ.
から普通にダウンロードして,自動起動したVSIXInstaller.exeでインストールしたところ,VisualStudioにはアドオンが追加されたのにAtmelStudioには追加されていなかった(インストール確認画面ではどちらも選択してあった).
で,どうもQ&Aを読んでいると,ソースを少し書き換えないといけないらしい.でも心優しい方がQ&A内でビルド済みのファイルを用意してくれていた.
https://ci.appveyor.com/api/buildjobs/vr148c59ngwny3ma/artifacts/VsVim.vsix
このファイルをC:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDEにあるVSIXInstaller.exeにドラッグ&ドロップしたら無事に導入成功.
(※.vsixに関連づけれられているVSIXInstaller.exeはバージョンが異なる可能性があるので,直接叩いた方が安心)
これでAVRもVimで開発できるぞー.