Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions PythonAPI/examples/ros2/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
ARG ROS_DISTRO=humble
FROM osrf/ros:${ROS_DISTRO}-desktop

ARG ROS_DISTRO=humble
ARG RMW_IMPLEMENTATION=rmw_fastrtps_cpp

# Install CycloneDDS middleware package when selected; FastDDS is already in the base image
RUN if [ "$RMW_IMPLEMENTATION" = "rmw_cyclonedds_cpp" ]; then \
apt-get update && \
apt-get install -y --no-install-recommends \
ros-${ROS_DISTRO}-rmw-cyclonedds-cpp \
&& rm -rf /var/lib/apt/lists/*; \
fi

ENV RMW_IMPLEMENTATION=${RMW_IMPLEMENTATION}
13 changes: 13 additions & 0 deletions PythonAPI/examples/ros2/config/cyclonedds.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" ?>
<CycloneDDS xmlns="https://cdds.io/config"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://cdds.io/config https://cdds.io/schema/cyclonedds.xsd">
<Domain id="any">
<SharedMemory>
<Enable>false</Enable>
</SharedMemory>
<General>
<Transport>udp</Transport>
</General>
</Domain>
</CycloneDDS>
90 changes: 82 additions & 8 deletions PythonAPI/examples/ros2/run_rviz.sh
Original file line number Diff line number Diff line change
@@ -1,24 +1,98 @@
#!/bin/bash

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"

function transfer_x11_permissions() {
# store X11 access rights in temp file to be passed into docker container
XAUTH=/tmp/.docker.xauth
touch $XAUTH
xauth nlist $DISPLAY | sed -e 's/^..../ffff/' | xauth -f $XAUTH nmerge -
# --- Defaults ---
DISTRO="humble"
RMW="fastdds"

# --- Argument parsing ---
usage() {
cat <<EOF
Usage: $0 [--distro=<distro>] [--rmw=<middleware>]

Options:
--distro ROS 2 distribution to use. Supported: humble, jazzy (default: humble)
--rmw DDS middleware to use. Supported: fastdds, cyclonedds (default: fastdds)

Examples:
$0 --distro=humble --rmw=fastdds
$0 --distro=jazzy --rmw=cyclonedds
EOF
exit 1
}

for arg in "$@"; do
case "$arg" in
--distro=*) DISTRO="${arg#*=}" ;;
--rmw=*) RMW="${arg#*=}" ;;
--help|-h) usage ;;
*) echo "Unknown argument: $arg"; usage ;;
esac
done

# --- Validate ---
case "$DISTRO" in
humble|jazzy) ;;
*) echo "Unsupported distro '${DISTRO}'. Supported values: humble, jazzy"; exit 1 ;;
esac

case "$RMW" in
fastdds|cyclonedds) ;;
*) echo "Unsupported RMW '${RMW}'. Supported values: fastdds, cyclonedds"; exit 1 ;;
esac

# Map short names to ROS RMW implementation identifiers
if [ "$RMW" = "cyclonedds" ]; then
RMW_IMPLEMENTATION="rmw_cyclonedds_cpp"
else
RMW_IMPLEMENTATION="rmw_fastrtps_cpp"
fi

IMAGE_NAME="carla-rviz-${DISTRO}-${RMW}"

# --- Build ---
function build_image() {
echo "[RViz] Building Docker image '${IMAGE_NAME}' (distro=${DISTRO}, rmw=${RMW})..."
docker build \
--build-arg ROS_DISTRO="${DISTRO}" \
--build-arg RMW_IMPLEMENTATION="${RMW_IMPLEMENTATION}" \
--file "${SCRIPT_DIR}/Dockerfile" \
--tag "${IMAGE_NAME}" \
"${SCRIPT_DIR}"
}

transfer_x11_permissions
if ! docker image inspect "${IMAGE_NAME}" &>/dev/null; then
build_image
fi

# --- X11 permissions ---
XAUTH=/tmp/.docker.xauth
touch "$XAUTH"
xauth nlist "$DISPLAY" | sed -e 's/^..../ffff/' | xauth -f "$XAUTH" nmerge -

# --- RMW-specific environment variables ---
EXTRA_ENV=()
if [ "$RMW" = "cyclonedds" ]; then
EXTRA_ENV+=(--env="CYCLONEDDS_URI=/config/cyclonedds.xml")
else
EXTRA_ENV+=(--env="FASTRTPS_DEFAULT_PROFILES_FILE=/config/fastrtps-profile.xml")
fi

# --- Run ---
echo "[RViz] Launching RViz2 (distro=${DISTRO}, rmw=${RMW})..."
docker run \
--rm \
--net=host \
--env="DISPLAY=$DISPLAY" \
--env="XAUTHORITY=$XAUTH" \
--env="FASTRTPS_DEFAULT_PROFILES_FILE=/config/fastrtps-profile.xml" \
--env="RMW_IMPLEMENTATION=${RMW_IMPLEMENTATION}" \
"${EXTRA_ENV[@]}" \
--volume="${SCRIPT_DIR}/config:/config:ro" \
--volume="${SCRIPT_DIR}/rviz:/rviz:rw" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--volume="$XAUTH:$XAUTH" \
osrf/ros:humble-desktop \
"${IMAGE_NAME}" \
ros2 run rviz2 rviz2 -d /rviz/ros2_native.rviz
Loading