Як запустити franka_description visualize_franka.sh з ROS2 Jazzy

На момент написання цього тексту (2025-01-12), скрипт visualize_franka.sh з franka_description, версія 0.4.0, базується на Docker-образі та ros2 Humble.

Оскільки я використовую Jazzy і хочу уникнути будь-яких несумісностей, ось як оновити скрипт до Jazzy.

Ви можете напряму клонувати мій форк репозиторію:

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

Тепер ви можете запустити скрипт як зазвичай:

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

Зміни базуються на тому факті, що в Docker-образі humble UID 1000 не використовувався, тоді як у Jazzy він використовується користувачем ubuntu. Тому, якщо UID користувача, що виконує скрипт, дорівнює 1000, скрипту потрібно повторно використати існуючий UID та GID, оскільки спроба створити користувача/групу з тим самим UID/GID приречена на невдачу. Деталі щодо методу, яким це було виправлено, дивіться у Логіка оболонки: Як створити користувача/групу, якщо немає користувача/групи з таким UID/GID

Якщо ви хочете модифікувати його самостійно, єдина зміна, яку потрібно зробити — це змінити .docker/Dockerfile:

Dockerfile.jazzy
FROM osrf/ros:jazzy-desktop

ARG DEBIAN_FRONTEND=noninteractive

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

WORKDIR /workspaces

# Створити користувача/групу лише якщо такого користувача/групи не існує
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}"

# Вказати користувача через UID та GID, щоб цей скрипт не
# залежав від точного імені користувача
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

Дивіться схожі статті за категоріями: Робототехніка ROS