Isaac ROS DNN Stereo Depth#

概述#

视觉深度感知在许多机器人领域中都非常有用,例如估计机械臂在物体操纵任务中的姿态、估计在自主机器人导航中的静态或移动目标的距离、在送货机器人中跟踪目标等。

Isaac ROS DNN Stereo Depth 针对两个Isaac应用:Isaac Manipulator和Isaac Perceptor。

在Isaac Manipulator应用中,ESS作为Isaac ROS cuMotion包中的插件节点部署,为机器人臂的运动规划和控制提供深度感知图。

Isaac Perceptor应用使用多个Isaac ROS包,包括Isaac ROS Nova、Isaac ROS Visual Slam、Isaac ROS Stereo Depth (ESS)、Isaac ROS Nvblox和Isaac ROS Image Pipeline。

ESS DNN#

ESS代表Efficient Semi-Supervised stereo disparity,由NVIDIA开发。

ESS DNN用于预测立体摄像机图像对中每个像素的视差。

与传统的计算机视觉方法相比,该网络在视差计算方面有所改进,即使在特征匹配失败的情况下也能预测视差。

DNN模型#

运行isaac_ros_ess需要一个ESS模型,NGC(NVIDIA GPU Cloud)提供了预训练模型,用于机器人应用。

置信度和密度#

ESS DNN提供两个输出:视差估计和置信度估计,可以通过阈值置信度输出来过滤视差输出,以在置信度和密度之间进行权衡。

分辨率和性能#

NGC提供了ESS和Light ESS模型,用于在分辨率和性能之间进行权衡。

ESS DNN插件#

使用ESS TensorRT自定义插件来优化ESS DNN在NVIDIA GPU上的推理。

isaac_ros_ess#

下载快速入门资源#

从NGC下载快速启动数据:

#确保已安装所需的库
sudo apt-get install -y curl tar   

NGC_ORG="nvidia"
NGC_TEAM="isaac"
NGC_RESOURCE="isaac_ros_assets"
NGC_VERSION="isaac_ros_ess"
NGC_FILENAME="quickstart.tar.gz"

REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/versions/$NGC_VERSION/files/$NGC_FILENAME"

mkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets/${NGC_VERSION} && \
    curl -LO --request GET "${REQ_URL}" && \
    tar -xf ${NGC_FILENAME} -C ${ISAAC_ROS_WS}/isaac_ros_assets/${NGC_VERSION} && \
    rm ${NGC_FILENAME}

rosbag#

ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=ess_disparity \
   engine_file_path:=${ISAAC_ROS_WS:?}/isaac_ros_assets/models/dnn_stereo_disparity/dnn_stereo_disparity_v4.0.0/ess.engine \
   threshold:=0.0

启动另一个docker终端

ros2 bag play -l ${ISAAC_ROS_WS}/isaac_ros_assets/isaac_ros_ess/rosbags/ess_rosbag \
   --remap /left/camera_info:=/left/camera_info_rect /right/camera_info:=/right/camera_info_rect

RealSense Camera#

ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=realsense_stereo_rect,ess_disparity \
   engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/dnn_stereo_disparity/dnn_stereo_disparity_v4.0.0/ess.engine \
   threshold:=0.35 realsense_config_file:=$(ros2 pkg prefix isaac_ros_ess --share)/config/realsense.yaml

Hawk Camera#

ros2 launch isaac_ros_examples isaac_ros_examples.launch.py launch_fragments:=argus_stereo,rectify_stereo,ess_disparity \
   engine_file_path:=${ISAAC_ROS_WS}/isaac_ros_assets/models/dnn_stereo_disparity/dnn_stereo_disparity_v4.0.0/ess.engine \
   threshold:=0.35

可视化结果#

再启动一个docker终端

ros2 run isaac_ros_ess isaac_ros_ess_visualizer.py

ROS参数#

ROS 参数

类型

默认

描述

engine_file_path

string

N/A - Required

ESS 引擎文件的绝对路径。

threshold

double

0.35

阈值范围在 0.0 到 1.0 之间,用于过滤视差并赋予其置信度。置信度低于阈值的像素将在视差输出中被标记为无效。值 0.0 表示完全密集的视差输出。

image_type

string

”RGB_U8”.

输入图像的编码类型。支持”RGB_U8”和”BGR_U8”。请注意,如果未指定此参数并且存在上游 Isaac ROS NITROS 节点,则将自动决定类型。

ROS Topic

Interface

Description

left/image_rect

sensor_msgs/Image

立体对的左图

right/image_rect

sensor_msgs/Image

立体对的右图

left/camera_info

sensor_msgs/CameraInfo

左边的相机信息

right/camera_info

sensor_msgs/CameraInfo

右边的相机信息

ROS Topic

Interface

Description

disparity

stereo_msgs/DisparityImage

连续立体视差估计

输入的左、右图像必须具有相同的尺寸和分辨率,且分辨率不得大于1920x1200。

每个输入对应该具有 相同的时间戳;否则,ESS Disparity Node 内的同步模块将删除具有较小时间戳的输入。

输出一个与 ESS 模型输出尺寸相同的视差图像

ESS 模型

输出维度

ess.etlt

960 x 576

light_ess.etlt

480 x 288

在进行深度学习推理之前,输入图像会被调整至ESS模型所需的输入尺寸。ESS模型生成两个维度相同的输出:一个是视差图,另一个是置信度图。系统会使用预设的阈值对视差图进行过滤,基于置信度图的结果。如果置信度低于这个阈值,相应的像素点在视差图中将被标记为无效,即其值设为-1.0。若需要得到一个没有置信度过滤的完全密集的视差输出,可以将阈值设定为0.0。这样,所有像素点的视差值都将被保留,不会因为置信度不足而被排除。