ROS 2 を用いた Kinect の操作

ROS 2 で Kinect を動かし、カラー画像と深度画像を取得する手順を説明する。ROS 2 のディストリビューションは Lyrical Luth を使う。

Kinect v1(Xbox 360 用)は libfreenect で扱う。ROS 2 のドライバは kinect_ros2 である。Kinect v2(Xbox One 用、Kinect for Windows v2)は libfreenect2 で扱い、ROS 2 のドライバは kinect2_ros2 である。接続には USB 3.0 が必要である。

以下では Kinect v1 と kinect_ros2 を使う。kinect_ros2 は deb パッケージが無いため、ソースコードからビルドする。

前準備

libfreenect のインストールと USB の設定

  1. libfreenect のインストール

    端末で、次のコマンドを実行する。

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install freenect libfreenect-dev
    
  2. udev のルールの設定

    一般ユーザの権限で Kinect を使えるようにする。02ae はカメラ、02ad は音声、02b0 はモータのデバイス ID である。端末で、次のコマンドを実行する。

    sudo tee /etc/udev/rules.d/51-kinect.rules <<'EOF'
    SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ae", MODE="0660", GROUP="plugdev"
    SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02ad", MODE="0660", GROUP="plugdev"
    SUBSYSTEM=="usb", ATTR{idVendor}=="045e", ATTR{idProduct}=="02b0", MODE="0660", GROUP="plugdev"
    EOF
    sudo usermod -aG plugdev $USER
    sudo udevadm control --reload-rules
    sudo udevadm trigger
    

    グループの追加を反映するため、ログアウトして、ログインし直す。

  3. 接続の確認

    Kinect を USB に接続し、AC アダプタで電源を供給する。端末で、次のコマンドを実行し、デバイスが表示されることを確認する。

    lsusb | grep -i "045e"
    

kinect_ros2 のビルド

  1. ソースコードの取得

    ワークスペースを作り、その src の下にソースコードを取得する。端末で、次のコマンドを実行する。

    mkdir -p ~/ros2_ws/src
    cd ~/ros2_ws/src
    git clone https://github.com/fadlio/kinect_ros2
    
  2. 依存パッケージのインストール

    端末で、次のコマンドを実行する。

    source /opt/ros/lyrical/setup.bash
    cd ~/ros2_ws
    rosdep update
    rosdep install --from-paths src --ignore-src -r -y
    
  3. ビルド

    端末で、次のコマンドを実行する。終了後、Summaryfailed のパッケージが無いことを確認する。

    source /opt/ros/lyrical/setup.bash
    cd ~/ros2_ws
    colcon build
    

実行と画像の表示

  1. ノードの起動

    端末で、次のコマンドを実行する。

    source /opt/ros/lyrical/setup.bash
    source ~/ros2_ws/install/setup.bash
    ros2 run kinect_ros2 kinect_ros2_node
    
  2. トピックの一覧の表示

    カラー画像の image_raw、深度画像の depth/image_raw、カメラ情報の camera_infodepth/camera_info が表示される。別の端末で、次のコマンドを実行する。

    source /opt/ros/lyrical/setup.bash
    source ~/ros2_ws/install/setup.bash
    ros2 topic list
    
  3. ノードの情報の表示

    別の端末で、次のコマンドを実行する。

    source /opt/ros/lyrical/setup.bash
    source ~/ros2_ws/install/setup.bash
    ros2 node list
    ros2 node info /kinect_ros2
    
  4. カラー画像の表示

    rqt_image_view を起動し、表示するトピックを選ぶ。別の端末で、次のコマンドを実行する。

    sudo apt update
    sudo apt -y install ros-lyrical-rqt-image-view
    source /opt/ros/lyrical/setup.bash
    ros2 run rqt_image_view rqt_image_view
    
  5. 深度画像と点群の表示

    RViz2 を起動し、AddImagePointCloud2 を追加して、トピック名を選ぶ。別の端末で、次のコマンドを実行する。

    source /opt/ros/lyrical/setup.bash
    source ~/ros2_ws/install/setup.bash
    rviz2
    
  6. 配信状況の確認

    画像が表示されないときは、トピックが配信されているかを確認する。average rate が表示されない場合は、Kinect の電源、USB の接続、udev のルールの設定を確認する。別の端末で、次のコマンドを実行する。

    source /opt/ros/lyrical/setup.bash
    source ~/ros2_ws/install/setup.bash
    ros2 topic hz /kinect_ros2/image_raw