Raspberry Pi 4+ROSでRasberry Piカメラモジュールを使ってみる
前回でついに自作ロボットが動き出したのだが、現在ロボットの前面につけているラズパイのカメラモジュールは動かしておらず、ただの飾り状態になっている。
カメラで画像が取得できれば色々とできることも広がりそうなので、今回はROS(Noetic)でカメラモジュールを動かして画像を取得してみる。
実行環境
Raspberry Pi 4 Model B / 4GB
Ubuntu Server 20.04.5 LTS(64-bit)
ROS Noetic Ninjemys
Raspberry Pi カメラモジュール Rev1.3
raspicam_nodeをインストールする
今回は以下のraspicam_nodeを使わせていただくことにした。noeticでもRasberry Pi Camera moduleのv1.xとv2.xで動くようだ。
https://github.com/UbiquityRobotics/raspicam_node/tree/noetic-devel
上のページの手順に通り、まずはUbiquity Roboticsさんのページに書いてあるPackage Repositoriesを追加しようとしたのだが、キーの部分で以下のようなエラーが出てしまった。
$ sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C3032ED8 Executing: /tmp/apt-key-gpghome.TY1GrtKUYl/gpg.1.sh --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key C3032ED8 gpg: keyserver receive failed: Server indicated a failure
ググッてみてもよくわからんかったので、githubのページに戻って「Build Instructions」の手順で、ソースコードからビルドすることにした。githubの手順通りやっただけだが、一応メモしておくと、まずラズパイ(Ubuntu)でターミナルを開いて
cd ~/catkin_ws/src
でcatkin_ws/srcに移動し、以下でgithubからソースコードをcloneして持ってくる。
git clone https://github.com/UbiquityRobotics/raspicam_node.git
次に、/etc/ros/rosdep/sources.list.dディレクトリに30-ubiquity.listというファイルを作成するのだが、ここはroot権限じゃないとファイル作成できなかったので、私は/etc/ros/rosdep/sources.list.dディレクトリに移動して
sudo touch 30-ubiquity.list
でファイルを作成した。あとは
sudo vi 30-ubiquity.list
でviを使ってファイルを開き、
yaml https://raw.githubusercontent.com/UbiquityRobotics/rosdep/master/raspberry-pi.yaml
をファイルに追加して保存して閉じる。そのあと、
rosdep update
でROS の依存関係を更新し、
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro=$ROS_DISTRO -y
で依存パッケージをインストールする。最後に
catkin_make
でビルドして完了。ビルド中に一部Failとかなんとか出ていた気がするが、ビルドは完了してその後カメラも使えたのでまぁ良しとする。
UbuntuでRaspberry Piカメラモジュールの接続を有効にする
ラズパイをRaspberry Pi OSを動かしている場合はたしかデフフォルトでカメラモジュールが使えた気がするが、Ubuntuで動かす場合は設定が必要になる。/boot/firmware/config.txtをviなどで開いて、
start_x=1 gpu_mem=128
を設定する。gpu_memはカメラの用メモリの設定で、あまり小さいと動かないらしい。適切な値がよくわからないがとりあえず128MBにして準備OK。ちなみに、どうも再起動しないと設定が反映されないようだったので(私の勘違いかもしれないが)ここまで来たら一度再起動しておくとよいかも。
ちなみに、最初この設定をせずにraspicam_nodeを動かそうとしたら
Failed to create camera component
というエラーが出て動かせず、小一時間悩んでしまったので注意…。
この設定については以下を参考にさせて頂きましたm(_ _)m
Raspberry pi 4とUbuntu Server 20.04 64bitでRaspberry pi cameraを使う
raspicam_nodeを動かしてみる
いよいよraspicam_nodeを動かしてみる。今回は、以下のようにラズパイカメラの前にミニカーを置いてテストしてみた。
ラズパイでターミナルを立ち上げて、私はRev1.xのカメラを使っているので、以下のlaunchファイルを実行。
rosrun rqt_reconfigure rqt_reconfigure
エラーなく実行されればキャプチャーが開始されるので、この状態で別のターミナルを起動し、
rqt_image_view
でimage Viewを立ち上げる。raspicam_nodeが起動していれば、左上からraspicam_nodeが選択できるはずなので、選択してみると・・・
画像が表示された!これで自作ロボットで画像も取得できるようになった。しばらくはraspicam_nodeの使い方を勉強していきたい。
ROS勉強記まとめ
この勉強記は以下のページでまとめてます。