页面 27:Isaac ROS Freespace Segmentation — 自由空间分割
原文:https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_freespace_segmentation/index.html
概述
Isaac ROS Freespace Segmentation 包含一个用于生成导航占用栅格的 ROS 2 包。通过处理自由空间分割掩码以及机器人相对于地面的位姿,Bi3D Freespace 生成用于 Nav2 的占用栅格,在导航期间用于避障。该包通过 GPU 加速,在机器人应用中提供实时、低延迟的结果。Bi3D Freespace 为移动机器人(地面)提供了一个额外的占用栅格来源。
isaac_ros_bi3d 用于节点图中,从时间同步的输入左右立体图像对提供一个自由空间分割掩码作为输出。isaac_ros_bi3d_freespace 使用该自由空间掩码以及相机相对于地面的 TF 位姿,将平面自由空间计算为占用栅格输入到 Nav2。
有多种方法可以预测作为导航输入的占用栅格。这些方法都不是完美的;每种方法在提供测量观测的传感器的估计精度方面都有局限性。每个传感器都有独特的视野、提供其测量世界视图的范围,以及相应的未测量区域。Bi3D Freespace 提供了一种多样化的方法,从自由空间识别障碍物。用于此功能的立体相机输入相对于激光雷达是多样化的,并且具有比大多数激光雷达单元更好的垂直视野,能够感知激光雷达可能遗漏的低矮障碍物。Bi3D Freespace 提供了对激光雷达占用扫描的稳健、基于视觉的补充。
快速入门
- Isaac ROS Bi3D Freespace
Isaac ROS NITROS 加速
此包由 NVIDIA Isaac Transport for ROS (NITROS) 提供支持,NITROS 利用类型适配和协商来优化消息格式,并显著加速参与节点之间的通信。
包
- isaac_ros_bi3d_freespace
- Quickstart(快速入门)
- 尝试更多示例
- API
支持的平台
此包设计并测试为与在以下平台上运行的 ROS 2 Humble 兼容:
| Jetson | Jetson Orin | JetPack 6.1 和 6.2 | 为获得最佳性能,请确保正确配置电源设置。Jetson Orin Nano 4GB 可能没有足够内存运行许多 Isaac ROS 包,不推荐使用。 |
| x86_64 | Ampere 或更高 NVIDIA GPU 架构,8 GB 显存或更高 | Ubuntu 22.04+ | CUDA 12.6+ |
注意:不支持 Humble 以外的 ROS 2 版本。此包依赖自 Humble 版本开始引入的特定 ROS 2 实现特性。
Docker
为简化开发,我们强烈建议按照以下步骤利用 Isaac ROS Dev Docker 镜像。这将简化 Jetson 和 x86_64 平台上依赖项正确版本的开发环境设置。
注意:所有 Isaac ROS 快速入门、教程和示例都设计为以 Isaac ROS Docker 镜像为前提。
自定义开发环境
要自定义开发环境,请参阅本指南。
更新日志
| 2024-12-10 | 兼容 JetPack 6.1 |
| 2024-09-26 | ZED 兼容性更新 |
| 2024-05-30 | 兼容 JetPack 6.0 |
| 2023-10-18 | Isaac ROS 2.0.0 更新 |
| 2023-05-25 | 性能改进 |
| 2023-04-05 | 初始版本 |
页面 28:Isaac ROS Mission Client — 任务客户端
原文:https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_mission_client/index.html
网络研讨会
通过观看我们的点播网络研讨会了解更多关于任务的信息:使用 NVIDIA Isaac Dispatch 和 Client 构建互联机器人。
概述
Isaac ROS Mission Client 提供了 Mission Client 的 ROS 2 包,用于与机器人车队管理服务通信。Mission Client 从车队管理服务接收任务和动作,并更新其进度、状态和错误。Mission Client 使用 Nav2 执行导航动作,并可以与其他 ROS 动作集成。
与 Mission Client 的通信基于 VDA5050 协议,并使用 MQTT 基础作为行业标准,这是一种用于通过互联网连接设备的高效、可扩展协议。
Mission Client 随附匹配的 Mission Dispatch,可在此处获取,或者可以使用 VDA5050 over MQTT 与其他车队管理系统集成。
包
- isaac_ros_mission_client
- 概述
- 快速入门
- API
- isaac_ros_scene_recorder
- 使用说明
快速入门
Isaac Sim 的快速入门可在此处查看。
支持的平台
此包设计并测试为与在 Jetson 或 x86_64 系统上运行的 ROS 2 Humble 兼容。Mission Client 不需要 GPU。
更新日志
| 2024-12-10 | 添加动作以支持物体拾取和放置 |
| 2024-09-26 | Isaac ROS 3.1 更新 |
| 2024-05-30 | 兼容 JetPack 6.0 |
| 2023-10-18 | 错误修复、任务取消、初始位姿 |
| 2023-04-05 | 兼容 JetPack 5.1.1 |
| 2022-10-19 | 初始版本 |
页面 29:Stereo Depth — 立体深度(概念)
原文:https://nvidia-isaac-ros.github.io/concepts/stereo_depth/index.html
概述
与人眼类似,立体视觉通过测量同一视觉显著特征在两个图像之间的像素位移(即视差)来工作。通过测量的视差和已知的基线长度(两个图像传感器之间的距离),可以估计到该视觉显著特征的距离(或深度)。
立体相机有两个刚性连接在一起的单目图像传感器,大致朝向同一方向。它们由某个已知的基线距离分隔,通常在厘米量级。图像对必须通过使用预先校准的立体校正参数投影到同一极线平面上进行校正。一个图像与另一个图像中相同特征之间的像素视差可以直接使用图像传感器的基线和焦距关联到深度。
并非总能确定每个像素的视差,因为这取决于匹配过程。例如,如果立体相机面对一面无特征的纯色墙,则没有视觉显著的特征或角点(对比度的急剧变化)可以在图像之间匹配。为了解决这个问题,一些立体相机将红外光图案投射到场景中,两个图像传感器始终可以看到,但人眼看不到。
通过测量场景中所有匹配特征对在两幅图像之间的视差,可以生成视差图像,其中每个像素代表视差,或者在无法计算视差时为 NaN。使用基线和焦距,该视差图像随后可用于生成更熟悉的深度图像,其中每个像素代表以米为单位的深度,或生成点云。
立体深度方法
- FoundationStereo:一种预训练的基于 Transformer 的基础模型,利用大规模训练和深度特定先验,在多样化环境中实现高质量的深度估计。
- Fast-FoundationStereo:FoundationStereo 的速度优化变体,通过知识蒸馏、神经架构搜索和结构化剪枝实现实时零样本立体匹配。它使用与 FoundationStereo 相同的 Isaac ROS 管道(isaac_ros_foundationstereo),可直接替换。
- ESS(高效半监督):基于深度学习的预训练模型,可以更智能地处理从上下文推断的平滑梯度和边缘。
- SGM(半全局匹配):一种用于计算立体视差的普遍分析算法。SGM 难以处理平滑或规则表面,并可能遭受过度噪声。
页面 30:Isaac ROS ESS — 高效半监督立体视差估计
原文:https://nvidia-isaac-ros.github.io/repositories_and_packages/isaac_ros_dnn_stereo_depth/isaac_ros_ess/index.html
概述
ESS 代表 Efficient Semi-Supervised stereo disparity(高效半监督立体视差),由 NVIDIA 开发。ESS DNN 用于从立体相机图像对预测每个像素的视差。
该网络相比使用极线几何计算视差的经典 CV 方法有所改进,因为 DNN 可以学习在极线几何特征匹配失败的情况下预测视差。半监督学习和立体视差匹配使 ESS DNN 在训练数据集未见过环境以及有遮挡物体的情况下具有鲁棒性。该 DNN 针对彩色(RGB)全局快门立体相机图像进行了优化和评估,对于用于分析计算机视觉方法中的立体视差的单色立体图像,精度可能会有所不同。
它是一个相对轻量的模型,以接近实时的速度运行。
如图所示,ESS 节点用于节点图中,从输入的左右立体图像对提供视差预测。校正和调整大小节点将左右帧预处理到适当的分辨率。保持图像的宽高比以避免降低深度输出质量。DNN 编码、DNN 推理和 DNN 解码的图包含在 ESS 节点中。推理使用 TensorRT 执行,因为 ESS DNN 模型设计有 TensorRT 支持的优化。
预测的视差值代表场景中一个点在立体图像对中从一个图像移动到另一个图像的距离(即双目图像对)。视差与深度成反比,即 disparity = focalLength × baseline / depth。给定生成立体图像对的相机的焦距和基线,isaac_ros_ess 包预测的视差图可用于计算深度并生成点云。
快速入门
下载快速入门资源
确保安装了所需的库。
sudo apt-get install -y curl jq tar
然后,运行以下命令从 NGC 下载资源:
NGC_ORG="nvidia"
NGC_TEAM="isaac"
PACKAGE_NAME="isaac_ros_ess"
NGC_RESOURCE="isaac_ros_ess_assets"
NGC_FILENAME="quickstart.tar.gz"
MAJOR_VERSION=4
MINOR_VERSION=5
VERSION_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/versions"
AVAILABLE_VERSIONS=$(curl -s \\
-H "Accept: application/json" "$VERSION_REQ_URL")
LATEST_VERSION_ID=$(echo $AVAILABLE_VERSIONS | jq -r "
.recipeVersions[]
| .versionId as \\$v
| \\$v | select(test(\\"^\\\\\\\\d+\\\\\\\\.\\\\\\\\d+\\\\\\\\.\\\\\\\\d+$\\"))
| split(\\".\\") | {major: .[0]|tonumber, minor: .[1]|tonumber, patch: .[2]|tonumber}
| select(.major == $MAJOR_VERSION and .minor <= $MINOR_VERSION)
| \\$v
" | sort -V | tail -n 1
)
if [ -z "$LATEST_VERSION_ID" ]; then
echo "No corresponding version found for Isaac ROS $MAJOR_VERSION.$MINOR_VERSION"
echo "Found versions:"
echo $AVAILABLE_VERSIONS | jq -r '.recipeVersions[].versionId'
else
mkdir -p ${ISAAC_ROS_WS}/isaac_ros_assets && \\
FILE_REQ_URL="https://api.ngc.nvidia.com/v2/resources/$NGC_ORG/$NGC_TEAM/$NGC_RESOURCE/\\
versions/$LATEST_VERSION_ID/files/$NGC_FILENAME" && \\
curl -LO –request GET "${FILE_REQ_URL}" && \\
tar -xf ${NGC_FILENAME} -C ${ISAAC_ROS_WS}/isaac_ros_assets && \\
rm ${NGC_FILENAME}
fi
构建 isaac_ros_ess
isaac-ros activate
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-ess && \\
sudo apt-get install -y ros-jazzy-isaac-ros-ess-models-install
ros2 run isaac_ros_ess_models_install install_ess_models.sh –eula
注意:x86_64 限制:ESS 插件仅在 sm80 及以上的 GPU 上运行。这限制了 x86_64 上的 GPU 设备为 compute_80 及以上的设备。有关 CUDA 计算能力详细信息,请参阅 cuda-gpus。
运行启动文件
sudo apt-get update
sudo apt-get install -y ros-jazzy-isaac-ros-examples
以 0.0 阈值运行 ESS(完全密集输出):
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.1.0_onnx_trt10.13/ess.engine \\
ess_plugin_file_path:=${ISAAC_ROS_WS😕}/isaac_ros_assets/models/dnn_stereo_disparity/dnn_stereo_disparity_v4.1.0_onnx_trt10.13/plugins/$(uname -m)/ess_plugins.so \\
threshold:=0.0
isaac-ros activate
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
页面 31:Tutorial for NITROS Bridge with Isaac Sim — NITROS Bridge 教程
原文:https://nvidia-isaac-ros.github.io/concepts/nitros_bridge/tutorial_isaac_sim.html
概述
本教程将指导您如何使用 isaac_ros_nitros_bridge 在 GPU 上移动图像,同时避免从 Isaac Sim 进行 CPU 内存拷贝。
教程步骤
mkdir -p ~/isaac_sim_workspaces && \\
cd ~/isaac_sim_workspaces && \\
git clone -b release-4.6 https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git isaac_ros_common
按照 Isaac ROS Isaac Sim 设置指南中的步骤,在 Isaac Sim 工作空间下安装并启动 Isaac Sim。
按 Play 开始从 Isaac Sim 发布数据。
按照 isaac_ros_nitros_bridge_ros2 快速入门中的「设置开发环境」部分第 3-4 步和「从源码构建」部分完成操作。
在容器内,更改 ptrace 范围以能够运行 NITROS Bridge:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
cd /workspaces/isaac_ros-dev && \\
source install/setup.bash && \\
ros2 launch isaac_ros_nitros_bridge_ros2 isaac_ros_nitros_bridge_image_converter.launch.py pub_image_name:=nitros_pub sub_image_name:=nitros_sub


