续写该topic的原因是通过ISAAC Sim使用Isaac Perceptor Camera-based Perception with Isaac Perceptor in Isaac Sim — isaac_ros_docs documentation
Isaac Perceptor 需要配置Isaac ros
Developer Environment Setup — isaac_ros_docs documentation
Isaac ros 需要使用docker和toolkit
Installing the NVIDIA Container Toolkit — NVIDIA Container Toolkit 1.15.0 documentation
本文的主体流程按照Camera-based Perception with Isaac Perceptor in Isaac Sim — isaac_ros_docs documentation
1. 安装NVIDIA Container Toolkit
1. 配置生产存储库
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
2. 从存储库更新包列表
sudo apt-get update
3. 安装toolkit
sudo apt-get install -y nvidia-container-toolkit
4. 配置nvidia-ctk
配置nvidia-ctk需要具有docker或其他环境。是docker而不是docker-desktop。
卸载docker-desktop后
安装docker
, 参考 https://docs.docker.com/engine/install/ubuntu/
(卸载docker或许也可以)
安装完成后运行:
sudo nvidia-ctk runtime configure --runtime=docker
5. 应用修改
sudo systemctl restart docker
6. Run a sample CUDA container
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
出现问题是4070ti super的问题,待后续检查。
2. 配置NVIDIA Isaac ROS
首先参考Developer Environment Setup — isaac_ros_docs documentation,推荐使用docker环境。
1. clone 对应的包
git clone https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git
相关介绍文档:
Isaac ROS Common — isaac_ros_docs documentation
2. 参考Isaac ROS Dev — isaac_ros_docs documentation编译docker image。
当前使用ubuntu 20.04 foxy。测试开发环境:
$PATH_TO_ISAAC_ROS_COMMON/scripts/run_dev.sh -d $PATH_TO_ROS_WORKSPACE
使用该命令时,会先build出isaac ros 使用的humble docker环境。
./run_dev.sh -d ~/ROS2_WS/isaac_ros_ws
运行以上命令出现错误:
需要添加用户组:
sudo usermod -aG docker $USER
之后刷新group:
newgrp docker
再次运行测试程序,可以进行编译。
等待编译完成:
编译成功后会自动进入container,可以使用exit退出container.
附:Docker命令
检查 Docker 磁盘使用情况:
docker system df
列出所有 Docker 镜像,包括悬空镜像:
docker images -a
删除未使用的 Docker 镜像、容器和网络:
docker system prune
在这里不建议删除中途创建的镜像,之后添加传感器时还会用到。
3. 测试 NVIDIA Isaac ROS
Isaac ROS Dev — isaac_ros_docs documentation
3.1. 测试run_dev.sh
“如果您之前已经构建了基础映像,并且不想run_dev.sh
尝试重建基础映像并执行任何可能需要互联网连接的操作,则可以使用参数-b/--skip_image_build
进行离线运行。“
./run_dev.sh -d ~/ROS2_WS/isaac_ros_ws -b --skip_image_build
第二天运行时报错并未找到image。
重新编译后启动,不挂载工作区的情况:
挂载工作区:
注意,在run_dev.sh中,最后会使用--rm参数运行container,这意味着在使用exit退出container后,所有的操作将会被消除。
docker run -it --rm \
--privileged \
--network host \
${DOCKER_ARGS[@]} \
-v $ISAAC_ROS_DEV_DIR:/workspaces/isaac_ros-dev \
-v /etc/localtime:/etc/localtime:ro \
--name "$CONTAINER_NAME" \
--runtime nvidia \
--user="admin" \
--entrypoint /usr/local/bin/scripts/workspace-entrypoint.sh \
--workdir /workspaces/isaac_ros-dev \
$BASE_NAME \
/bin/bash
3.2. 测试docker_deploy.sh
脚本docker_deploy.sh
会将 ROS 工作区目录、其他目录、tarball 和/或要安装的 Debian 打包到基础映像上。
有待后续测试。
4. 配置 Isaac Perceptor
此处继续参考Developer Environment Setup — isaac_ros_docs documentation进行了几个配置:
sudo systemctl daemon-reload && sudo systemctl restart docker
安装Git LFS来拉取所有大文件:
sudo apt-get install git-lfs
git lfs install --skip-repo
向bashrc 添加
export ISAAC_ROS_WS=~/ROS2_WS/isaac_ros_ws/
随后配置Isaac Apt 存储库。由于Isaac Apt 存储库已在 Isaac ROS Dev Docker 容器中配置,故不执行该步骤。
4.1. 可视化设置
参考安装Foxglove Studio并安装其他扩展。
Foxglove Visualization — isaac_ros_docs documentation
安装需要使用的传感器依赖项 RealSense 435i,在ROS2_WS/isaac_ros_ws/src clone
Isaac ROS RealSense Setup — isaac_ros_docs documentation
cd ${ISAAC_ROS_WS}/src
git clone https://github.com/NVIDIA-ISAAC-ROS/isaac_ros_common.git
git clone https://github.com/IntelRealSense/realsense-ros.git -b 4.51.1
配置创建的容器以包含librealsense。在目录中isaac_ros_common/scripts为realsense2-camera创建配置文件:.isaac_ros_common.config。
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
注意,此处文档的路径描述与前文中发生了变化,isaac_ros_common和realsense在同一个工作区内。注意下一步启动 Docker 容器之前插入 RealSense 摄像头。
启动 Docker 容器:
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && ./scripts/run_dev.sh -d ${ISAAC_ROS_WS}
出现报错:
进入之前编译的基础镜像搜索发现该版本无法查找到。
apt-cache policy ros-humble-realsense2-camera=4.54.1-1jammy.20240517.191635
当前可以找到版本4.55.1-1jammy.20240530.085105
更改Dockerfile.realsense中的
ARG REALSENSE2_CAMERA_ROS_DEB_VERSION=4.55.1-1jammy.20240530.085105
随后可以编译成功。接着在自动进入的container中编译包:
cd ${ISAAC_ROS_WS} && \
colcon build --symlink-install --packages-up-to-regex realsense*
即可启动realsense-viewer进行预览。
Rosbag 可视化
进入docker环境
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && ./scripts/run_dev.sh -d ${ISAAC_ROS_WS} -b --skip_image_build
安装预构建的 Debian 包
sudo apt-get install -y ros-humble-isaac-ros-data-replayer
转换 rosbag。由于此处文档没有注明具体的rosbag和input,output文件路径,暂时无法测试Foxglove Studio的预览。此处跳过。
ros2 run isaac_ros_data_replayer foxglove_converter.py <input> <output>
4.2. Isaac Sim 设置
文档中暂时没有发现明确的对上述步骤中docker编译镜像所对应的使用描述,目前参考:
Isaac Sim Setup — isaac_ros_docs documentation中对于 “按照运行本机 ROS 的说明确保安装了 ROS 2 和所需的软件包,以便在 Omniverse Isaac Sim 中成功启用 ROS 2 Bridge“ 的描述在ROS and ROS 2 Installation — Omniverse IsaacSim latest documentation中对于 “在 Docker 容器中运行 ROS“ 中的描述在进行配置。
该部分暂时存疑!!!
安装Rocker:
安装rocker的前提是安装好了docker和NVIDIA toolkit。现在开始安装:
sudo apt-get install python3-rocker
先检查目前的docker conatiner:
docker ps
使用 Rocker 启动 ROS 容器rocker_isaac_sim_container:
rocker --nvidia --x11 --privileged --network host --name rocker_isaac_sim_container osrf/ros:humble-desktop-full-jammy
获得Executing command:
docker run --rm -it --name rocker_isaac_sim_container --network host --gpus all --privileged -e DISPLAY -e TERM -e QT_X11_NO_MITSHM=1 -e XAUTHORITY=/tmp/.dockerawfe3mg_.xauth -v /tmp/.dockerawfe3mg_.xauth:/tmp/.dockerawfe3mg_.xauth -v /tmp/.X11-unix:/tmp/.X11-unix -v /etc/localtime:/etc/localtime:ro 2492e002b50b
修改--rm 命令并运行container,在本机中clone GitHub - isaac-sim/IsaacSim-ros_workspaces: Isaac Sim ROS Workspaces
新建一个terminal将其中的humble_ws发送到运行的container中:
docker cp humble_ws rocker_isaac_sim_container:/root/humble_ws
进入container:
docker exec -it rocker_isaac_sim_container bash
source /opt/ros/humble/setup.sh
cd /root/humble_ws
apt-get update
apt-get install <package name humble version>
rosdep install --from-paths src --ignore-src --rosdistro=humble -y
source /opt/ros/humble/setup.sh
colcon build
source install/local_setup.bash
完成测试docker创建
ISAAC SIM设定ROS2 bridge
由于使用的是docker环境中的ros2 humble,而本机native安装的只有noetic和foxy,所以参考ROS and ROS 2 Installation — Omniverse IsaacSim latest documentation中的“无需系统级安装即可运行 ROS“和“启用 ROS Bridge 扩展”部分内容。
首先在本机设定bashrc:
# >>> docker humble and isaac sim initialize >>>
export ISAAC_ROS_COMMON=~/NVIDIA_Omniverse/ISAAC_ROS/isaac_ros_common
export ISAAC_ROS_WS=~/ROS2_WS/isaac_ros_ws
export isaac_sim_package_path=$HOME/.local/share/ov/pkg/isaac_sim-2023.1.1
export RMW_IMPLEMENTATION=rmw_fastrtps_cpp
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$isaac_sim_package_path/exts/omni.isaac.ros2_bridge/humble/lib
# <<< docker humble and isaac sim initialize <<<
由于启用 ROS Bridge 扩展需要在所有的运行ros2的终端中运行以下代码,所以向本机bashrc添加:
export FASTRTPS_DEFAULT_PROFILES_FILE=~/NVIDIA_Omniverse/ISAAC_ROS/IsaacSim-ros_workspaces/humble_ws/fastdds.xml
同时在isaac sim中修改如下:
ISAAC SIM向ros2发送clock测试信号
点击open in terminal 启动terminal,运行命令 $isaac_sim_package_path/isaac-sim.sh
在ISAAC SIM中确认ros2_bridge正常运行,随后传建测试示例:
点击运行以向ros2发送clock测试信号。
在container中运行监听clock测试信号
在container中运行(这一步不运行好像也可以
export FASTRTPS_DEFAULT_PROFILES_FILE=root/humble_ws/fastdds.xml
随后启动
cd /root/humble_ws
source /opt/ros/humble/setup.sh
source install/local_setup.bash
ros2 topic echo /clock
完成向本机sim和docker环境的信号传输。
到此,确认了sim和docker的通行。接下来对最开始创建的isaac_ros_dev-x86_64镜像的测试。
5. 测试 Isaac Perceptor
首先在${ISAAC_ROS_WS}/src中clone
git clone https://github.com/NVIDIA-ISAAC-ROS/nova_carter.git
进入container安装用于rosdep
安装软件包的依赖项:
sudo apt update
rosdep update
rosdep install -i -r --from-paths ${ISAAC_ROS_WS}/src/nova_carter/nova_carter_bringup/ --rosdistro humble -y
sudo apt-get install -y ros-humble-isaac-ros-peoplesemseg-models-install ros-humble-isaac-ros-ess-models-install
source /opt/ros/humble/setup.bash
ros2 run isaac_ros_ess_models_install install_ess_models.sh --eula
ros2 run isaac_ros_peoplesemseg_models_install install_peoplesemsegnet_vanilla.sh --eula
ros2 run isaac_ros_peoplesemseg_models_install install_peoplesemsegnet_shuffleseg.sh --eula
在Docker 容器中构建 ROS 包
colcon build --symlink-install --packages-up-to nova_carter_bringup
source install/setup.bash
开启sim测试场景。启动terminal,运行./isaac-sim.sh,在以下目录加载场景
localhost/NVIDIA/Assets/Isaac/2023.1.1/Isaac/Samples/NvBlox/perceptor_sample_scene.usd
点击运行后sim会启动与ros的连接。目前还在测试
容器内,启动示例:
source /opt/ros/humble/setup.bash
source /workspaces/isaac_ros-dev/install/setup.bash
ros2 launch nova_carter_bringup navigation.launch.py \
mode:=simulation run_rviz:=True
-
在 RViz
1. 点击2D 目标姿势按钮。您应该看到机器人使用基于摄像头的 3D 感知Isaac Perceptor生成的代价地图向目标位置移动。
附
可以使用以下代码进入realsense docker
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && ./scripts/run_dev.sh -d ${ISAAC_ROS_WS} -b --skip_image_build
cd ${ISAAC_ROS_COMMON} && ./scripts/run_dev.sh -d ${ISAAC_ROS_WS} -b --skip_image_build
或使用norm进入container,不清除。
cd ${ISAAC_ROS_WS}/src/isaac_ros_common && ./scripts/run_dev_norm.sh -d ${ISAAC_ROS_WS} -b --skip_image_build
启动一个已有的容器:
docker start rocker_isaac_sim_container