Wie man franka_description visualize_franka.sh mit ROS2 Jazzy ausführt

Zum Zeitpunkt der Erstellung dieses Artikels (2025-01-12) basiert das visualize_franka.sh-Skript aus dem franka_description, Version 0.4.0, auf einem Docker-Image und ROS2 Humble.

Da ich Jazzy verwende und alle Inkompatibilitäten vermeiden möchte, hier ist, wie man das Skript auf Jazzy aktualisiert.

Sie können direkt meinen Fork des Repositories klonen:

clone-and-run.sh
git clone -b jazzy https://github.com/ulikoehler/franka_description.git

Jetzt können Sie das Skript wie gewohnt ausführen:

run-visualize-franka.sh
cd franka_description
./scripts/visualize_franka.sh arm_id:=fr3

Die Änderungen basieren auf der Tatsache, dass im humble-Docker-Image die UID 1000 ungenutzt war, während sie in Jazzy vom ubuntu-Benutzer verwendet wird. Wenn die UID des ausführenden Benutzers also 1000 ist, muss das Skript die vorhandene UID & GID wiederverwenden, da der Versuch, einen Benutzer/eine Gruppe mit der gleichen UID/GID zu erstellen, zum Scheitern verurteilt ist. Für Details zur Methode, wie dies behoben wurde, siehe Shell logic: How to create user/group if no user/group with that UID/GID exists

Wenn Sie es selbst modifizieren möchten, ist die einzige Änderung, die Sie vornehmen müssen, .docker/Dockerfile zu ändern:

Dockerfile.jazzy
FROM osrf/ros:jazzy-desktop

ARG DEBIAN_FRONTEND=noninteractive

ARG USER_UID=1001
ARG USER_GID=1001
ARG USERNAME=user

WORKDIR /workspaces

# Create user/group only of no such user/group exists
RUN (getent group $USER_GID || groupadd --gid $USER_GID $USERNAME) \
    && (getent passwd $USER_UID || useradd --uid $USER_UID --gid $USER_GID -m $USERNAME) \
    && mkdir -p -m 0700 /run/user/"${USER_UID}" \
    && mkdir -p -m 0700 /run/user/"${USER_UID}"/gdm \
    && chown $USER_UID:$USER_GID /run/user/"${USER_UID}" \
    && chown $USER_UID:$USER_GID /workspaces \
    && chown $USER_UID:$USER_GID /run/user/"${USER_UID}"/gdm

RUN apt-get update && \
    DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
    ros-jazzy-xacro \
    ros-jazzy-joint-state-publisher-gui \
    && rm -rf /var/lib/apt/lists/*

ENV XDG_RUNTIME_DIR=/run/user/"${USER_UID}"

# Specify user by UID & GID so this script doesn't
# depend on the exact username
USER $USER_UID:$USER_GID

RUN echo "source /ros_entrypoint.sh" >>~/.bashrc
ARG MAX_ROS_DOMAIN_ID=232
RUN echo "export ROS_DOMAIN_ID=100" >>~/.bashrc
RUN echo "set +e" >>~/.bashrc

Check out similar posts by category: Robotics, ROS