• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • Simulation / Modeling / Design

    Isaac ROS Nvblox と Realsense を活用した実環境でのコスト マップ作成

    Reading Time: 4 minutes

    Isaac ROS Nvblox の仕組み

    詳細については、「Isaac ROS Nvblox と Isaac Sim を活用したシミュレーション環境でのコスト マップ作成」をご覧ください。本ブログでは Isaac ROS Nvblox と Real Sense を連攜する方法をご紹介します。

    システム要件

    v0.30.0-dp のバージョンを対象として検証しています。

    使用するハードウェアとソフトウェアの要件は下記リンクになります。

    対応している Realsense は D455 と D435i になります。

    Realsense camera Firmware のバージョンは 5.13.0.50 にしてください。

    Realsense セットアップ

    下記のリンク先の Realsense の動作はサポートされています。

    librealsense” のソース コードをクローンします。udev rules を適用します。一時的に Real sense カメラは外しておいてください。

    # Clone source code from Real Sense & Isaac ROS Github.
    # Here is the expected source tree.
    #   tmp/
    #       |-librealsense/
    
    
    cd /tmp && \
    git clone https://github.com/IntelRealSense/librealsense && \
    cd librealsense && \
    ./scripts/setup_udev_rules.sh
    

    isaac_ros_common” と “realsense-ros” の 4.51.1 のソース コードをクローンします。

    # Clone source code from Real Sense & Isaac ROS Github.
    # Here is the expected source tree.
    #   ~/workspaces/isaac_ros-dev/src/
    #       |-isaac_ros_common/
    #       |-realsense-ros/
    
    
    mkdir -p ~/workspaces/isaac_ros-dev/src/
    cd ~/workspaces/isaac_ros-dev/src/
    git clone -b v0.30.0-dp --recurse-submodules https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common 
    git clone https://github.com/IntelRealSense/realsense-ros.git -b 4.51.1
    

    Docker コンテナーを起動する前に Realsense を接続します。
    librealsense” を含めてコンテナーでビルドするように設定するため、isaac_common/scripts ディレクトリに .isaac_common-config ファイルを作成します。

    # Configure the container created by isaac_ros_common/scripts/run_dev.sh to include librealsense. Create the .isaac_ros_common-config file in the isaac_ros_common/scripts directory:
    
    export ISAAC_ROS_WS=$HOME/workspaces/isaac_ros-dev/
    cd ${ISAAC_ROS_WS}/src/isaac_ros_common/scripts && \
      touch .isaac_ros_common-config && \
      echo CONFIG_IMAGE_KEY=ros2_humble.realsense > .isaac_ros_common-config
    

    Docker コンテナーを Launch します。これにより、Dockerfile.realsense を使用したコンテナー イメージが、そのレイヤー ステージの 1 つとして再ビルドされます。再ビルド時には若干の時間がかかります。

    # Launch the Docker container
    
    export ISAAC_ROS_WS=$HOME/workspaces/isaac_ros-dev/
    cd ${ISAAC_ROS_WS}/src/isaac_ros_common && \
      ./scripts/run_dev.sh ${ISAAC_ROS_WS}
    

    コンテナー イメージが再ビルドされ、コンテナー內に入ったら、realsense-viewer を実行して、Realsense カメラが接続されていることを確認します。

    # Once container image is rebuilt and you are inside the container, you can run realsense-viewer to check that the RealSense camera is connected.
    
    realsense-viewer
    

    3D と Streo Module を選択して、Realsenseが動作していることを確認します。

    Host system setup

    ROS 2 のメッセージ配信は、QoS プロファイルを少し修正しないと、高負荷時に信頼性が低いことが分かっています。 (特にスペックが低いマシン)。そのため以下を実行してください。

    sudo sysctl -w net.core.rmem_max=8388608 net.core.rmem_default=8388608
    
    

    しかし、上記コマンドは一時的にこれらのパラメーターを設定するだけになります。恒久的に設定するには、以下を実行します:

    echo -e "net.core.rmem_max=8388608\nnet.core.rmem_default=8388608\n" | sudo tee /etc/sysctl.d/60-cyclonedds.conf

    Docker setup

    Github ページから Isaac ROS のソース コードをクローンします。

    # Clone source code from Isaac ROS Github.
    # Here is the expected source tree.
    #   ~/workspaces/isaac_ros-dev/src/
    #       |-isaac_ros_common/
    #       +-isaac_ros_nvblox/
    
    
    mkdir -p ~/workspaces/isaac_ros-dev/src/
    cd ~/workspaces/isaac_ros-dev/src/
    git clone -b v0.30.0-dp --recurse-submodules https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git
    cd isaac_ros_common
    git lfs pull
    
    # Clone source code
    cd ~/workspaces/isaac_ros-dev/src/
    
    # use ‘v0.30.0-dp’ branch instead of ‘main(default)’.
    git clone -b v0.30.0-dp --recurse-submodules https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nvblox
    cd isaac_ros_nvblox
    git lfs pull
    

    realsense_splitter パッケージの COLCON_IGNORE ファイルの git トラッキングを停止し、削除します。

    cd ~/workspaces/isaac_ros-dev/src/isaac_ros_nvblox/nvblox_examples/realsense_splitter && \
      git update-index --assume-unchanged COLCON_IGNORE && \
      rm COLCON_IGNORE
    

    Github ページから Isaac ROS Visual SLAMIsaac ROS NITROS のソース コードをクローンします。

    # Clone source code from Isaac ROS Github.
    # Here is the expected source tree.
    #   ~/workspaces/isaac_ros-dev/src/
    #       |-isaac_ros_common/
    #       |-isaac_ros_nvblox/
    #       |-isaac_ros_visual_slam/
    #       +-isaac_ros_nitros/
    
    cd ~/workspaces/isaac_ros-dev/src/
    git clone -b v0.30.0-dp https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_visual_slam.git
    cd isaac_ros_visual_slam
    git lfs pull
    
    # Clone source code
    cd ~/workspaces/isaac_ros-dev/src/
    
    # use ‘v0.30.0-dp’ branch instead of ‘main(default)’.
    git clone -b v0.30.0-dp https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_nitros.git
    cd isaac_ros_nitros
    git lfs pull
    

    ROS2 コンテナー イメージを Build/Run します。

    # Build/Run a ROS2 container
    cd ~/workspaces/isaac_ros-dev/src/isaac_ros_common/
    ./scripts/run_dev.sh
    

    ROS2 コンテナーが起動したら、ROS2 ワークスペースに必要な ROS2 の依存関係をインストール/ビルドする必要があります。ビルドするのに 10 分程度かかります。Docker コンテナー內で以下のコマンドを入力します。

    # Inside the container, install package-specific dependencies via rosdep:
    cd /workspaces/isaac_ros-dev/ && \
      rosdep install -i -r --from-paths src --rosdistro humble -y --skip-keys "libopencv-dev libopencv-contrib-dev libopencv-imgproc-dev python-opencv python3-opencv nvblox"
    
    # Install the dependencies for your ROS workspace
    cd /workspaces/isaac_ros-dev
    
    # Build code
    colcon build --symlink-install
    
    # Source the ros_ws
    source /workspaces/isaac_ros-dev/install/setup.bash
    

    Realsense Nvblox

    Example with Realsense Live Data のために、ROS2 コンテナー內に 2 つのターミナルが必要になる場合があります。各ターミナルに以下のコマンドを入力してください。

    Terminal 1~4:

    # Build/Run a ROS2 container
    # if you haven’t built a ROS2 container image, the script may take some time to build a container image.
    cd ~/workspaces/isaac_ros-dev/src/isaac_ros_common/
    ./scripts/run_dev.sh
    

    ROS2 のコンテナー ターミナルを 2 つ開くと、ターミナル 1~2 で上記コマンドで Docker コンテナーに入って下記コマンドを入力できるようになります。

    Terminal 1:  realsense-viewer を実行して、Realsense カメラが接続されていることを確認することができます。

    cd /workspaces/isaac_ros-dev/
    source /workspaces/isaac_ros-dev/install/setup.bash
    realsense-viewer
    

    Terminal 2: realsense-viewer の起動が成功したら、realsense-viewer を閉じて起動ファイルを実行し、サンプルをスピンアップします。

    cd /workspaces/isaac_ros-dev/
    source /workspaces/isaac_ros-dev/install/setup.bash
    ros2 launch nvblox_examples_bringup realsense_example.launch.py
    

    Human Reconstruction with Realsense

    このチュートリアルでは、nvblox で realsense データを使ってダイナミックな人物再構成を行う方法を説明します。もし、Human Reconstruction が裏でどのように機能しているかを知りたい場合は、技術的な詳細を參照してください。(Note: 終了時に Docker コンテナー ターミナルを閉じないこと)

    • Rviz ウィンドウを閉じます。
    • ターミナル 2 の終了コマンド (ctrl + c)
    • ターミナル 1 の終了コマンド (ctrl + c)

    Github ページから Isaac ROS Image SegmentationIsaac ROS DNN InferenceIsaac ROS Image Pipelineの コードをクローンします。

    # Clone source code from Isaac ROS Github.
    # Here is the expected source tree.
    #   ~/workspaces/isaac_ros-dev/src/
    #       |-isaac_ros_common/
    #       |-isaac_ros_nvblox/
    #       |-isaac_ros_visual_slam/
    #       |-isaac_ros_nitros/
    #       |-isaac_ros_image_segmentation/
    #       |-isaac_ros_dnn_inference/
    #       +-isaac_ros_image_pipeline/
    
    mkdir -p ~/workspaces/isaac_ros-dev/src/
    cd ~/workspaces/isaac_ros-dev/src/
    git clone -b v0.30.0-dp https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_image_segmentation
    cd isaac_ros_image_segmentation
    git lfs pull
    
    # Change directory
    cd ~/workspaces/isaac_ros-dev/src/
    
    # use ‘v0.30.0-dp’ branch instead of ‘main(default)’.
    git clone -b v0.30.0-dp https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_dnn_inference.git
    cd isaac_ros_dnn_inference
    git lfs pull
    
    # Change directory
    cd ~/workspaces/isaac_ros-dev/src/
    
    # use ‘v0.30.0-dp’ branch instead of ‘main(default)’.
    git clone -b v0.30.0-dp https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_image_pipeline.git
    cd isaac_ros_image_pipeline
    git lfs pull
    

    ROS2 コンテナー イメージを Build/Run します。

    # Build/Run a ROS2 container
    cd ~/workspaces/isaac_ros-dev/src/isaac_ros_common/
    ./scripts/run_dev.sh
    

    Docker コンテナー內で以下のコマンドを入力します。PeopleSemSegNet ETLT ファイルと int8 推論モード キャッシュ ファイルをダウンロードしてください

    mkdir -p /workspaces/isaac_ros-dev/models/peoplesemsegnet/1
    cd /workspaces/isaac_ros-dev/models/peoplesemsegnet
    wget 'https://api.ngc.nvidia.com/v2/models/nvidia/tao/peoplesemsegnet/versions/deployable_quantized_vanilla_unet_v2.0/files/peoplesemsegnet_vanilla_unet_dynamic_etlt_int8.cache'
    wget 'https://api.ngc.nvidia.com/v2/models/nvidia/tao/peoplesemsegnet/versions/deployable_quantized_vanilla_unet_v2.0/files/peoplesemsegnet_vanilla_unet_dynamic_etlt_int8_fp16.etlt'
    

    ETLT ファイルを TensorRT のプラン ファイルに変換します。構築環境によりますが、8 分程度時間がかかります。

    /opt/nvidia/tao/tao-converter -k tlt_encode -d 3,544,960 -p input_1:0,1x3x544x960,1x3x544x960,1x3x544x960 -t int8 -c peoplesemsegnet_vanilla_unet_dynamic_etlt_int8.cache -e /workspaces/isaac_ros-dev/models/peoplesemsegnet/1/model.plan -o argmax_1 peoplesemsegnet_vanilla_unet_dynamic_etlt_int8_fp16.etlt

    以下の內容で、/workspaces/isaac_ros-dev/models/peoplesemsegnet/config.pbtxt という triton 設定ファイルを作成してください:

    name: "peoplesemsegnet"
    platform: "tensorrt_plan"
    max_batch_size: 0
    input [
      {
        name: "input_1:0"
        data_type: TYPE_FP32
        dims: [ 1, 3, 544, 960 ]
      }
    ]
    output [
      {
        name: "argmax_1"
        data_type: TYPE_INT32
        dims: [ 1, 544, 960, 1 ]
      }
    ]
    version_policy: {
      specific {
        versions: [ 1 ]
      }
    }
    

    ROS2 コンテナーが起動したら、ROS2 ワークスペースに必要な ROS2 の依存関係をインストール/ビルドする必要があります。Docker コンテナー內で以下のコマンドを入力します。

    # Install the dependencies for your ROS workspace
    cd /workspaces/isaac_ros-dev
    
    # Build code
    colcon build --symlink-install
    
    # Source the ros_ws
    source /workspaces/isaac_ros-dev/install/setup.bash
    

    Example with Realsense Live Data のために、Docker コンテナー內に 3~4 つのターミナルが必要になる場合があります。各ターミナルに以下のコマンドを入力してください。

    Terminal 1~4:

    # Build/Run a ROS2 container
    # if you haven’t built a ROS2 container image, the script may take some time to build a container image.
    cd ~/workspaces/isaac_ros-dev/src/isaac_ros_common/
    ./scripts/run_dev.sh
    

    Docker のコンテナー ターミナルを 3 つ開くと、ターミナル 1~3 で上記コマンドでコンテナーに入って下記コマンドを入力できるようになります。

    Terminal 1: 以下の launch ファイルを実行して、人物検出用の ROS ノードを起動させます

    cd /workspaces/isaac_ros-dev/
    source install/setup.bash
    ros2 launch isaac_ros_unet isaac_ros_unet_triton.launch.py model_name:=peoplesemsegnet model_repository_paths:=['/workspaces/isaac_ros-dev/models'] input_binding_names:=['input_1:0'] output_binding_names:=['argmax_1'] network_output_type:='argmax'
    

    Terminal 2: Realsense が起動するか確認します。3D と Streo Module を選択します。Realsense が動作しない場合は再起動をしてください。

    cd /workspaces/isaac_ros-dev/
    source install/setup.bash
    realsense-viewer
    

    Terminal 3: realsense-viewer の起動が成功したら、realsense-viewer を閉じて、RViz2 が立ち上がり、下記のような動作が確認できます。起動には時間がかかります。

    cd /workspaces/isaac_ros-dev/
    source install/setup.bash
    ros2 launch nvblox_examples_bringup realsense_humans_example.launch.py
    

    Realsense Recorded Data

    以下の手順で、準備してください。

    • Rviz ウィンドウを閉じます。
    • Realsense Viewer を閉じます。
    • ターミナル 1 の終了コマンド (ctrl + c)
    • ターミナル 3 の終了コマンド (ctrl + c)

    Terminal 1: 以下の launch ファイルを実行して、人物検出用の ROS ノードを起動させます。

    cd /workspaces/isaac_ros-dev/
    source install/setup.bash
    ros2 launch isaac_ros_unet isaac_ros_unet_triton.launch.py model_name:=peoplesemsegnet model_repository_paths:=['/workspaces/isaac_ros-dev/models'] input_binding_names:=['input_1:0'] output_binding_names:=['argmax_1'] network_output_type:='argmax'
    

    Terminal 2: Realsense から得られる入力を rosbag として保存処理をします。Realsense を動かして部屋の情報を rosbag として取得します。rosbag2_2023_05_10-10_38_34 のような形式で rosbag が保存されます。一定のデータを取得できたら [Ctrl + C] で終了します。

    ros2 launch nvblox_examples_bringup record_realsense.launch.py

    Terminal 3: 保存された rosbag から Nvblox 処理を行います。path_to_recorded_bag に先ほど保存した rosbag のパスを指定します。

    ros2 launch nvblox_examples_bringup realsense_humans_example.launch.py from_bag:=True bag_path:=<path_to_recorded_bag>
    +3

    Tags

    人人超碰97caoporen国产