ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【RaspberryPi】 FHL-LD20 を使ってみる②

今回は、ラズペリーパイ5で自分の位置を推定しながら地図を生成してみます。

前回の実験

前回の実験では、FHL-LD20 の応答を RViz2 で可視化してみました。
a1026302.hatenablog.com

docker コンテナの準備

docker コンテナで ros2 の環境を準備します。

xhost

以下のコマンドで Docker コンテナで起動した GUI を local で表示します。
Dockerが動いてるのはlocal上であり、特に指定しない限りrootユーザでコンテナが生成されます。

xhost +local:root
non-network local connections being added to access control list

Dockerfile

以下の内容の Dockerfile を作成します。

FROM arm64v8/ros:humble

# 必要なパッケージのインストール
RUN apt-get update && apt-get install -y \
    ros-humble-desktop \
    qtbase5-dev \
    qtchooser \
    qt5-qmake \
    qtbase5-dev-tools \
    libqt5gui5 \
    libqt5core5a \
    libqt5widgets5 \
    libqt5x11extras5 \
    libudev-dev \
    x11-apps \
    mesa-utils \
    ros-humble-navigation2 \
    && rm -rf /var/lib/apt/lists/*

# 環境変数の設定
ENV DISPLAY=:1
ENV QT_PLUGIN_PATH=/usr/lib/x86_64-linux-gnu/qt5/plugins

# ワークスペースの設定
WORKDIR /ros2_ws
RUN mkdir -p src
WORKDIR /ros2_ws/src

# ldlidar_stl_ros2 パッケージのクローン
RUN git clone https://github.com/Myzhar/ldrobot-lidar-ros2.git

# ビルド
WORKDIR /ros2_ws
RUN . /opt/ros/humble/setup.sh && \
    colcon build --symlink-install

# エントリーポイントの設定
CMD ["bash"]

ビルド

docker build -t my_custom_image .

docker run

以下のコマンドでコンテナを起動します。

docker run -it --rm \
    --device=/dev/ttyUSB0 \
    --privileged \
    -e DISPLAY=$DISPLAY \
    -v /tmp/.X11-unix:/tmp/.X11-unix \
    my_custom_image

docker コンテナ内での作業

準備

udev ルールをインストールする
cd /ros2_ws/src/ldrobot-lidar-ros2/scripts/
./create_udev_rules.sh
パッケージをビルド

パッケージをビルドしようとすると途中エラーになります。

cd /ros2_ws/
apt update
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install --cmake-args=-DCMAKE_BUILD_TYPE=Release
環境変数を更新
echo source $(pwd)/install/local_setup.bash >> ~/.bashrc
source ~/.bashrc
デバイスの接続確認
ls -l /dev | grep ttyUSB
ln -s /dev/ttyUSB0 /dev/ldlidar

RViz2 ディスプレイスキャン

ros2 launch ldlidar_node ldlidar_rviz2.launch.py

2D マップ生成

ros2 launch ldlidar_node ldlidar_slam.launch.py