Merge branch 'jetson' into 'master'
Run on Jetson See merge request Percipiote/RapidPoseTriangulation!6
This commit is contained in:
129
extras/jetson/README.md
Normal file
129
extras/jetson/README.md
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
# Setup with Nvidia-Jetson-Orin
|
||||||
|
|
||||||
|
Initial setup and installation of _RapidPoseTriangulation_ on a _Nvidia Jetson_ device. \
|
||||||
|
Tested with a _Jetson AGX Orin Developer Kit_ module.
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
## Base installation
|
||||||
|
|
||||||
|
- Install newest software image: \
|
||||||
|
(https://developer.nvidia.com/sdk-manager)
|
||||||
|
|
||||||
|
- Initialize system: \
|
||||||
|
(https://developer.nvidia.com/embedded/learn/get-started-jetson-agx-orin-devkit)
|
||||||
|
|
||||||
|
- Install basic tools:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install -y curl nano wget git
|
||||||
|
```
|
||||||
|
|
||||||
|
- Test docker is working:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo docker run --rm hello-world
|
||||||
|
```
|
||||||
|
|
||||||
|
- Enable _docker_ without _sudo_: \
|
||||||
|
(https://docs.docker.com/engine/install/linux-postinstall/#manage-docker-as-a-non-root-user)
|
||||||
|
|
||||||
|
- Enable GPU-access for docker building:
|
||||||
|
|
||||||
|
Run `sudo nano /etc/docker/daemon.json` and add:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"runtimes": {
|
||||||
|
"nvidia": {
|
||||||
|
"args": [],
|
||||||
|
"path": "nvidia-container-runtime"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default-runtime": "nvidia"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Restart docker: `sudo systemctl restart docker`
|
||||||
|
|
||||||
|
- Test docker is working:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run --rm hello-world
|
||||||
|
docker run -it --rm --runtime=nvidia --network=host -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix nvcr.io/nvidia/l4t-base:r36.2.0
|
||||||
|
docker run -it --rm --runtime=nvidia --network=host dustynv/onnxruntime:1.20-r36.4.0
|
||||||
|
```
|
||||||
|
|
||||||
|
- Enable maximum performance mode:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo nvpmodel -m 0
|
||||||
|
sudo jetson_clocks
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
## RPT installation
|
||||||
|
|
||||||
|
- Build docker container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build --progress=plain -f extras/jetson/dockerfile -t rapidposetriangulation .
|
||||||
|
./run_container.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
- Build _rpt_ package inside container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /RapidPoseTriangulation/swig/ && make all && cd ../tests/ && python3 test_interface.py && cd ..
|
||||||
|
|
||||||
|
cd /RapidPoseTriangulation/scripts/ && \
|
||||||
|
g++ -std=c++2a -fPIC -O3 -march=native -Wall -Werror -flto=auto -fopenmp -fopenmp-simd \
|
||||||
|
-I /RapidPoseTriangulation/rpt/ \
|
||||||
|
-isystem /usr/include/opencv4/ \
|
||||||
|
-isystem /usr/local/include/onnxruntime/ \
|
||||||
|
-L /usr/local/lib/ \
|
||||||
|
test_skelda_dataset.cpp \
|
||||||
|
/RapidPoseTriangulation/rpt/*.cpp \
|
||||||
|
-o test_skelda_dataset.bin \
|
||||||
|
-Wl,--start-group \
|
||||||
|
-lonnxruntime_providers_tensorrt \
|
||||||
|
-lonnxruntime_providers_shared \
|
||||||
|
-lonnxruntime_providers_cuda \
|
||||||
|
-lonnxruntime \
|
||||||
|
-Wl,--end-group \
|
||||||
|
$(pkg-config --libs opencv4) \
|
||||||
|
-Wl,-rpath,/onnxruntime/build/Linux/Release/ \
|
||||||
|
&& cd ..
|
||||||
|
```
|
||||||
|
|
||||||
|
- Test with samples:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 /RapidPoseTriangulation/scripts/test_triangulate.py
|
||||||
|
```
|
||||||
|
|
||||||
|
- Evaluate datasets:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 /RapidPoseTriangulation/scripts/test_skelda_dataset.py
|
||||||
|
```
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
## ROS interface
|
||||||
|
|
||||||
|
- Build docker container:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build --progress=plain -f extras/jetson/dockerfile_ros -t rapidposetriangulation_ros .
|
||||||
|
./run_container.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
- Run and test:
|
||||||
|
```bash
|
||||||
|
xhost +; docker compose -f extras/jetson/docker-compose.yml up
|
||||||
|
|
||||||
|
docker exec -it ros-test_node-1 bash
|
||||||
|
export ROS_DOMAIN_ID=18
|
||||||
|
```
|
||||||
3436
extras/jetson/RESULTS.md
Normal file
3436
extras/jetson/RESULTS.md
Normal file
File diff suppressed because it is too large
Load Diff
38
extras/jetson/docker-compose.yml
Normal file
38
extras/jetson/docker-compose.yml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
version: "2.3"
|
||||||
|
# runtime: nvidia needs version 2 else change standard runtime at host pc
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
test_node:
|
||||||
|
image: rapidposetriangulation_ros
|
||||||
|
network_mode: "host"
|
||||||
|
ipc: "host"
|
||||||
|
runtime: nvidia
|
||||||
|
privileged: true
|
||||||
|
volumes:
|
||||||
|
- ../../:/RapidPoseTriangulation/
|
||||||
|
- ../../skelda/:/skelda/
|
||||||
|
- /tmp/.X11-unix:/tmp/.X11-unix
|
||||||
|
- /dev/shm:/dev/shm
|
||||||
|
environment:
|
||||||
|
- DISPLAY
|
||||||
|
- QT_X11_NO_MITSHM=1
|
||||||
|
- "PYTHONUNBUFFERED=1"
|
||||||
|
command: /bin/bash -i -c 'sleep infinity'
|
||||||
|
|
||||||
|
estimator:
|
||||||
|
image: rapidposetriangulation_ros
|
||||||
|
network_mode: "host"
|
||||||
|
ipc: "host"
|
||||||
|
runtime: nvidia
|
||||||
|
privileged: true
|
||||||
|
volumes:
|
||||||
|
- ../../:/RapidPoseTriangulation/
|
||||||
|
- ../../skelda/:/skelda/
|
||||||
|
- /tmp/.X11-unix:/tmp/.X11-unix
|
||||||
|
- /dev/shm:/dev/shm
|
||||||
|
environment:
|
||||||
|
- DISPLAY
|
||||||
|
- QT_X11_NO_MITSHM=1
|
||||||
|
- "PYTHONUNBUFFERED=1"
|
||||||
|
command: /bin/bash -i -c 'export ROS_DOMAIN_ID=18 && ros2 run rpt2d_wrapper_cpp rpt2d_wrapper'
|
||||||
25
extras/jetson/dockerfile
Normal file
25
extras/jetson/dockerfile
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
FROM dustynv/onnxruntime:1.20-r36.4.0
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV LANG=C.UTF-8
|
||||||
|
ENV LC_ALL=C.UTF-8
|
||||||
|
WORKDIR /
|
||||||
|
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends feh
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends python3-opencv
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends libatlas-base-dev
|
||||||
|
|
||||||
|
# Show matplotlib images
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends python3-tk
|
||||||
|
|
||||||
|
# Install swig and later dependencies
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends build-essential
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends swig
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends libopencv-dev
|
||||||
|
|
||||||
|
RUN pip3 install --no-cache-dir scipy
|
||||||
|
COPY ./skelda/ /skelda/
|
||||||
|
RUN pip3 install --no-cache-dir -e /skelda/
|
||||||
|
|
||||||
|
WORKDIR /RapidPoseTriangulation/
|
||||||
|
CMD ["/bin/bash"]
|
||||||
60
extras/jetson/dockerfile_ros
Normal file
60
extras/jetson/dockerfile_ros
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
FROM rapidposetriangulation
|
||||||
|
WORKDIR /
|
||||||
|
|
||||||
|
ARG DEBIAN_FRONTEND=noninteractive
|
||||||
|
ENV LANG=C.UTF-8
|
||||||
|
ENV LC_ALL=C.UTF-8
|
||||||
|
WORKDIR /
|
||||||
|
|
||||||
|
# Install ROS2
|
||||||
|
# https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends locales
|
||||||
|
RUN locale-gen en_US en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends software-properties-common
|
||||||
|
RUN add-apt-repository universe
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends curl
|
||||||
|
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
|
||||||
|
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" > /etc/apt/sources.list.d/ros2.list
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends ros-humble-ros-base python3-argcomplete
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends ros-dev-tools
|
||||||
|
RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
|
||||||
|
|
||||||
|
# Create ROS2 workspace for basic packages
|
||||||
|
RUN mkdir -p /project/base/src/
|
||||||
|
RUN cd /project/base/; colcon build
|
||||||
|
RUN echo "source /project/base/install/setup.bash" >> ~/.bashrc
|
||||||
|
|
||||||
|
# Fix ros package building error
|
||||||
|
RUN pip3 install --no-cache-dir "setuptools<=58.2.0"
|
||||||
|
|
||||||
|
# Install opencv and cv_bridge
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends libboost-dev
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends libboost-python-dev
|
||||||
|
RUN apt-get update && apt-get install -y --no-install-recommends libopencv-dev
|
||||||
|
RUN cd /project/base/src/; git clone --branch humble --depth=1 https://github.com/ros-perception/vision_opencv.git
|
||||||
|
RUN /bin/bash -i -c 'cd /project/base/; colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release'
|
||||||
|
|
||||||
|
# Create ROS2 workspace for project packages
|
||||||
|
RUN mkdir -p /project/dev_ws/src/
|
||||||
|
RUN cd /project/dev_ws/; colcon build
|
||||||
|
RUN echo "source /project/dev_ws/install/setup.bash" >> ~/.bashrc
|
||||||
|
|
||||||
|
# Copy modules
|
||||||
|
COPY ./extras/include/ /RapidPoseTriangulation/extras/include/
|
||||||
|
COPY ./scripts/ /RapidPoseTriangulation/scripts/
|
||||||
|
COPY ./extras/ros/rpt2d_wrapper_cpp /RapidPoseTriangulation/extras/ros/rpt2d_wrapper_cpp/
|
||||||
|
|
||||||
|
# Link and build as ros package
|
||||||
|
RUN ln -s /RapidPoseTriangulation/extras/ros/rpt2d_wrapper_cpp/ /project/dev_ws/src/rpt2d_wrapper_cpp
|
||||||
|
RUN /bin/bash -i -c 'cd /project/dev_ws/; colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release'
|
||||||
|
|
||||||
|
# Update ros packages -> autocompletion and check
|
||||||
|
RUN /bin/bash -i -c 'ros2 pkg list'
|
||||||
|
|
||||||
|
# Clear cache to save space, only has an effect if image is squashed
|
||||||
|
RUN apt-get autoremove -y \
|
||||||
|
&& apt-get clean \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
WORKDIR /RapidPoseTriangulation/
|
||||||
|
CMD ["/bin/bash"]
|
||||||
@ -24,10 +24,14 @@ find_package(cv_bridge REQUIRED)
|
|||||||
find_package(OpenCV REQUIRED)
|
find_package(OpenCV REQUIRED)
|
||||||
|
|
||||||
### 3) ONNX Runtime
|
### 3) ONNX Runtime
|
||||||
|
# for desktop
|
||||||
include_directories(/onnxruntime/include/
|
include_directories(/onnxruntime/include/
|
||||||
/onnxruntime/include/onnxruntime/core/session/
|
/onnxruntime/include/onnxruntime/core/session/
|
||||||
/onnxruntime/include/onnxruntime/core/providers/tensorrt/)
|
/onnxruntime/include/onnxruntime/core/providers/tensorrt/)
|
||||||
link_directories(/onnxruntime/build/Linux/Release/)
|
link_directories(/onnxruntime/build/Linux/Release/)
|
||||||
|
# for jetson
|
||||||
|
include_directories(/usr/local/include/onnxruntime/)
|
||||||
|
link_directories(/usr/local/lib/)
|
||||||
|
|
||||||
add_executable(rpt2d_wrapper src/rpt2d_wrapper.cpp)
|
add_executable(rpt2d_wrapper src/rpt2d_wrapper.cpp)
|
||||||
ament_target_dependencies(rpt2d_wrapper rclcpp std_msgs sensor_msgs cv_bridge)
|
ament_target_dependencies(rpt2d_wrapper rclcpp std_msgs sensor_msgs cv_bridge)
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
xhost +
|
xhost +
|
||||||
docker run --privileged --rm --network host -it \
|
docker run --privileged --rm --network host -it \
|
||||||
--gpus all --shm-size=16g --ulimit memlock=-1 --ulimit stack=67108864 \
|
--runtime nvidia --shm-size=16g --ulimit memlock=-1 --ulimit stack=67108864 \
|
||||||
--volume "$(pwd)"/:/RapidPoseTriangulation/ \
|
--volume "$(pwd)"/:/RapidPoseTriangulation/ \
|
||||||
--volume "$(pwd)"/../datasets/:/datasets/ \
|
--volume "$(pwd)"/../datasets/:/datasets/ \
|
||||||
--volume "$(pwd)"/skelda/:/skelda/ \
|
--volume "$(pwd)"/skelda/:/skelda/ \
|
||||||
|
|||||||
Reference in New Issue
Block a user