Jetson NanoでPicam360を始めよう – 4: カメラキャリブレーション
2021-05-11 2023-10-18
Picam360カメラをJetsonNanoに接続して360度映像をリアルタイムストリーミングする手順を紹介する連載、今回は第4回です。
本稿の英語版→English version is available here.
こんちには、Picam360開発コミュニティのGAKUと申します。
前回の投稿ではサーバーソフトウェアのPServer(ピーサーバー)をインストールする手順を説明しました。今回はカメラをキャリブレーションする手順を紹介します。
何をキャリブレーションするのか?
出荷状態のPicam360は調整されていない状態です。そのままでは撮影はできても綺麗な映像は撮れません。物理的なズレを調整し、レンズの状態の計測してソフトウェアに教える必要があります。
ピント調整:
出荷状態はピントは調整されていないので、ピントを調整します。
イメージセンサに対するレンズの位置:
カメラのイメージセンサーに対してレンズは多少なりズレています。そのズレ量を計測してソフトウェアで画像の中心を補正します。
レンズの歪み補正:
魚眼レンズはレンズ内の位置によって歪み方が違います。それはレンズの特性であり、レンズのモデルによって異なり、同じモデルでも微小の個体差があります。その歪み方を計測してソフトウェアに教えます。ソフトウェアはその情報を用いて人間が見て自然な画像になるよう補正します。
キャリブレーションはいつ実施するのか?
初回使用前にキャリブレーションは必須です。持ち運びなどにより、フォーカスなどのズレが発生し得るためキャリブレーションは定期的に実施することをお勧めします。
カメラキャリブレーションの手順
それではカメラのキャリブレーションの手順を説明していきます。繰り返しになりますがインストール後の初回使用前にキャリブレーションは必須です。キャリブレーション無しでは動作しません。
チェッカーボードを準備します:
下記のリンクからチェッカーパターン画像(市松模様)のファイルをダウンロードします。ファイルを100%の印刷倍率で印刷し、厚紙などの平らで硬い板に貼り付けます。
チェッカーボードが準備できたらキャリブレーションの手順に入ります。
モニター、キーボード、マウスを接続します。キャリブレーションはssh接続では実施できません。
ターミナルを開きます。
古いキャリブレーションファイルを削除します。
以下のコマンドでPServerのパスを表示させてコピーしておきます。
$ which pserver # 表示例: # /home/picam360/.nvm/versions/node/v14.17.0/bin/pserver
nodeのバージョンディレクトリ以下のパスを下記のように書き換えて、下記の削除コマンドを実行します。ファイルが存在しない場合はエラー No such file or directoryが表示されますが問題ありません。
$ rm /home/USER_NAME/.nvm/versions/node/v14.17.0/lib/node_modules/node-pserver/lens_params.json
キャリブレーションモードを実行します。コマンドを実行すると画面が現れます。
$ pserver --calibrate=640x480@30:/dev/video0
画面を見ながらピントを調整します。近くに何か物を置いて、映像を見ながらレンズを回し、ピントが最も合う位置に固定します。
チェッカーボードを使用してキャリブレーション情報を登録していきます。
カメラの視野内にチェッカーボードを入れます。左画面をマウスでドラッグすると視野方向を変更でるのでチェッカーボードが映る位置に視野を移動させます。チェッカーボードが認識されると虹色の複数の丸が表示されます。
ヒント:認識しづらい場合はチェッカーボードにスマホのライトなどをあてて面を明るくすると認識しやすくなります。
キーボード のAキー を押して、認識した虹色の丸の位置を登録します。最後に認識した虹色の丸の位置は記憶されているのでAキー を押す時に虹色の丸が画面に表示されていなくてもOKです。登録された位置は右画面に緑色の丸で表示されます。
視野方向の移動と位置の登録を繰り返して、緑の丸が右画面のイメージサークルをできる限り覆うように配置します。
ヒント:キャリブレーションが完了して実際に使用した時に画面に歪みがある場合は、丸がイメージサークルを覆えていません。その場合はもう一度このキャリブレーションをやり直しましょう。
緑の丸が配置できたら、最後にキーボードのEキーを押します。キャリブレーションファイル lens_params.json が出力されます。
Eキーを押したときにターミナルにエラーメッセージ(ERR=…)が出力された場合は、キャリブレーションファイルを削除して、再度キャリブレーションをやり直してください。
ターミナル画面でCtrl+cを押して、キャリブレーション画面を終了します。
キャリブレーションファイルを移動する
キャリブレーションファイルの出力場所はPServerソフトウェアのインストールディレクトリです。ファイルはその場所に置いたままでも使用できますがPServerを再インストールした場合などにソフトウェアと一緒に消えてしまうので、管理しやすいようにそれを設定ファイルの管理フォルダに移動します。
まず以下のコマンドでPServerのパスを表示させてコピーしておきます。
$ which pserver # 表示例: # /home/picam360/.nvm/versions/node/v14.17.0/bin/pserver
nodeのバージョンディレクトリ以下のパスを下記のように書き換えて、ディレクトリに移動します。
$ cd /home/USER_NAME/.nvm/versions/node/v14.17.0/lib/node_modules/node-pserver
lsコマンドを実行するとlens_params.jsonが存在するはずです。
$ ls
そのファイルを設定ファイル管理ディレクトリに移動させます。この時にファイル名の末尾にカメラ番号を示す0を追加します。
$ mv -f lens_params.json ~/pserver/lens_params0.json
移動が完了したらファイルを開いてレンズの画角設定を変更します。“maxfov”:を220に変更します。
$ cd ~/pserver $ nano lens_params0.json
例:
{"k":[0.089557,-0.026938,0.000628,-0.000173],"f":[0.231964,0.309159],"c":[0.547276,0.577997],"maxfov":220}
Ctrl+o, Ctrl+xでファイルを保存して閉じます。
設定ファイルを更新する
設定ファイルを開きます。
$ cd ~/pserver $ nano jetbot-vr180x1-config.json
stream_params内のcapture.meta要素のlens_paramsをフルパスに変更します。
# 変更前: lens_params=\”file://lens_params.json\” # 変更後: lens_params=\”file:///home/USER_NAME/pserver/lens_params0.json\”
以上で、カメラキャリブレーションは完了です。
次に続く。
連載: Jetson NanoでPicam360を始めよう
Picam360リンク:
- ウェブサイト: https://www.picam360.com
- ウェブストア: https://store.picam360.com
- Twitter: https://twitter.com/picam360
- Facebook: https://www.facebook.com/Picam360/