🤖

Raspberry PiでWayPonDEV RPLIDAR A1M8 を設定する手順

2025/01/18に公開

WayPonDEV RPLIDAR A1M8 を Raspberry Pi 4 上の Ubuntu Server 22.04 および ROS2 Humble で使用するための手順を以下に記載します。


必要なハードウェアとソフトウェア

ハードウェア

  • Raspberry Pi 4
  • WayPonDEV RPLIDAR A1M8
  • USB ケーブル(RPLIDAR 接続用)

ソフトウェア

  • Ubuntu Server 22.04(Raspberry Pi 向けにインストール済み)
  • ROS2 Humble(インストール済み)

必要なパッケージのインストール

依存パッケージのインストール

以下のコマンドを実行します。

sudo apt update
sudo apt install -y git python3-colcon-common-extensions python3-pip

RPLIDAR 用の ROS2 パッケージをセットアップ

1. ワークスペースの作成

以下のディレクトリ構成を作成します。

~/ros2_ws/
  ├── src/

コマンド例:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws

2. SLAMTEC の ROS2 パッケージをクローン

以下のコマンドを実行して、rplidar_ros2 リポジトリを取得します。

cd ~/ros2_ws/src
git clone https://github.com/Slamtec/rplidar_ros2.git

3. パッケージのビルド

ワークスペースのルートディレクトリで以下を実行します。

cd ~/ros2_ws
colcon build --symlink-install

ビルドが成功したか確認します:

source install/setup.bash

デバイスのセットアップ

1. USB ポートの確認

以下のコマンドで RPLIDAR が接続されたポートを確認します。

ls /dev/ttyUSB*

通常、/dev/ttyUSB0 として認識されます。

2. 権限の設定

以下のコマンドでポートの権限を変更します。

sudo chmod 666 /dev/ttyUSB0

起動設定の確認と編集

1. RPLIDAR の設定ファイルを確認

rplidar_ros2 の設定ファイルを編集し、正しいポートを指定します。

nano ~/ros2_ws/src/rplidar_ros2/launch/rplidar.launch.py

以下を修正します:

Node(
    package='rplidar_ros2',
    executable='rplidar_composition',
    name='rplidar_node',
    parameters=[{
        'serial_port': '/dev/ttyUSB0',  # 使用するポートを指定
        'serial_baudrate': 115200,     # ボーレート
        'frame_id': 'laser_frame',     # フレーム ID
        'inverted': False,
        'angle_compensate': True,
    }],
    output='screen'
),

RPLIDAR の起動と動作確認

1. RPLIDAR ノードの起動

以下を実行してノードを起動します。

source ~/ros2_ws/install/setup.bash
ros2 launch rplidar_ros2 rplidar.launch.py

2. トピックの確認

RPLIDAR のデータが /scan トピックで配信されていることを確認します。

ros2 topic list
ros2 topic echo /scan

TF ツリーの確認(オプション)

1. TF ブロードキャストノードの作成

以下の簡単なノード例を作成し、base_linklaser_frame の関係を設定します。

サンプルコード

import rclpy
from rclpy.node import Node
from tf2_ros import TransformBroadcaster
from geometry_msgs.msg import TransformStamped

class TFPublisher(Node):
    def __init__(self):
        super().__init__('tf_publisher')
        self.br = TransformBroadcaster(self)
        self.timer = self.create_timer(0.1, self.broadcast_tf)

    def broadcast_tf(self):
        t = TransformStamped()
        t.header.stamp = self.get_clock().now().to_msg()
        t.header.frame_id = 'base_link'
        t.child_frame_id = 'laser_frame'
        t.transform.translation.x = 0.2
        t.transform.translation.y = 0.0
        t.transform.translation.z = 0.1
        t.transform.rotation.w = 1.0
        t.transform.rotation.x = 0.0
        t.transform.rotation.y = 0.0
        t.transform.rotation.z = 0.0
        self.br.sendTransform(t)

def main():
    rclpy.init()
    node = TFPublisher()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

2. ディレクトリ構成例

以下のような構成で保存します:

~/ros2_ws/
  ├── src/
  │   ├── rplidar_ros2/  # RPLIDAR の ROS2 パッケージ
  │   └── tf_publisher/  # TF ブロードキャストノード(オプション)
  ├── build/             # ビルド生成物
  ├── install/           # インストール済みパッケージ
  └── log/               # ビルドログ

以上で設定は完了です。

『PythonではじめるRaspberry Pi入門』を執筆しています

これからPythonやRaspberry Piを使ってアプリケーションを開発してみたいという方向けの入門書です。Pythonプログラムから実際に動くものを作ってみたい方はぜひ手に取ってみてください。

https://zenn.dev/murasanlab/books/c93b5ccaf332a9
https://zenn.dev/murasanlab/books/122bbb7f031935

Discussion