産業用Raspberry Pi(ラズベリーパイ)を使いLiDAR(ライダー)を動かしたいというニーズがあります。LiDARはレーザー光線によって物体の距離を測るもので、自動運転の車や、お掃除ロボット、測量などで利用されています。レーザー光線を360℃で当て、障害物を検知してマッピングさせます。
言葉としては”センサー”の方がイメージしやすいでしょうか。広義な意味でリモートセンシングの1つです。ちなみにレーダーは電波です。
一瞬、カメラ映像の方が良さそうに思えますが、映像だと情報量が多すぎて精査をする必要が出てきます。LiDARなら、詳細を把握する前に「そこに何かがある」と即座に検知できます。
それ以上に重要なのは、光線が物体に当り返ってくる時間(または周波数)を元に距離を計測できるメリットがあります。映像では距離測定は難しいですね。
LiDARで計測させた点の集まりを空間にマッピングすることで、3Dスキャンが可能になるという仕組みです。
補助的にカメラ映像を使うことも考えられ、お互いに連携することで用途が広がります。
LiDARとAIを連携させることも十分に考えられる時代になりました。

ラズベリーパイでも試せる
LiDARを産業用ラズベリーパイで扱うのは理に適っている気がします。小規模であったり、部分的な取り組みであれば、ラズベリーパイ1台で済むからです。
産業用でも、ラズベリーパイはノートPCと比べて小さく軽い部類です。各インターフェイスも基本が揃っており、ある程度の連携も熟せます。
基本OSは汎用的なUbuntuを初めとしたLinuxが選べ、計測したデータをマッピングするためのオープンソースのソフトウェアも動作するからです。
Pi 5/CM5の登場以来、マシンとしての処理速度も以前より実用的になっています。
LiDARとして計測するデバイスの価格はピンキリですが、安価な物なら産業用ラズベリーパイと合わせて低コストで試せます。
今回はロボティクスで有名なミドルウェアのROS 2(Jazzy Jalisco)を扱えるように、OSとしてUbuntu 24.04をインストールしました。
ROS 2はUbuntuであればバイナリパッケージが提供されています。
※ROS 2 = Robot Operating System V2
Raspberry Pi Compute Module(以下、CM)は、OSをeMMCへ書き込むため事前にrpibootを使用します。
rpibootを使いOSをインストールし、ROS2のインストールまでご紹介します。
この環境にLiDARデバイスを繋げば、すぐにマッピングデータを取得できるようになるでしょう。
インストールする環境
今回はUbuntu 24.04LTS Desktop版を使います。同じUbuntuでも、サーバー版やコア版をインストールするには、モジュールやドライバが足りずに上手くインストールできない恐れが出てきます。デバイスツリーの変更など、少々ハードルが高いため、無難にデスクトップ版を使いました。
microSDカードではなく、eMMCの領域にインストールします。

- ComputeModule 4搭載「PL-R4」eMMC/32GB、RAM/8GB
- USB Type-Cケーブル
- Ubuntu 24.04.2LTS
- ROS 2 Jazzy Jalisco
普段のRaspberry Pi OSではなくUbuntuデスクトップの環境のため、ある程度の快適さで動作させるのに、RAMが4GBでは少々役不足です。RAM8GBモデルを用意しました。
ROS 2のバージョンは、ちょうど2025年5月23日に新しい”kilted”がリリースされましたが、今回は安定している”jazzy”にしました。
eMMCへのインストール方法

eMMCへ書き込む方法は、rpibootを使いUSB Type-Cケーブルでホストマシンと接続します。
「PL-R4」は市販されているCMシリーズとは異なり、ディップスイッチで書き込み可否を簡単に切り替えられます。
_ microHDMIケーブルと電源ケーブルも接続せず、製品単体をUSB Type-Cケーブル1本でPCと接続します。_

Raspberry Pi Imagerを実行するホストマシンは、Windowsに限らずmacOS、Linuxでも可能です。
それぞれrpibootのインストールと実行方法が異なりますので、使うホストマシンに合わせてrpibootを用意してください。
rpiboot.exe(Windowsの場合)
Windows 11をホストデバイスにするなら、インストーラーから始められます。
ダウンロードURL:https://github.com/raspberrypi/usbboot/raw/master/win32/rpiboot_setup.exe
実行すれば、関連ドライバーなど必要な物も一緒にインストールされます。
_ 注意:インストール中に表示されるウィンドウは閉じないでください。 _
再起動後、Windowsがハードウェアを検出し、必要なドライバーを構成してくれます。簡単ですね。
rpibootの起動は、スタートメニューにある「Raspberry Pi – Mass Storage Gadget – 64-bit」です。
実行したあと、少し待てばeMMCがUSB大容量記憶装置デバイスとして表示されます。
これでUSBハードディスクを繋げた時と同じように、シリアルポートガジェットとして表示されます。
rpibootの起動後、eMMCにOSインストールするのは、いつものようにRaspberry Pi Imagerで書き込めます。
書き込み先を認識されたディスク領域として選べばいつもと変わりません。

【公式】rpibootのインストールと接続の仕方 Linux macOS Windows
:https://www.raspberrypi.com/documentation/computers/compute-module.html#set-up-the-host-device
apt install(Linuxの場合)
ホストデバイスとしてもう一台のRaspberry Piで行うこともできます。
aptパッケージがあるので、Raspberry Pi ではお馴染みのaptコマンドだけです。
sudo apt install rpiboot
起動はコマンドからsudo rpiboot
rpiboot起動後、こちらもWindows同様に少し待てば、eMMCがUSB大容量記憶装置デバイスとして表示されます。
Raspberry Pi Imagerで書き込み先を指定するだけです。
このとき、/dev/sda
または/dev/sdb
といった/devディレクトリを指定するのですが、念のため確認してください。lsblk
コマンドを実行して、eMMCの容量と一致するストレージ容量を持つデバイスを探しましょう。間違えると大変です。
認識できた後に行うUbuntuのインストールは、先程のWindowsと同じです。Raspberry Pi Imagerで該当の書き込み先を選びましょう。
rpibootで繋げる(macOS)
macOSの場合はアプリが提供されていませんので、ソースからビルドすることになります。
ターミナルにて、以下の順番で実行してけば、やはり同じようにUSB大容量記憶装置デバイスとして認識されマウント状態になります。
git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
cd usbboot
brew install libusb
brew install pkg-config
make INSTALL_PREFIX=/usr/local
sudo ./rpiboot -d mass-storage-gadget64
成功すると、ターミナルには次のように表示され、プロンプトが戻ります。
# 成功したターミナルの表示
Loading: mass-storage-gadget64/bootfiles.bin
Using mass-storage-gadget64/bootfiles.bin
Waiting for BCM2835/6/7/2711/2712...
Sending bootcode.bin
Successful read 4 bytes
Waiting for BCM2835/6/7/2711/2712...
Second stage boot server
File read: mcb.bin
File read: memsys00.bin
File read: memsys01.bin
File read: memsys02.bin
File read: memsys03.bin
File read: bootmain
Loading: mass-storage-gadget64/config.txt
File read: config.txt
Loading: mass-storage-gadget64/boot.img
File read: boot.img
Second stage boot server done
この状態から、Raspberry Pi Imagerで書き込み先に認識されたディスク領域を選ぶだけです。

Mass Storage Gadget モード
以前とは異なり、このMass Storage Gadget – 64-bitなら、従来の書き込み速度の四分の一程度で書き込みが完了します。だいぶ楽になりました。
CM4はUSB2.0接続でしか接続できないため、まだまだ時間はかかる方ですが12分程度でした。(Ubuntu OSの書込み)
以前のrpibootは1時間弱かかっていたので、それほど面倒に感じなくなりました。

sshをインストールして有効化
無事にUbuntuが起動したら、sshを有効にしておきます。必要がなければ読み飛ばしてください。
Raspberry Pi OSと違い、最初はsshはインストールされていません。
コマンドからaptでインストールします。
sudo apt update
sudo apt install ssh
sshサービスをスタートさせても電源切断後は自動起動しません。無効(disable)のままだからです。
これを有効にしておきます。
sudo systemctl enable ssh
同じく、ステータスコマンドでエラーがないか確認してください。
sudo systemctl status ssh
既にスタートしているかと思いますが、スタートしていないのならstart
sudo systemctl start ssh
事前の設定〜ROS 2のインストール
「PL-R4」のUbuntu 24.04にROSをインストールするには、aptコマンドで行えるのですが、前後にいくつか作業が必要です。
リポジトリuniverseの有効化
sudo add-apt-repository universe
ROS 2 GPGキー(署名検証キー)の追加
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
ROS 2ソースのリポジトリを追加
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
ここで新しいリポジトリの分もアップグレードをしておきます。
sudo apt update && sudo apt upgrade
先にpipのインストールを済ませておく必要がありました。
sudo apt install python3-pip
開発ツールのインストールは、オプションですがあった方が便利です。
sudo apt update && sudo apt install ros-dev-tools
ROS 2のインストール

いよいよ、ROS 2自体のインストールです。時間は10分程度でしょうか。
sudo apt install ros-jazzy-desktop
足りないパッケージがありましたので、追加でインストールしておきます。
sudo apt install ~nros-jazzy-rqt*
続いて、初期設定を済ませます。
ROS 2の初期設定
python.yamlやbase.yamlといったソースリストを設定しておきます。
sudo rosdep init
rosdep update
参考:https://github.com/ros/rosdistro/blob/master/rosdep/base.yaml
続いて、公式ドキュメントにsourceコマンド(source /opt/ros/jazzy/setup.bash
)があります。環境設定です。
これを毎回叩くのも大変なので、~/.bashrc
に登録しておきます。
cd
echo "source /opt/ros/jazzy/setup.bash" >> ~/.bashrc
source ~/.bashrc
作業ディレクトリ(ワークスペース)の設定
次に作業ディレクトリを用意します。
ROS はcolconを使ってビルドするため、colcon buildを実行する場所です。仮想環境でパッケージ依存を解消して実行できます。
ここではワークスペースのディレクトリ名を「ros2_ws」としました。
cd
mkdir -p ros2_ws/src
cd ros2_ws
colcon build
続いて、新しいターミナルを開く度にこのワークスペースでsetup.bashを呼び出せるように登録しておきます。
echo "source $HOME/ros_ws/install/setup.bash" >> ~/.bashrc
これでターミナルを起動すれば、毎回のsourceコマンドの実行が要らなくなります。
次のようなディレクトリ構成のワークスペースになっていればOKです。
./ros2_ws
├── build
├── install
├── log
│ ├── build_2025-05-25_16-19-14
│ ├── latest -> latest_build
│ └── latest_build -> build_2025-05-25_16-19-14
└── src
環境変数の確認
何かエラーに遭遇した際、環境変数が関係していることがありますから、次のコマンドで確認しておくと良いでしょう。
printenv | grep -i ROS
こんな感じで表示されます。
ROS_VERSION=2
ROS_PYTHON_VERSION=3
GZ_CONFIG_PATH=/opt/ros/jazzy/opt/sdformat_vendor/share/gz
AMENT_PREFIX_PATH=/opt/ros/jazzy
CMAKE_PREFIX_PATH=/opt/ros/jazzy/opt/sdformat_vendor:/opt/ros/jazzy/opt/gz_math_vendor:/opt/ros/jazzy/opt/gz_utils_vendor:/opt/ros/jazzy/opt/gz_tools_vendor:/opt/ros/jazzy/opt/gz_cmake_vendor
ROS_AUTOMATIC_DISCOVERY_RANGE=SUBNET
PYTHONPATH=/opt/ros/jazzy/lib/python3.12/site-packages
LD_LIBRARY_PATH=/opt/ros/jazzy/opt/sdformat_vendor/lib:/opt/ros/jazzy/opt/rviz_ogre_vendor/lib:/opt/ros/jazzy/lib/aarch64-linux-gnu:/opt/ros/jazzy/opt/gz_math_vendor/lib:/opt/ros/jazzy/opt/gz_utils_vendor/lib:/opt/ros/jazzy/opt/gz_tools_vendor/lib:/opt/ros/jazzy/opt/gz_cmake_vendor/lib:/opt/ros/jazzy/lib
PATH=/opt/ros/jazzy/opt/gz_tools_vendor/bin:/opt/ros/jazzy/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
ROS_DISTRO=jazzy
OLDPWD=/home/raspida/ros2_ws
インストールしてみて
今回はLiDARを扱えるミドルウェアROS 2と、その環境であるUbuntu 24.04をCM4環境(PL-R4)へインストールする方法でした。
OSのインストールにrpibootを使用したり、ROS 2のインストールに事前作業や事後の設定が必要なので、少し手数が多く複雑でした。
インストール中にエラーに遭遇した場合、何かが足りないためのエラーだと推測されます。
今回の手順では、エラーに遭遇はしませんでした。
リポジトリを追加した関係上、Ubuntu 24.04のスケジュール&アップデート設定で、Subscribed toがAll updatesかrecommend updatesになっていないとエラーになります。
デフォルト(標準)ではAll updatesになっていますから、特に変更していなければ関係ありません。

産業用ラズベリーパイのCompute ModuleでもLiDARデバイスを扱う環境は構築できます。
LiDARデバイスによっては、この後もまだ設定しなければならない部分は残ります。
今回はUbuntuを「PL-R4」のeMMCにインストールする方法とROS 2の環境構築でした。
参考:https://docs.ros.org/en/rolling/index.html
記事寄稿:ラズパイダ
非エンジニアでも楽しく扱えるRaspberry Pi 情報サイト raspida.com を運営。ラズベリーパイに長年触れた経験をもとに、ラズベリーパイを知る人にも、これから始めたいと興味を持つ人にも参考になる情報・トピックを数多く発信。PiLinkのサイトへは産業用ラズベリーパイについて技術ブログ記事を寄稿。