もともと,RaspberryPi3B+にUbuntu18.04を入れて,ROS(melodic)でUSBカメラから画像処理して云々するつもりでした.
しかし,USBカメラが大きくてスペースが無かったので,ラズパイのカメラモジュールを載せようという話になりました.
とりあえずラズパイにフラットケーブルぶっ刺せば行けるやろ()とググってみましたが,Raspbianだったり,ROSがIndigoだったりRaspberry Pi 3にROSをセットアップしてRaspberry Pi純正カメラ(Raspicam)で遊んでみた - karaage. [からあげ]でつまずいたので,未来の自分の為にメモとして残しておきます.
環境
- Raspberry Pi 3B
- このメモ書くまでこいつが3B+だと思っていました……
まあ違いなんてないでしょ
- このメモ書くまでこいつが3B+だと思っていました……
- Ubuntu 18.04.4 LTS (Bionic Beaver)
- ここからダウンロードしてきました:Index of /ubuntu/releases/18.04.4/release
- arm64版です
- Raspberry Pi Camera Module
- ROS Melodic Morenia
結論
1. /boot/firmware/config.txtの変更
[pi3]
#kernel=uboot_rpi_3.bin
kernel=vmlinuz
initramfs initrd.img followkernel
[all]
arm_64bit=1
#device_tree_address=0x03000000
start_x=1
gpu_mem=128
config.txtを変えたら,再起動してください.
最後の2行がカメラの設定に必要な行です.
Raspberry Piと純正カメラモジュールで監視カメラを作る、おそらく正しい方法 jessie版 (motion + v4l2ドライバ) - Qiita
2. コマンドを打つ.
$ sudo add-apt-repository ppa:ubuntu-raspi2/ppa
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libraspberrypi-bin libraspberrypi-dev
多分必要ないと思いますが,vcgencmdでカメラの接続確認を行うためにインストールしておきます.
3. cv_cameraノードを使う.
ROSのインストールはここの公式を見ればいいので略します.melodic/Installation/Ubuntu - ROS Wiki
cv_cameraノードをどう使うかも,面倒なので略します.
余談 ただの愚痴です
最初,config.txtのkernelを変えずにカメラモジュールを使おうとしたら,/dev/video0が生成されず,見事にハマりました.
その後,ARM/RaspberryPi - Ubuntu Wikiココらへんを読んでvcgencmdを導入し,カメラの確認をしました.
$ vcgencmd get_camera
supported=1 detected=1
が,それでも/dev/video0が生成されず.
Raspberry Pi3でカメラモジュールをOpenCVで使う - 電気のDIYここで出てきた様に
$ sudo modprobe bcm2835-v4l2
でドライバーを入れようとしてもエラーを返されてドライバーが入らず.
結局ラズパイにUbuntuをインストールし直し,上の手順を踏んだらvideo0が生成されました.
UbiquityRobotics/raspicam_node: ROS node for camera module of Raspberry PiこいつがKineticしか対応していないので無理かと思いつつcv_cameraで試したら一発で成功し歓喜しました.
あと,ARM/RaspberryPi - Ubuntu WikiココらへんのOptional_PPAsの項目を読んでいると,raspistillコマンドも使えるようになると思いきや,使えませんでした.
raspberrypi/userland: Source code for ARM side libraries for interfacing to Raspberry Pi GPU.こっちのGithubの説明を読むと,
Whilst 64-bit userspace is not officially supported, some of the libraries will work for it. To cross compile, install gcc-aarch64-linux-gnu and g++-aarch64-linux-gnu first. For both native and cross compiles, add the option --aarch64 to the buildme command.
という感じで64bit版はサポートしていないみたいでしたが,aptでg++-aarch64-linux-gnuをインストールして,cloneしたやつを直接ビルドしたらraspistillも使えました.(使わない)