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 |
|---|---|---|
|
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。这样,所有像素点的视差值都将被保留,不会因为置信度不足而被排除。