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:
git clone -b jazzy https://github.com/ulikoehler/franka_description.gitJetzt können Sie das Skript wie gewohnt ausführen:
cd franka_description
./scripts/visualize_franka.sh arm_id:=fr3Die Ä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:
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