今回は、ラズペリーパイ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