Files
lms-nav2-camera-test/run.sh
T

35 lines
1.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
MODULE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FOLDER_NAME="$(basename "$MODULE_PATH")"
CONTAINER_NAME="${FOLDER_NAME#[}"; CONTAINER_NAME="${CONTAINER_NAME/]/-}"
CONTAINER_NAME="${CONTAINER_NAME%_ws}"
MODULE_ROOT="$(dirname "$MODULE_PATH")"
IMAGE="${NAV2_DOCKER_IMAGE:-future-nav2-camera-test:humble-jetson_orin}"
DEVICE=/dev/video0
for arg in "$@"; do
case "$arg" in video_device:=*) DEVICE=${arg#video_device:=} ;; esac
done
[[ "$DEVICE" =~ ^/dev/video[0-9]+$ ]] && [ -c "$DEVICE" ] || { echo "Camera device not found: $DEVICE" >&2; exit 1; }
test -f "$MODULE_PATH/install/setup.bash" || { echo 'Module is not built' >&2; exit 1; }
docker rm -f "$CONTAINER_NAME" >/dev/null 2>&1 || true
device_args=(--device "$DEVICE:$DEVICE")
# Jetson VI capture opens additional channel devices from the container.
for capture_device in /dev/capture-vi-channel*; do
if [ -c "$capture_device" ]; then
device_args+=(--device "$capture_device:$capture_device")
fi
done
exec docker run --rm -d "${device_args[@]}" --network host --ipc=host \
--name "$CONTAINER_NAME" \
-e "ROS_DOMAIN_ID=${ROS_DOMAIN_ID:-77}" \
-e "ROS_LOCALHOST_ONLY=${ROS_LOCALHOST_ONLY:-0}" \
-v "$MODULE_ROOT:/modules" \
"$IMAGE" bash -lc "
source /opt/ros/humble/setup.bash
source '/modules/$FOLDER_NAME/install/setup.bash'
exec ros2 launch camera_test_pkg camera.launch.py \"\$@\"
" bash "$@"