prefix-dev / pixi

Package management made easy
https://pixi.sh
BSD 3-Clause "New" or "Revised" License
2.88k stars 156 forks source link

Issue with `rosidl_typesupport` in `pixi` #1635

Closed alberthli closed 1 month ago

alberthli commented 1 month ago

Checks

Reproducible example

Tl;dr: Our issue arises when trying to boot up a ROS stack in a pixi shell. When using pixi, rosidl type support packages are not found. However, when we manually install ROS pre-compiled binaries in a Docker container without using pixi, the packages are found and our stack boots up correctly.

We have not found an easily-reproducible minimal example. The issue can be reproduced in the following debugging branch of our project repo with the commit hash 46f503cf2ba7068b2b576e5540eb3ab17cea7f10: https://github.com/Caltech-AMBER/obelisk/tree/debug-docker-rosidl.

Assuming you already have required system deps and Docker, run our setup script with the following flags in the root of the cloned repo on the debug-docker-rosidl branch:

source dev_setup.sh --skip-docker --no-cyclone-perf

The only thing this does is set an environment variable called OBELISK_ROOT to the directory where this repository has been cloned and creates a .env file containing other environment variables useful for dockerizing our dev setup. We run Docker for isolation and run pixi inside of it. To build and enter the container, run

cd docker
docker compose -f docker-compose-no-gpu.yml run --build obelisk

Then, to enter the dev environment, run

pixi shell -e dev

We build some custom messages through some pixi task, then the rest of the ROS2 packages.

pixi run messages-build
pixi run source-obelisk

Then, we boot up our stack using an alias installed in the Docker container:

obk-launch config_file_path=dummy_cpp.yaml device_name=onboard

This will spawn a simulation, but we see a runtime error in the terminal:

[obelisk_mujoco_robot-5] [rcutils|error_handling.c:65] an error string (message, file name, or formatted message) will be truncated
[obelisk_mujoco_robot-5] 
[obelisk_mujoco_robot-5] >>> [rcutils|error_handling.c:108] rcutils_set_error_state()
[obelisk_mujoco_robot-5] This error state is being overwritten:
[obelisk_mujoco_robot-5] 
[obelisk_mujoco_robot-5]   'Type support not from this implementation. Got:
[obelisk_mujoco_robot-5]     Handle's typesupport identifier (rosidl_typesupport_cpp) is not supported by this library, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1675687196536/work/ros-humble-rosidl-typesupport-cpp/src/work/src/type_support_dispatch.hpp:111
[obelisk_mujoco_robot-5]     Could not load library libobelisk_sensor_msgs__rosidl_typesupport_introspection_cpp.so: dlopen error: libstd_msgs__rosidl_typesupport_introspection_cpp.so: cannot open shared object file: No such file or directory, at /opt/conda/build_artifacts/ros-humble-rcutils-0_1675685175987/work/ros-humble-rcutils/src/work/src/shared_library.c:99, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1675687196536/work/ros-humble-rosidl-typesupport-cpp/s, at /opt/conda/build_artifacts/ros-humble-rmw-cyclonedds-cpp-0_1675688132292/work/ros-humble-rmw-cyclonedds-cpp/src/work/src/rmw_node.cpp:1958'
[obelisk_mujoco_robot-5] 
[obelisk_mujoco_robot-5] with this new error message:
[obelisk_mujoco_robot-5] 
[obelisk_mujoco_robot-5]   'type_support is null, at /opt/conda/build_artifacts/ros-humble-rmw-cyclonedds-cpp-0_1675688132292/work/ros-humble-rmw-cyclonedds-cpp/src/work/src/rmw_node.cpp:2277'
[obelisk_mujoco_robot-5] 
[obelisk_mujoco_robot-5] rcutils_reset_error() should be called after error handling to avoid this.
[obelisk_mujoco_robot-5] <<<

Issue description

Here, we summarize a few things we tested. Each test is independent from each other.

Test 1: Using only Docker without pixi

If instead, the Debug section of the Dockerfile is uncommented and pixi is not installed:

# syntax=docker/dockerfile:1

# base image
FROM ubuntu:22.04 as base
SHELL ["/bin/bash", "-c"]

# username, uid, gid
ARG USER=user
ARG UID=1000
ARG GID=1000
ARG OBELISK_ROOT=/
ENV USER=$USER
ENV UID=$UID
ENV GID=$GID
ENV OBELISK_ROOT=$OBELISK_ROOT

# set timezone
ENV TZ=America/Los_Angeles
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# basic dependencies from docker_setup.sh (up until sudo and below)
RUN apt-get update && apt-get install -y \
    curl \
    build-essential \
    cmake \
    clang-tools-12 \
    nano \
    vim \
    git \
    python3-dev \
    python-is-python3 \
    python3-pip \
    python3-argcomplete \
    mesa-utils \
    x11-apps \
    libyaml-dev \
    mesa-common-dev \
    libglfw3-dev \
    locales \
    sudo && \
    rm -rf /var/lib/apt/lists/* && \
    locale-gen en_US.UTF-8

# create non-root user with sudo privileges for certain commands
RUN groupadd --gid $GID $USER && \
    useradd --uid $UID --gid $GID -m $USER -d /home/${USER} --shell /usr/bin/bash && \
    echo "${USER}:password" | chpasswd && \
    usermod -aG sudo ${USER} && \
    echo "%${USER} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

# add user to dialout group to enable serial port access from the container
RUN sudo usermod -a -G dialout ${USER}

# DEBUG
##############################################
RUN curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
        -o /usr/share/keyrings/ros-archive-keyring.gpg && \
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] \
        http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | \
        tee /etc/apt/sources.list.d/ros2.list > /dev/null && \
    apt-get update -y
RUN apt-get install -y \
    ros-humble-ros-base \
    ros-dev-tools \
    ros-humble-rosidl-generator-cpp \
    ros-humble-rosidl-default-generators
RUN apt-get install -y \
    ros-humble-rmw-cyclonedds-cpp
RUN echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
##############################################

# switch to new user and workdir
USER ${UID}

# run docker setup script in Dockerfile
# COPY docker_setup.sh /tmp/docker_setup.sh
# RUN source /tmp/docker_setup.sh --skip-docker && \
#     sudo rm /tmp/docker_setup.sh

# add local user binary folder to PATH variable
ENV PATH="${PATH}:/home/${USER}/.local/bin"
ENV XDG_RUNTIME_DIR=/run/user/${UID}
WORKDIR /home/${USER}

We can successfully boot up the stack with no errors by doing the following.

# rebuild and re-enter the container
cd docker
docker compose -f docker-compose-no-gpu.yml run --build obelisk

Then, in the docker container, running the following commands after deleting the build and install directories under obelisk_ws:

source repro.sh
ros2 launch obelisk_ros obelisk_bringup.launch.py config_file_path:=dummy_cpp.yaml device_name:=onboard auto_start:=true bag:=false

This should produce the simulation of the dummy robot swinging back and forth with no error messages in the terminal.

Test 2: Not Using Cyclone DDS

We have tried not using Cyclone for our RMW by commenting out the following line in the pixi.toml:

# env = { RMW_IMPLEMENTATION="rmw_cyclonedds_cpp" }

We confirm that the rmw implementation is the default by running

echo $RMW_IMPLEMENTATION

and

ros2 doctor --report

which shows that it is rmw_fastrtps_cpp. When running the same commands as described in the section on reproducing the issue, we get a slightly different error:

[jointencoders_passthrough_estimator-4] [rcutils|error_handling.c:65] an error string (message, file name, or formatted message) will be truncated
[jointencoders_passthrough_estimator-4] [rcutils|error_handling.c:65] an error string (message, file name, or formatted message) will be truncated
[jointencoders_passthrough_estimator-4] 
[jointencoders_passthrough_estimator-4] >>> [rcutils|error_handling.c:108] rcutils_set_error_state()
[jointencoders_passthrough_estimator-4] This error state is being overwritten:
[jointencoders_passthrough_estimator-4] 
[jointencoders_passthrough_estimator-4]   'Type support not from this implementation. Got:
[jointencoders_passthrough_estimator-4]     Handle's typesupport identifier (rosidl_typesupport_cpp) is not supported by this library, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1675687196536/work/ros-humble-rosidl-typesupport-cpp/src/work/src/type_support_dispatch.hpp:111
[jointencoders_passthrough_estimator-4]     Could not load library libobelisk_sensor_msgs__rosidl_typesupport_fastrtps_cpp.so: dlopen error: libstd_msgs__rosidl_typesupport_fastrtps_cpp.so: cannot open shared object file: No such file or directory, at /opt/conda/build_artifacts/ros-humble-rcutils-0_1675685175987/work/ros-humble-rcutils/src/work/src/shared_library.c:99, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1675687196536/work/ros-humble-rosidl-typesupport-cpp/src/work/sr, at /opt/conda/build_artifacts/ros-humble-rcl-0_1675689729790/work/ros-humble-rcl/src/work/src/rcl/subscription.c:108'
[jointencoders_passthrough_estimator-4] 
[jointencoders_passthrough_estimator-4] with this new error message:
[jointencoders_passthrough_estimator-4] 
[jointencoders_passthrough_estimator-4]   'invalid allocator, at /opt/conda/build_artifacts/ros-humble-rcl-0_1675689729790/work/ros-humble-rcl/src/work/src/rcl/subscription.c:218'
[jointencoders_passthrough_estimator-4] 
[jointencoders_passthrough_estimator-4] rcutils_reset_error() should be called after error handling to avoid this.
[jointencoders_passthrough_estimator-4] <<<
[jointencoders_passthrough_estimator-4] invalid allocator, at /opt/conda/build_artifacts/ros-humble-rcl-0_1675689729790/work/ros-humble-rcl/src/work/src/rcl/subscription.c:218

Test 3: Various Changes to CMakeLists.txt Files

We have determined that the error is introduced by a custom ROS message we define, called MujocoImage.msg under the obelisk_sensor_msgs package located in the obelisk_ws directory. When we comment it out from the CMakeLists.txt and rebuild/rerun, the stack runs correctly without error:

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/JointEncoders.msg"
  "msg/TrueSimState.msg"
  # "msg/MujocoImage.msg"
  DEPENDENCIES
  std_msgs
  obelisk_std_msgs
)

We have tried numerous other changes noted in related issues online, such as specifying the LIBRARY_NAME (see: https://github.com/ros2/rosidl/issues/441):

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/JointEncoders.msg"
  "msg/TrueSimState.msg"
  "msg/MujocoImage.msg"
  DEPENDENCIES
  std_msgs
  obelisk_std_msgs
  LIBRARY_NAME
  ${PROJECT_NAME}
)

This failed.

We have tried downgrading to python 3.10.12 in the pixi.toml as per this issue: https://github.com/ros2/examples/issues/303 without success.

We have tried to install Cyclone locally (in the docker container) while also running pixi, just in case this issue would have been relevant: https://github.com/ros2/rmw_fastrtps/issues/541 without success.

Other Observations

We noticed that it's looking for rosidl_typesupport in /opt/conda/..., which we don't have in the container:

Handle's typesupport identifier (rosidl_typesupport_cpp) is not supported by this library, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1675687196536/work/ros-humble-rosidl-typesupport-cpp/src/work/src/type_support_dispatch.hpp:111

It also tries to look there for a .so file:

Could not load library libobelisk_sensor_msgs__rosidl_typesupport_fastrtps_cpp.so: dlopen error: libstd_msgs__rosidl_typesupport_fastrtps_cpp.so: cannot open shared object file: No such file or directory, at /opt/conda/build_artifacts/ros-humble-rcutils-0_1675685175987/work/ros-humble-rcutils/src/work/src/shared_library.c:99, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1675687196536/work/ros-humble-rosidl-typesupport-cpp/src/work/sr, at /opt/conda/build_artifacts/ros-humble-rcl-0_1675689729790/work/ros-humble-rcl/src/work/src/rcl/subscription.c:108'

However, we can find this file successfully in the directory $OBELISK_ROOT/obelisk_ws/install/obelisk_sensor_msgs/lib

# this shows a bunch of .so files
ls $OBELISK_ROOT/obelisk_ws/install/obelisk_sensor_msgs/lib

# outputs the below
libobelisk_sensor_msgs__rosidl_generator_c.so    libobelisk_sensor_msgs__rosidl_typesupport_cpp.so           libobelisk_sensor_msgs__rosidl_typesupport_introspection_c.so
libobelisk_sensor_msgs__rosidl_generator_py.so   libobelisk_sensor_msgs__rosidl_typesupport_fastrtps_c.so    libobelisk_sensor_msgs__rosidl_typesupport_introspection_cpp.so
libobelisk_sensor_msgs__rosidl_typesupport_c.so  libobelisk_sensor_msgs__rosidl_typesupport_fastrtps_cpp.so  python3.11

This suggests that we may be able to configure something slightly different such that these files are found.

Expected behavior

Our ROS stack should boot up without issue.

mjcarroll commented 1 month ago

Maybe need a little bit more information here. Where is the ros-humble conda package coming from in this case? This may be more specifically a RoboStack issue: https://github.com/RoboStack as they are the only producer of conda binary packages in the ecosystem.

I have had success building all of ROS 2 from source via conda, so I'm wondering if it's something specific to the way that it is packaged.

alberthli commented 1 month ago

Does the following help? As you say, I specify the robostack-staging channel for all my ROS dependencies in pixi.

The relevant parts of my pixi.toml (see here: https://github.com/Caltech-AMBER/obelisk/blob/46f503cf2ba7068b2b576e5540eb3ab17cea7f10/pixi.toml) are:

# ########### #
# BOILERPLATE #
# ########### #

[project]
name = "obelisk"
authors = [
    "Albert Li <alberthli@caltech.edu>",
    "Zach Olkin <zolkin@caltech.edu>",
]
description = "The AMBER Lab's generic robot control interface."
channels = ["conda-forge"]
platforms = ["linux-64"]

[activation]
scripts = ["obelisk_ws/install/setup.sh"]
env = { RMW_IMPLEMENTATION="rmw_cyclonedds_cpp" }

# ############ #
# FEATURE SETS #
# ############ #

# minimal
[dependencies]
python = ">=3.10"
pip = ">=24.0"
setuptools = "<=70.4"

[pypi-dependencies]
matplotlib = ">=3.9.0"
numpy = ">=1.26"
obelisk_py = { path="./obelisk/python", editable=true }

# cuda
[feature.cuda121]
channels = ["nvidia", "nvidia/label/cuda-12.1.0"]
system-requirements = {cuda="12.1.0"}

[feature.cuda121.dependencies]
cuda = { version="*", channel="nvidia/label/cuda-12.1.0" }

# ros2
[feature.ros2base]
channels = ["robostack-staging"]

[feature.ros2base.dependencies]
ros-humble-ros-base = "*"
colcon-common-extensions = "*"

# obelisk
[feature.obelisk.pypi-dependencies]
mujoco = ">=3.1.0"
"ruamel.yaml" = ">=0.18.0"
urdf_parser_py = ">=0.0.4"

# dev
[feature.dev.pypi-dependencies]
pre-commit = ">=3.7.1"
ruff = ">=0.4.9"
pyright = ">=1.1.368"

# build
[feature.build.dependencies]
cmake = "3.16.*"
ninja = "1.12.1"
make = ">=4.3,<5"
glfw = "3.4"

# ################ #
# ENVIRONMENT SETS #
# ################ #

[environments]
default = { solve-group="default" }

# obelisk
obelisk = { features=["obelisk"] }

# ros2
ros2-install = { features=["ros2base"] }

# dev
dev-no-gpu = { features=["obelisk", "ros2base", "test", "dev", "build"] }
dev = { features=["cuda121", "obelisk", "ros2base", "test", "dev", "build"], solve-group="dev" }

The output of pixi list in my environment is:

Package                                            Version       Build                Size       Kind   Source
_libgcc_mutex                                      0.1           conda_forge          2.5 KiB    conda  _libgcc_mutex-0.1-conda_forge.tar.bz2
_openmp_mutex                                      4.5           2_gnu                23.1 KiB   conda  _openmp_mutex-4.5-2_gnu.tar.bz2
absl_py                                            2.1.0                                         pypi   https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl
argcomplete                                        3.4.0         pyhd8ed1ab_0         39.4 KiB   conda  argcomplete-3.4.0-pyhd8ed1ab_0.conda
atk-1.0                                            2.38.0        h04ea711_2           347.6 KiB  conda  atk-1.0-2.38.0-h04ea711_2.conda
attr                                               2.5.1         h166bdaf_1           69.4 KiB   conda  attr-2.5.1-h166bdaf_1.tar.bz2
bullet                                             3.25          h781c19f_2           9.8 KiB    conda  bullet-3.25-h781c19f_2.conda
bullet-cpp                                         3.25          h320fe9a_2           41 MiB     conda  bullet-cpp-3.25-h320fe9a_2.conda
bzip2                                              1.0.8         h4bc722e_7           246.9 KiB  conda  bzip2-1.0.8-h4bc722e_7.conda
c-ares                                             1.32.2        h4bc722e_0           175.5 KiB  conda  c-ares-1.32.2-h4bc722e_0.conda
ca-certificates                                    2024.7.4      hbcca054_0           151.2 KiB  conda  ca-certificates-2024.7.4-hbcca054_0.conda
cairo                                              1.18.0        h3faef2a_0           959.3 KiB  conda  cairo-1.18.0-h3faef2a_0.conda
catkin_pkg                                         1.0.0         pyhd8ed1ab_0         52.2 KiB   conda  catkin_pkg-1.0.0-pyhd8ed1ab_0.conda
cffi                                               1.16.0        py311hb3a22ac_0      293.2 KiB  conda  cffi-1.16.0-py311hb3a22ac_0.conda
cfgv                                               3.4.0                                         pypi   https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl
cmake                                              3.16.5        h28c56e5_0           11.9 MiB   conda  cmake-3.16.5-h28c56e5_0.tar.bz2
colcon-argcomplete                                 0.3.3         pyhd8ed1ab_0         13.3 KiB   conda  colcon-argcomplete-0.3.3-pyhd8ed1ab_0.tar.bz2
colcon-bash                                        0.5.0         pyhd8ed1ab_0         18.6 KiB   conda  colcon-bash-0.5.0-pyhd8ed1ab_0.conda
colcon-cd                                          0.1.1         pyhd8ed1ab_0         11.6 KiB   conda  colcon-cd-0.1.1-pyhd8ed1ab_0.tar.bz2
colcon-cmake                                       0.2.28        pyhd8ed1ab_0         24.8 KiB   conda  colcon-cmake-0.2.28-pyhd8ed1ab_0.conda
colcon-common-extensions                           0.3.0         py311h38be061_1      11.5 KiB   conda  colcon-common-extensions-0.3.0-py311h38be061_1.tar.bz2
colcon-core                                        0.17.0        pyhd8ed1ab_0         83.3 KiB   conda  colcon-core-0.17.0-pyhd8ed1ab_0.conda
colcon-defaults                                    0.2.8         pyhd8ed1ab_0         14.3 KiB   conda  colcon-defaults-0.2.8-pyhd8ed1ab_0.conda
colcon-devtools                                    0.3.0         pyhd8ed1ab_0         14 KiB     conda  colcon-devtools-0.3.0-pyhd8ed1ab_0.conda
colcon-library-path                                0.2.1         py_0                 10.5 KiB   conda  colcon-library-path-0.2.1-py_0.tar.bz2
colcon-metadata                                    0.2.5         py_0                 17.4 KiB   conda  colcon-metadata-0.2.5-py_0.tar.bz2
colcon-output                                      0.2.13        pyhd8ed1ab_0         15.8 KiB   conda  colcon-output-0.2.13-pyhd8ed1ab_0.conda
colcon-package-information                         0.4.0         pyhd8ed1ab_0         17.6 KiB   conda  colcon-package-information-0.4.0-pyhd8ed1ab_0.conda
colcon-package-selection                           0.2.10        py_0                 15.7 KiB   conda  colcon-package-selection-0.2.10-py_0.tar.bz2
colcon-parallel-executor                           0.2.4         py_0                 12.2 KiB   conda  colcon-parallel-executor-0.2.4-py_0.tar.bz2
colcon-pkg-config                                  0.1.0         py_0                 10.2 KiB   conda  colcon-pkg-config-0.1.0-py_0.tar.bz2
colcon-powershell                                  0.4.0         pyhd8ed1ab_0         16.3 KiB   conda  colcon-powershell-0.4.0-pyhd8ed1ab_0.conda
colcon-python-setup-py                             0.2.7         py_0                 13.6 KiB   conda  colcon-python-setup-py-0.2.7-py_0.tar.bz2
colcon-recursive-crawl                             0.2.3         pyhd8ed1ab_0         12.9 KiB   conda  colcon-recursive-crawl-0.2.3-pyhd8ed1ab_0.conda
colcon-ros                                         0.5.0         pyhd8ed1ab_0         23.3 KiB   conda  colcon-ros-0.5.0-pyhd8ed1ab_0.conda
colcon-test-result                                 0.3.8         py_0                 14.4 KiB   conda  colcon-test-result-0.3.8-py_0.tar.bz2
colcon-zsh                                         0.5.0         pyhd8ed1ab_0         18.4 KiB   conda  colcon-zsh-0.5.0-pyhd8ed1ab_0.conda
colorama                                           0.4.6         pyhd8ed1ab_0         24.6 KiB   conda  colorama-0.4.6-pyhd8ed1ab_0.tar.bz2
coloredlogs                                        15.0.1        pyhd8ed1ab_3         39.6 KiB   conda  coloredlogs-15.0.1-pyhd8ed1ab_3.tar.bz2
console_bridge                                     1.0.2         h924138e_1           18 KiB     conda  console_bridge-1.0.2-h924138e_1.tar.bz2
contourpy                                          1.2.1                                         pypi   https://files.pythonhosted.org/packages/ee/c0/9bd123d676eb61750e116a2cd915b06483fc406143cfc36c7f263f0f5368/contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
coverage                                           7.6.0         py311h61187de_0      364.3 KiB  conda  coverage-7.6.0-py311h61187de_0.conda
cppcheck                                           2.14.2        py311hdd5f75e_0      2.4 MiB    conda  cppcheck-2.14.2-py311hdd5f75e_0.conda
cryptography                                       42.0.8        py311h4a61cc7_0      1.9 MiB    conda  cryptography-42.0.8-py311h4a61cc7_0.conda
cycler                                             0.12.1                                        pypi   https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl
distlib                                            0.3.8         pyhd8ed1ab_0         268.5 KiB  conda  distlib-0.3.8-pyhd8ed1ab_0.conda
distro                                             1.9.0         pyhd8ed1ab_0         41.1 KiB   conda  distro-1.9.0-pyhd8ed1ab_0.conda
docutils                                           0.21.2        pyhd8ed1ab_0         393.8 KiB  conda  docutils-0.21.2-pyhd8ed1ab_0.conda
dynamixel_sdk                                      3.7.31                                        pypi   https://files.pythonhosted.org/packages/03/e8/2c65d11d312fdb1a2308563d32f63f93c39123bcfb4909d947e0b294c794/dynamixel_sdk-3.7.31-py3-none-any.whl
eigen                                              3.4.0         h00ab1b0_0           1 MiB      conda  eigen-3.4.0-h00ab1b0_0.conda
empy                                               3.3.4         pyh9f0ad1d_1         39.3 KiB   conda  empy-3.3.4-pyh9f0ad1d_1.tar.bz2
etils                                              1.9.2                                         pypi   https://files.pythonhosted.org/packages/a0/f4/305f3ea85aecd23422c606c179fb6d00bd7d255b10d55b4c797a3a680144/etils-1.9.2-py3-none-any.whl
exceptiongroup                                     1.2.2         pyhd8ed1ab_0         19.9 KiB   conda  exceptiongroup-1.2.2-pyhd8ed1ab_0.conda
execnet                                            2.1.1                                         pypi   https://files.pythonhosted.org/packages/43/09/2aea36ff60d16dd8879bdb2f5b3ee0ba8d08cbbdcdfe870e695ce3784385/execnet-2.1.1-py3-none-any.whl
expat                                              2.6.2         h59595ed_0           134.4 KiB  conda  expat-2.6.2-h59595ed_0.conda
filelock                                           3.15.4                                        pypi   https://files.pythonhosted.org/packages/ae/f0/48285f0262fe47103a4a45972ed2f9b93e4c80b8fd609fa98da78b2a5706/filelock-3.15.4-py3-none-any.whl
flake8                                             7.1.0         pyhd8ed1ab_0         108.4 KiB  conda  flake8-7.1.0-pyhd8ed1ab_0.conda
fmt                                                10.2.1        h00ab1b0_0           189.3 KiB  conda  fmt-10.2.1-h00ab1b0_0.conda
font-ttf-dejavu-sans-mono                          2.37          hab24e00_0           388.1 KiB  conda  font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2
font-ttf-inconsolata                               3.000         h77eed37_0           94.3 KiB   conda  font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2
font-ttf-source-code-pro                           2.038         h77eed37_0           684.4 KiB  conda  font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2
font-ttf-ubuntu                                    0.83          h77eed37_2           1.5 MiB    conda  font-ttf-ubuntu-0.83-h77eed37_2.conda
fontconfig                                         2.14.2        h14ed4e7_0           265.6 KiB  conda  fontconfig-2.14.2-h14ed4e7_0.conda
fonts-conda-ecosystem                              1             0                    3.6 KiB    conda  fonts-conda-ecosystem-1-0.tar.bz2
fonts-conda-forge                                  1             0                    4 KiB      conda  fonts-conda-forge-1-0.tar.bz2
fonttools                                          4.53.1                                        pypi   https://files.pythonhosted.org/packages/a4/22/0a0ad59d9367997fd74a00ad2e88d10559122e09f105e94d34c155aecc0a/fonttools-4.53.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
foonathan-memory                                   0.7.2         h27087fc_1           177.7 KiB  conda  foonathan-memory-0.7.2-h27087fc_1.tar.bz2
freetype                                           2.12.1        h267a509_2           620.1 KiB  conda  freetype-2.12.1-h267a509_2.conda
fribidi                                            1.0.10        h36c2ea0_0           111.7 KiB  conda  fribidi-1.0.10-h36c2ea0_0.tar.bz2
fsspec                                             2024.6.1                                      pypi   https://files.pythonhosted.org/packages/5e/44/73bea497ac69bafde2ee4269292fa3b41f1198f4bb7bbaaabde30ad29d4a/fsspec-2024.6.1-py3-none-any.whl
gdk-pixbuf                                         2.42.12       hb9ae30d_0           515.8 KiB  conda  gdk-pixbuf-2.42.12-hb9ae30d_0.conda
giflib                                             5.2.2         hd590300_0           75.4 KiB   conda  giflib-5.2.2-hd590300_0.conda
glfw                                               3.4           hd590300_0           163.5 KiB  conda  glfw-3.4-hd590300_0.conda
glfw                                               2.7.0                                         pypi   https://files.pythonhosted.org/packages/ec/e8/462afb18f3627d11d4dab74228b52094e1a121d57fe57957c821c50bbfba/glfw-2.7.0-py2.py27.py3.py30.py31.py32.py33.py34.py35.py36.py37.py38-none-manylinux2014_x86_64.whl
gmock                                              1.14.0        ha770c72_2           6.8 KiB    conda  gmock-1.14.0-ha770c72_2.conda
graphite2                                          1.3.13        h59595ed_1003        94.6 KiB   conda  graphite2-1.3.13-h59595ed_1003.conda
graphviz                                           9.0.0         h78e8752_1           2.2 MiB    conda  graphviz-9.0.0-h78e8752_1.conda
gtest                                              1.14.0        h434a139_2           394.1 KiB  conda  gtest-1.14.0-h434a139_2.conda
gtk2                                               2.24.33       h280cfa0_4           6.2 MiB    conda  gtk2-2.24.33-h280cfa0_4.conda
gts                                                0.7.6         h977cf35_4           310.9 KiB  conda  gts-0.7.6-h977cf35_4.conda
harfbuzz                                           8.5.0         hfac3d4d_0           1.5 MiB    conda  harfbuzz-8.5.0-hfac3d4d_0.conda
humanfriendly                                      10.0          pyhd8ed1ab_6         71.7 KiB   conda  humanfriendly-10.0-pyhd8ed1ab_6.conda
icu                                                73.2          h59595ed_0           11.5 MiB   conda  icu-73.2-h59595ed_0.conda
identify                                           2.6.0                                         pypi   https://files.pythonhosted.org/packages/24/6c/a4f39abe7f19600b74528d0c717b52fff0b300bb0161081510d39c53cb00/identify-2.6.0-py2.py3-none-any.whl
importlib-metadata                                 8.0.0         pyha770c72_0         26.7 KiB   conda  importlib-metadata-8.0.0-pyha770c72_0.conda
importlib_resources                                6.4.0         pyhd8ed1ab_0         32.3 KiB   conda  importlib_resources-6.4.0-pyhd8ed1ab_0.conda
iniconfig                                          2.0.0         pyhd8ed1ab_0         10.8 KiB   conda  iniconfig-2.0.0-pyhd8ed1ab_0.conda
keyutils                                           1.6.1         h166bdaf_0           115.1 KiB  conda  keyutils-1.6.1-h166bdaf_0.tar.bz2
kiwisolver                                         1.4.5                                         pypi   https://files.pythonhosted.org/packages/17/ba/17a706b232308e65f57deeccae503c268292e6a091313f6ce833a23093ea/kiwisolver-1.4.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
krb5                                               1.21.3        h659f571_0           1.3 MiB    conda  krb5-1.21.3-h659f571_0.conda
lark-parser                                        0.12.0        pyhd8ed1ab_0         77.5 KiB   conda  lark-parser-0.12.0-pyhd8ed1ab_0.tar.bz2
ld_impl_linux-64                                   2.40          hf3520f5_7           691 KiB    conda  ld_impl_linux-64-2.40-hf3520f5_7.conda
lerc                                               4.0.0         h27087fc_0           275.2 KiB  conda  lerc-4.0.0-h27087fc_0.tar.bz2
libacl                                             2.3.2         h0f662aa_0           108 KiB    conda  libacl-2.3.2-h0f662aa_0.conda
libblas                                            3.9.0         22_linux64_openblas  14.2 KiB   conda  libblas-3.9.0-22_linux64_openblas.conda
libcblas                                           3.9.0         22_linux64_openblas  14.1 KiB   conda  libcblas-3.9.0-22_linux64_openblas.conda
libcurl                                            8.8.0         hca28451_1           400.5 KiB  conda  libcurl-8.8.0-hca28451_1.conda
libdeflate                                         1.20          hd590300_0           69.8 KiB   conda  libdeflate-1.20-hd590300_0.conda
libedit                                            3.1.20191231  he28a2e2_2           121 KiB    conda  libedit-3.1.20191231-he28a2e2_2.tar.bz2
libev                                              4.33          hd590300_2           110.1 KiB  conda  libev-4.33-hd590300_2.conda
libexpat                                           2.6.2         h59595ed_0           72 KiB     conda  libexpat-2.6.2-h59595ed_0.conda
libffi                                             3.4.2         h7f98852_5           56.9 KiB   conda  libffi-3.4.2-h7f98852_5.tar.bz2
libgcc-ng                                          14.1.0        h77fa898_0           822.4 KiB  conda  libgcc-ng-14.1.0-h77fa898_0.conda
libgd                                              2.3.3         h119a65a_9           219.2 KiB  conda  libgd-2.3.3-h119a65a_9.conda
libgfortran-ng                                     14.1.0        h69a702a_0           48.7 KiB   conda  libgfortran-ng-14.1.0-h69a702a_0.conda
libgfortran5                                       14.1.0        hc5f4f2c_0           1.4 MiB    conda  libgfortran5-14.1.0-hc5f4f2c_0.conda
libglib                                            2.80.2        hf974151_0           3.7 MiB    conda  libglib-2.80.2-hf974151_0.conda
libgomp                                            14.1.0        h77fa898_0           446.2 KiB  conda  libgomp-14.1.0-h77fa898_0.conda
libiconv                                           1.17          hd590300_2           689.2 KiB  conda  libiconv-1.17-hd590300_2.conda
libjpeg-turbo                                      3.0.0         hd590300_1           604.1 KiB  conda  libjpeg-turbo-3.0.0-hd590300_1.conda
liblapack                                          3.9.0         22_linux64_openblas  14.1 KiB   conda  liblapack-3.9.0-22_linux64_openblas.conda
libnghttp2                                         1.58.0        h47da74e_1           617.1 KiB  conda  libnghttp2-1.58.0-h47da74e_1.conda
libnsl                                             2.0.1         hd590300_0           32.6 KiB   conda  libnsl-2.0.1-hd590300_0.conda
libopenblas                                        0.3.27        pthreads_hac2b453_1  5.3 MiB    conda  libopenblas-0.3.27-pthreads_hac2b453_1.conda
libpng                                             1.6.43        h2797004_0           281.5 KiB  conda  libpng-1.6.43-h2797004_0.conda
librsvg                                            2.58.1        hadf69e7_0           6 MiB      conda  librsvg-2.58.1-hadf69e7_0.conda
libsqlite                                          3.46.0        hde9e2c9_0           845.1 KiB  conda  libsqlite-3.46.0-hde9e2c9_0.conda
libssh2                                            1.11.0        h0841786_0           264.8 KiB  conda  libssh2-1.11.0-h0841786_0.conda
libstdcxx-ng                                       14.1.0        hc0a3c3a_0           3.7 MiB    conda  libstdcxx-ng-14.1.0-hc0a3c3a_0.conda
libtiff                                            4.6.0         h1dd3fc0_3           276.1 KiB  conda  libtiff-4.6.0-h1dd3fc0_3.conda
libuuid                                            2.38.1        h0b41bf4_0           32.8 KiB   conda  libuuid-2.38.1-h0b41bf4_0.conda
libuv                                              1.48.0        hd590300_0           878.9 KiB  conda  libuv-1.48.0-hd590300_0.conda
libwebp                                            1.4.0         h2c329e2_0           89.8 KiB   conda  libwebp-1.4.0-h2c329e2_0.conda
libwebp-base                                       1.4.0         hd590300_0           428.7 KiB  conda  libwebp-base-1.4.0-hd590300_0.conda
libxcb                                             1.15          h0b41bf4_0           375.2 KiB  conda  libxcb-1.15-h0b41bf4_0.conda
libxcrypt                                          4.4.36        hd590300_1           98 KiB     conda  libxcrypt-4.4.36-hd590300_1.conda
libxkbcommon                                       1.7.0         h662e7e4_0           579.6 KiB  conda  libxkbcommon-1.7.0-h662e7e4_0.conda
libxml2                                            2.12.7        hc051c1a_1           688.5 KiB  conda  libxml2-2.12.7-hc051c1a_1.conda
libxslt                                            1.1.39        h76b75d6_0           248.3 KiB  conda  libxslt-1.1.39-h76b75d6_0.conda
libzlib                                            1.2.13        h4ab18f5_6           60.1 KiB   conda  libzlib-1.2.13-h4ab18f5_6.conda
lxml                                               5.2.2         py311hc0a218f_0      1.3 MiB    conda  lxml-5.2.2-py311hc0a218f_0.conda
make                                               4.3           hd18ef5c_1           506.7 KiB  conda  make-4.3-hd18ef5c_1.tar.bz2
matplotlib                                         3.9.1                                         pypi   https://files.pythonhosted.org/packages/b8/63/cef838d92c1918ae28afd12b8aeaa9c104a0686cf6447aa0546f7c6dd1f0/matplotlib-3.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
mccabe                                             0.7.0         pyhd8ed1ab_0         10.7 KiB   conda  mccabe-0.7.0-pyhd8ed1ab_0.tar.bz2
mujoco                                             3.2.0                                         pypi   https://files.pythonhosted.org/packages/e1/28/9becc31846e98bbfa0134dae844699e67199500c56743b36b5925b6c4d45/mujoco-3.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
ncurses                                            6.5           h59595ed_0           866.7 KiB  conda  ncurses-6.5-h59595ed_0.conda
netifaces                                          0.11.0        py311h459d7ec_2      19.2 KiB   conda  netifaces-0.11.0-py311h459d7ec_2.conda
ninja                                              1.12.1        h297d8ca_0           2.1 MiB    conda  ninja-1.12.1-h297d8ca_0.conda
nodeenv                                            1.9.1                                         pypi   https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl
numpy                                              1.26.4        py311h64a7726_0      7.7 MiB    conda  numpy-1.26.4-py311h64a7726_0.conda
obelisk_py                                         0.0.1                                         pypi   ./obelisk/python (editable)
openssl                                            3.3.1         h4bc722e_2           2.8 MiB    conda  openssl-3.3.1-h4bc722e_2.conda
orocos-kdl                                         1.5.1         h59595ed_5           375.5 KiB  conda  orocos-kdl-1.5.1-h59595ed_5.conda
packaging                                          24.1          pyhd8ed1ab_0         49.1 KiB   conda  packaging-24.1-pyhd8ed1ab_0.conda
pango                                              1.54.0        h84a9a3c_0           437.9 KiB  conda  pango-1.54.0-h84a9a3c_0.conda
pcre                                               8.45          h9c3ff4c_0           253.3 KiB  conda  pcre-8.45-h9c3ff4c_0.tar.bz2
pcre2                                              10.43         hcad00b1_0           928.6 KiB  conda  pcre2-10.43-hcad00b1_0.conda
pillow                                             10.4.0                                        pypi   https://files.pythonhosted.org/packages/ba/e5/8c68ff608a4203085158cff5cc2a3c534ec384536d9438c405ed6370d080/pillow-10.4.0-cp311-cp311-manylinux_2_28_x86_64.whl
pip                                                24.0          pyhd8ed1ab_0         1.3 MiB    conda  pip-24.0-pyhd8ed1ab_0.conda
pixman                                             0.43.2        h59595ed_0           377.8 KiB  conda  pixman-0.43.2-h59595ed_0.conda
platformdirs                                       4.2.2                                         pypi   https://files.pythonhosted.org/packages/68/13/2aa1f0e1364feb2c9ef45302f387ac0bd81484e9c9a4c5688a322fbdfd08/platformdirs-4.2.2-py3-none-any.whl
pluggy                                             1.5.0         pyhd8ed1ab_0         23.3 KiB   conda  pluggy-1.5.0-pyhd8ed1ab_0.conda
pre_commit                                         3.7.1                                         pypi   https://files.pythonhosted.org/packages/b9/0f/d6d0b4e2f5b2933a557087fc0560371aa545a18232d4d3427eb3bb3af12e/pre_commit-3.7.1-py2.py3-none-any.whl
psutil                                             6.0.0         py311h331c9d8_0      497 KiB    conda  psutil-6.0.0-py311h331c9d8_0.conda
pthread-stubs                                      0.4           h36c2ea0_1001        5.5 KiB    conda  pthread-stubs-0.4-h36c2ea0_1001.tar.bz2
pybind11                                           2.13.1        py311h52f7536_0      190.7 KiB  conda  pybind11-2.13.1-py311h52f7536_0.conda
pybind11-global                                    2.13.1        py311h52f7536_0      175.5 KiB  conda  pybind11-global-2.13.1-py311h52f7536_0.conda
pybullet                                           3.25          py311h320fe9a_2      60 MiB     conda  pybullet-3.25-py311h320fe9a_2.conda
pycodestyle                                        2.12.0        pyhd8ed1ab_0         33.6 KiB   conda  pycodestyle-2.12.0-pyhd8ed1ab_0.conda
pycparser                                          2.22          pyhd8ed1ab_0         102.6 KiB  conda  pycparser-2.22-pyhd8ed1ab_0.conda
pydocstyle                                         6.3.0         pyhd8ed1ab_0         38.9 KiB   conda  pydocstyle-6.3.0-pyhd8ed1ab_0.conda
pyflakes                                           3.2.0         pyhd8ed1ab_0         57.3 KiB   conda  pyflakes-3.2.0-pyhd8ed1ab_0.conda
pygments                                           2.18.0        pyhd8ed1ab_0         858.7 KiB  conda  pygments-2.18.0-pyhd8ed1ab_0.conda
pyopengl                                           3.1.7                                         pypi   https://files.pythonhosted.org/packages/99/48/00e31747821d3fc56faddd00a4725454d1e694a8b67d715cf20f531506a5/PyOpenGL-3.1.7-py3-none-any.whl
pyparsing                                          3.1.2         pyhd8ed1ab_0         87.4 KiB   conda  pyparsing-3.1.2-pyhd8ed1ab_0.conda
pyright                                            1.1.372                                       pypi   https://files.pythonhosted.org/packages/f9/28/b5ef3ea1f25d19a3291d1631433f7abcdad572ab7865b4be23da42f2a71b/pyright-1.1.372-py3-none-any.whl
pyserial                                           3.5                                           pypi   https://files.pythonhosted.org/packages/07/bc/587a445451b253b285629263eb51c2d8e9bcea4fc97826266d186f96f558/pyserial-3.5-py2.py3-none-any.whl
pytest                                             8.0.0         pyhd8ed1ab_0         245.8 KiB  conda  pytest-8.0.0-pyhd8ed1ab_0.conda
pytest-cov                                         5.0.0         pyhd8ed1ab_0         24.9 KiB   conda  pytest-cov-5.0.0-pyhd8ed1ab_0.conda
pytest-repeat                                      0.9.2         pyhd8ed1ab_0         9.9 KiB    conda  pytest-repeat-0.9.2-pyhd8ed1ab_0.conda
pytest-rerunfailures                               14.0          pyhd8ed1ab_0         17.4 KiB   conda  pytest-rerunfailures-14.0-pyhd8ed1ab_0.conda
pytest_xdist                                       3.6.1                                         pypi   https://files.pythonhosted.org/packages/6d/82/1d96bf03ee4c0fdc3c0cbe61470070e659ca78dc0086fb88b66c185e2449/pytest_xdist-3.6.1-py3-none-any.whl
python                                             3.11.9        hb806964_0_cpython   29.5 MiB   conda  python-3.11.9-hb806964_0_cpython.conda
python-dateutil                                    2.9.0         pyhd8ed1ab_0         217.5 KiB  conda  python-dateutil-2.9.0-pyhd8ed1ab_0.conda
python_abi                                         3.11          4_cp311              6.2 KiB    conda  python_abi-3.11-4_cp311.conda
pyyaml                                             6.0.1         py311h459d7ec_1      195.9 KiB  conda  pyyaml-6.0.1-py311h459d7ec_1.conda
readline                                           8.2           h8228510_1           274.9 KiB  conda  readline-8.2-h8228510_1.conda
rhash                                              1.4.3         hd590300_2           180.2 KiB  conda  rhash-1.4.3-hd590300_2.conda
ros-humble-action-msgs                             1.2.1         py311hb335429_6      101.6 KiB  conda  ros-humble-action-msgs-1.2.1-py311hb335429_6.tar.bz2
ros-humble-actionlib-msgs                          4.2.3         py311hb335429_6      87.2 KiB   conda  ros-humble-actionlib-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-ament-cmake                             1.3.7         py311hb335429_6      14.9 KiB   conda  ros-humble-ament-cmake-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-auto                        1.3.7         py311hb335429_6      14.8 KiB   conda  ros-humble-ament-cmake-auto-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-copyright                   0.12.10       py311hb335429_6      11.7 KiB   conda  ros-humble-ament-cmake-copyright-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-core                        1.3.7         py311hb335429_6      33.2 KiB   conda  ros-humble-ament-cmake-core-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-cppcheck                    0.12.10       py311hb335429_6      12.7 KiB   conda  ros-humble-ament-cmake-cppcheck-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-cpplint                     0.12.10       py311hb335429_6      12 KiB     conda  ros-humble-ament-cmake-cpplint-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-export-definitions          1.3.7         py311hb335429_6      11.5 KiB   conda  ros-humble-ament-cmake-export-definitions-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-export-dependencies         1.3.7         py311hb335429_6      12.3 KiB   conda  ros-humble-ament-cmake-export-dependencies-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-export-include-directories  1.3.7         py311hb335429_6      11.8 KiB   conda  ros-humble-ament-cmake-export-include-directories-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-export-interfaces           1.3.7         py311hb335429_6      12 KiB     conda  ros-humble-ament-cmake-export-interfaces-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-export-libraries            1.3.7         py311hb335429_6      13.4 KiB   conda  ros-humble-ament-cmake-export-libraries-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-export-link-flags           1.3.7         py311hb335429_6      11.4 KiB   conda  ros-humble-ament-cmake-export-link-flags-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-export-targets              1.3.7         py311hb335429_6      11.9 KiB   conda  ros-humble-ament-cmake-export-targets-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-flake8                      0.12.10       py311hb335429_6      11.9 KiB   conda  ros-humble-ament-cmake-flake8-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-gen-version-h               1.3.7         py311hb335429_6      13.8 KiB   conda  ros-humble-ament-cmake-gen-version-h-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-gmock                       1.3.7         py311hb335429_6      13.2 KiB   conda  ros-humble-ament-cmake-gmock-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-gtest                       1.3.7         py311hb335429_6      17.4 KiB   conda  ros-humble-ament-cmake-gtest-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-include-directories         1.3.7         py311hb335429_6      11.4 KiB   conda  ros-humble-ament-cmake-include-directories-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-libraries                   1.3.7         py311hb335429_6      11.8 KiB   conda  ros-humble-ament-cmake-libraries-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-lint-cmake                  0.12.10       py311hb335429_6      15.1 KiB   conda  ros-humble-ament-cmake-lint-cmake-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-pep257                      0.12.10       py311hb335429_6      11.6 KiB   conda  ros-humble-ament-cmake-pep257-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-pytest                      1.3.7         py311hb335429_6      22.3 KiB   conda  ros-humble-ament-cmake-pytest-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-python                      1.3.7         py311hb335429_6      13.7 KiB   conda  ros-humble-ament-cmake-python-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-ros                         0.10.0        py311hb335429_6      14.4 KiB   conda  ros-humble-ament-cmake-ros-0.10.0-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-target-dependencies         1.3.7         py311hb335429_6      12.9 KiB   conda  ros-humble-ament-cmake-target-dependencies-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-test                        1.3.7         py311hb335429_6      30.3 KiB   conda  ros-humble-ament-cmake-test-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-uncrustify                  0.12.10       py311hb335429_6      12.1 KiB   conda  ros-humble-ament-cmake-uncrustify-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-version                     1.3.7         py311hb335429_6      11.2 KiB   conda  ros-humble-ament-cmake-version-1.3.7-py311hb335429_6.tar.bz2
ros-humble-ament-cmake-xmllint                     0.12.10       py311hb335429_6      11.7 KiB   conda  ros-humble-ament-cmake-xmllint-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-copyright                         0.12.10       py311hb335429_6      65.4 KiB   conda  ros-humble-ament-copyright-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cppcheck                          0.12.10       py311hb335429_6      23.9 KiB   conda  ros-humble-ament-cppcheck-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-cpplint                           0.12.10       py311hb335429_6      195.8 KiB  conda  ros-humble-ament-cpplint-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-flake8                            0.12.10       py311hb335429_6      25 KiB     conda  ros-humble-ament-flake8-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-index-cpp                         1.4.0         py311hb335429_6      30.7 KiB   conda  ros-humble-ament-index-cpp-1.4.0-py311hb335429_6.tar.bz2
ros-humble-ament-index-python                      1.4.0         py311hb335429_6      22.5 KiB   conda  ros-humble-ament-index-python-1.4.0-py311hb335429_6.tar.bz2
ros-humble-ament-lint                              0.12.10       py311hb335429_6      9.1 KiB    conda  ros-humble-ament-lint-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-lint-auto                         0.12.10       py311hb335429_6      14.9 KiB   conda  ros-humble-ament-lint-auto-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-lint-cmake                        0.12.10       py311hb335429_6      38 KiB     conda  ros-humble-ament-lint-cmake-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-lint-common                       0.12.10       py311hb335429_6      11.6 KiB   conda  ros-humble-ament-lint-common-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-package                           0.14.0        py311hb335429_6      45.1 KiB   conda  ros-humble-ament-package-0.14.0-py311hb335429_6.tar.bz2
ros-humble-ament-pep257                            0.12.10       py311hb335429_6      20.7 KiB   conda  ros-humble-ament-pep257-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-uncrustify                        0.12.10       py311hb335429_6      44.9 KiB   conda  ros-humble-ament-uncrustify-0.12.10-py311hb335429_6.tar.bz2
ros-humble-ament-xmllint                           0.12.10       py311hb335429_6      21.8 KiB   conda  ros-humble-ament-xmllint-0.12.10-py311hb335429_6.tar.bz2
ros-humble-builtin-interfaces                      1.2.1         py311hb335429_6      60.4 KiB   conda  ros-humble-builtin-interfaces-1.2.1-py311hb335429_6.tar.bz2
ros-humble-class-loader                            2.2.0         py311hb303436_6      56.9 KiB   conda  ros-humble-class-loader-2.2.0-py311hb303436_6.tar.bz2
ros-humble-common-interfaces                       4.2.3         py311hb335429_6      11.3 KiB   conda  ros-humble-common-interfaces-4.2.3-py311hb335429_6.tar.bz2
ros-humble-composition-interfaces                  1.2.1         py311hb335429_6      141.9 KiB  conda  ros-humble-composition-interfaces-1.2.1-py311hb335429_6.tar.bz2
ros-humble-console-bridge-vendor                   1.4.1         py311hb303436_6      10.8 KiB   conda  ros-humble-console-bridge-vendor-1.4.1-py311hb303436_6.tar.bz2
ros-humble-cyclonedds                              0.10.4        py311h8eb0f6d_6      1.1 MiB    conda  ros-humble-cyclonedds-0.10.4-py311h8eb0f6d_6.tar.bz2
ros-humble-diagnostic-msgs                         4.2.3         py311hb335429_6      139.9 KiB  conda  ros-humble-diagnostic-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-domain-coordinator                      0.10.0        py311hb335429_6      11.6 KiB   conda  ros-humble-domain-coordinator-0.10.0-py311hb335429_6.tar.bz2
ros-humble-eigen3-cmake-module                     0.1.1         py311hb335429_6      11.1 KiB   conda  ros-humble-eigen3-cmake-module-0.1.1-py311hb335429_6.tar.bz2
ros-humble-fastcdr                                 1.0.24        py311hb335429_6      56.7 KiB   conda  ros-humble-fastcdr-1.0.24-py311hb335429_6.tar.bz2
ros-humble-fastrtps                                2.6.7         py311h70423f0_6      3.5 MiB    conda  ros-humble-fastrtps-2.6.7-py311h70423f0_6.tar.bz2
ros-humble-fastrtps-cmake-module                   2.2.2         py311hb335429_6      11.7 KiB   conda  ros-humble-fastrtps-cmake-module-2.2.2-py311hb335429_6.tar.bz2
ros-humble-foonathan-memory-vendor                 1.2.0         py311hb335429_6      8.8 KiB    conda  ros-humble-foonathan-memory-vendor-1.2.0-py311hb335429_6.tar.bz2
ros-humble-geometry-msgs                           4.2.3         py311hb335429_6      283.2 KiB  conda  ros-humble-geometry-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-geometry2                               0.25.5        py311hb335429_6      12 KiB     conda  ros-humble-geometry2-0.25.5-py311hb335429_6.tar.bz2
ros-humble-gmock-vendor                            1.10.9004     py311hb335429_6      97.4 KiB   conda  ros-humble-gmock-vendor-1.10.9004-py311hb335429_6.tar.bz2
ros-humble-gtest-vendor                            1.10.9004     py311hb335429_6      175 KiB    conda  ros-humble-gtest-vendor-1.10.9004-py311hb335429_6.tar.bz2
ros-humble-iceoryx-binding-c                       2.0.5         py311hb335429_6      85.6 KiB   conda  ros-humble-iceoryx-binding-c-2.0.5-py311hb335429_6.tar.bz2
ros-humble-iceoryx-hoofs                           2.0.5         py311hb335429_6      251.8 KiB  conda  ros-humble-iceoryx-hoofs-2.0.5-py311hb335429_6.tar.bz2
ros-humble-iceoryx-posh                            2.0.5         py311hb335429_6      575.7 KiB  conda  ros-humble-iceoryx-posh-2.0.5-py311hb335429_6.tar.bz2
ros-humble-kdl-parser                              2.6.4         py311hb335429_6      29.3 KiB   conda  ros-humble-kdl-parser-2.6.4-py311hb335429_6.tar.bz2
ros-humble-keyboard-handler                        0.0.5         py311hb335429_6      41.6 KiB   conda  ros-humble-keyboard-handler-0.0.5-py311hb335429_6.tar.bz2
ros-humble-launch                                  1.0.4         py311hb335429_6      275 KiB    conda  ros-humble-launch-1.0.4-py311hb335429_6.tar.bz2
ros-humble-launch-ros                              0.19.7        py311hb335429_6      114 KiB    conda  ros-humble-launch-ros-0.19.7-py311hb335429_6.tar.bz2
ros-humble-launch-testing                          1.0.4         py311hb335429_6      129.5 KiB  conda  ros-humble-launch-testing-1.0.4-py311hb335429_6.tar.bz2
ros-humble-launch-testing-ament-cmake              1.0.4         py311hb335429_6      19.3 KiB   conda  ros-humble-launch-testing-ament-cmake-1.0.4-py311hb335429_6.tar.bz2
ros-humble-launch-testing-ros                      0.19.7        py311hb335429_6      37.3 KiB   conda  ros-humble-launch-testing-ros-0.19.7-py311hb335429_6.tar.bz2
ros-humble-launch-xml                              1.0.4         py311hb335429_6      17.9 KiB   conda  ros-humble-launch-xml-1.0.4-py311hb335429_6.tar.bz2
ros-humble-launch-yaml                             1.0.4         py311hb335429_6      18.7 KiB   conda  ros-humble-launch-yaml-1.0.4-py311hb335429_6.tar.bz2
ros-humble-libstatistics-collector                 1.3.1         py311hb335429_6      32 KiB     conda  ros-humble-libstatistics-collector-1.3.1-py311hb335429_6.tar.bz2
ros-humble-libyaml-vendor                          1.2.2         py311hb335429_6      13.6 KiB   conda  ros-humble-libyaml-vendor-1.2.2-py311hb335429_6.tar.bz2
ros-humble-lifecycle-msgs                          1.2.1         py311hb335429_6      169.6 KiB  conda  ros-humble-lifecycle-msgs-1.2.1-py311hb335429_6.tar.bz2
ros-humble-message-filters                         4.3.3         py311hb335429_6      54.9 KiB   conda  ros-humble-message-filters-4.3.3-py311hb335429_6.tar.bz2
ros-humble-nav-msgs                                4.2.3         py311hb335429_6      189 KiB    conda  ros-humble-nav-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-orocos-kdl-vendor                       0.2.5         py311hb335429_6      11.4 KiB   conda  ros-humble-orocos-kdl-vendor-0.2.5-py311hb335429_6.tar.bz2
ros-humble-osrf-pycommon                           2.0.2         py311hb335429_6      71.2 KiB   conda  ros-humble-osrf-pycommon-2.0.2-py311hb335429_6.tar.bz2
ros-humble-pluginlib                               5.1.0         py311hb335429_6      28 KiB     conda  ros-humble-pluginlib-5.1.0-py311hb335429_6.tar.bz2
ros-humble-pybind11-vendor                         2.4.2         py311hb335429_6      10.4 KiB   conda  ros-humble-pybind11-vendor-2.4.2-py311hb335429_6.tar.bz2
ros-humble-python-cmake-module                     0.10.0        py311hb335429_6      12.7 KiB   conda  ros-humble-python-cmake-module-0.10.0-py311hb335429_6.tar.bz2
ros-humble-rcl                                     5.3.7         py311hb335429_6      143.5 KiB  conda  ros-humble-rcl-5.3.7-py311hb335429_6.tar.bz2
ros-humble-rcl-action                              5.3.7         py311hb335429_6      53.8 KiB   conda  ros-humble-rcl-action-5.3.7-py311hb335429_6.tar.bz2
ros-humble-rcl-interfaces                          1.2.1         py311hb335429_6      333.8 KiB  conda  ros-humble-rcl-interfaces-1.2.1-py311hb335429_6.tar.bz2
ros-humble-rcl-lifecycle                           5.3.7         py311hb335429_6      34 KiB     conda  ros-humble-rcl-lifecycle-5.3.7-py311hb335429_6.tar.bz2
ros-humble-rcl-logging-interface                   2.3.1         py311hb335429_6      18.3 KiB   conda  ros-humble-rcl-logging-interface-2.3.1-py311hb335429_6.tar.bz2
ros-humble-rcl-logging-spdlog                      2.3.1         py311h9883907_6      25.7 KiB   conda  ros-humble-rcl-logging-spdlog-2.3.1-py311h9883907_6.tar.bz2
ros-humble-rcl-yaml-param-parser                   5.3.7         py311hb335429_6      33.9 KiB   conda  ros-humble-rcl-yaml-param-parser-5.3.7-py311hb335429_6.tar.bz2
ros-humble-rclcpp                                  16.0.8        py311hb335429_6      888.9 KiB  conda  ros-humble-rclcpp-16.0.8-py311hb335429_6.tar.bz2
ros-humble-rclcpp-action                           16.0.8        py311hb335429_6      89.5 KiB   conda  ros-humble-rclcpp-action-16.0.8-py311hb335429_6.tar.bz2
ros-humble-rclcpp-components                       16.0.8        py311hb335429_6      111 KiB    conda  ros-humble-rclcpp-components-16.0.8-py311hb335429_6.tar.bz2
ros-humble-rclcpp-lifecycle                        16.0.8        py311hb335429_6      102.7 KiB  conda  ros-humble-rclcpp-lifecycle-16.0.8-py311hb335429_6.tar.bz2
ros-humble-rclpy                                   3.3.11        py311hb335429_6      601.2 KiB  conda  ros-humble-rclpy-3.3.11-py311hb335429_6.tar.bz2
ros-humble-rcpputils                               2.4.1         py311hb335429_6      51.2 KiB   conda  ros-humble-rcpputils-2.4.1-py311hb335429_6.tar.bz2
ros-humble-rcutils                                 5.1.4         py311hb335429_6      94.6 KiB   conda  ros-humble-rcutils-5.1.4-py311hb335429_6.tar.bz2
ros-humble-rmw                                     6.1.1         py311hb335429_6      70.7 KiB   conda  ros-humble-rmw-6.1.1-py311hb335429_6.tar.bz2
ros-humble-rmw-connextdds                          0.11.2        py311hb335429_6      11.1 KiB   conda  ros-humble-rmw-connextdds-0.11.2-py311hb335429_6.tar.bz2
ros-humble-rmw-connextdds-common                   0.11.2        py311hb335429_6      31.3 KiB   conda  ros-humble-rmw-connextdds-common-0.11.2-py311hb335429_6.tar.bz2
ros-humble-rmw-cyclonedds-cpp                      1.3.4         py311hb335429_6      232 KiB    conda  ros-humble-rmw-cyclonedds-cpp-1.3.4-py311hb335429_6.tar.bz2
ros-humble-rmw-dds-common                          1.6.0         py311hb335429_6      135.5 KiB  conda  ros-humble-rmw-dds-common-1.6.0-py311hb335429_6.tar.bz2
ros-humble-rmw-fastrtps-cpp                        6.2.6         py311hb335429_6      126.3 KiB  conda  ros-humble-rmw-fastrtps-cpp-6.2.6-py311hb335429_6.tar.bz2
ros-humble-rmw-fastrtps-dynamic-cpp                6.2.6         py311hb335429_6      163.3 KiB  conda  ros-humble-rmw-fastrtps-dynamic-cpp-6.2.6-py311hb335429_6.tar.bz2
ros-humble-rmw-fastrtps-shared-cpp                 6.2.6         py311hb335429_6      198.2 KiB  conda  ros-humble-rmw-fastrtps-shared-cpp-6.2.6-py311hb335429_6.tar.bz2
ros-humble-rmw-implementation                      2.8.2         py311hb335429_6      31.9 KiB   conda  ros-humble-rmw-implementation-2.8.2-py311hb335429_6.tar.bz2
ros-humble-rmw-implementation-cmake                6.1.1         py311hb335429_6      13.7 KiB   conda  ros-humble-rmw-implementation-cmake-6.1.1-py311hb335429_6.tar.bz2
ros-humble-robot-state-publisher                   3.0.3         py311hb335429_6      250.6 KiB  conda  ros-humble-robot-state-publisher-3.0.3-py311hb335429_6.tar.bz2
ros-humble-ros-base                                0.10.0        py311hb335429_6      12.7 KiB   conda  ros-humble-ros-base-0.10.0-py311hb335429_6.tar.bz2
ros-humble-ros-core                                0.10.0        py311hb335429_6      12.2 KiB   conda  ros-humble-ros-core-0.10.0-py311hb335429_6.tar.bz2
ros-humble-ros-environment                         3.2.2         py311hb335429_6      10.7 KiB   conda  ros-humble-ros-environment-3.2.2-py311hb335429_6.tar.bz2
ros-humble-ros-workspace                           1.0.2         py311hb335429_6      26 KiB     conda  ros-humble-ros-workspace-1.0.2-py311hb335429_6.tar.bz2
ros-humble-ros2action                              0.18.8        py311hb335429_6      27.5 KiB   conda  ros-humble-ros2action-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2bag                                 0.15.9        py311hb335429_6      39.2 KiB   conda  ros-humble-ros2bag-0.15.9-py311hb335429_6.tar.bz2
ros-humble-ros2cli                                 0.18.8        py311hb335429_6      71.3 KiB   conda  ros-humble-ros2cli-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2cli-common-extensions               0.1.1         py311hb335429_6      11.8 KiB   conda  ros-humble-ros2cli-common-extensions-0.1.1-py311hb335429_6.tar.bz2
ros-humble-ros2component                           0.18.8        py311hb335429_6      37 KiB     conda  ros-humble-ros2component-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2doctor                              0.18.8        py311hb335429_6      56.1 KiB   conda  ros-humble-ros2doctor-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2interface                           0.18.8        py311hb335429_6      27.6 KiB   conda  ros-humble-ros2interface-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2launch                              0.19.7        py311hb335429_6      28.5 KiB   conda  ros-humble-ros2launch-0.19.7-py311hb335429_6.tar.bz2
ros-humble-ros2lifecycle                           0.18.8        py311hb335429_6      27.6 KiB   conda  ros-humble-ros2lifecycle-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2multicast                           0.18.8        py311hb335429_6      18 KiB     conda  ros-humble-ros2multicast-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2node                                0.18.8        py311hb335429_6      23.7 KiB   conda  ros-humble-ros2node-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2param                               0.18.8        py311hb335429_6      41.2 KiB   conda  ros-humble-ros2param-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2pkg                                 0.18.8        py311hb335429_6      42.3 KiB   conda  ros-humble-ros2pkg-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2run                                 0.18.8        py311hb335429_6      17.7 KiB   conda  ros-humble-ros2run-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2service                             0.18.8        py311hb335429_6      25.7 KiB   conda  ros-humble-ros2service-0.18.8-py311hb335429_6.tar.bz2
ros-humble-ros2topic                               0.18.8        py311hb335429_6      65.4 KiB   conda  ros-humble-ros2topic-0.18.8-py311hb335429_6.tar.bz2
ros-humble-rosbag2                                 0.15.9        py311hb335429_6      11.7 KiB   conda  ros-humble-rosbag2-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-compression                     0.15.9        py311hb335429_6      167.5 KiB  conda  ros-humble-rosbag2-compression-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-compression-zstd                0.15.9        py311hb335429_6      41.7 KiB   conda  ros-humble-rosbag2-compression-zstd-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-cpp                             0.15.9        py311hb335429_6      269.8 KiB  conda  ros-humble-rosbag2-cpp-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-interfaces                      0.15.9        py311hb335429_6      205 KiB    conda  ros-humble-rosbag2-interfaces-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-py                              0.15.9        py311hb335429_6      526.4 KiB  conda  ros-humble-rosbag2-py-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-storage                         0.15.9        py311hb335429_6      203.7 KiB  conda  ros-humble-rosbag2-storage-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-storage-default-plugins         0.15.9        py311hb335429_6      97.7 KiB   conda  ros-humble-rosbag2-storage-default-plugins-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosbag2-transport                       0.15.9        py311hb335429_6      391.8 KiB  conda  ros-humble-rosbag2-transport-0.15.9-py311hb335429_6.tar.bz2
ros-humble-rosgraph-msgs                           1.2.1         py311hb335429_6      51 KiB     conda  ros-humble-rosgraph-msgs-1.2.1-py311hb335429_6.tar.bz2
ros-humble-rosidl-adapter                          3.1.5         py311hb335429_6      59.8 KiB   conda  ros-humble-rosidl-adapter-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-cli                              3.1.5         py311hb335429_6      35.5 KiB   conda  ros-humble-rosidl-cli-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-cmake                            3.1.5         py311hb335429_6      27.5 KiB   conda  ros-humble-rosidl-cmake-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-default-generators               1.2.0         py311hb335429_6      12.4 KiB   conda  ros-humble-rosidl-default-generators-1.2.0-py311hb335429_6.tar.bz2
ros-humble-rosidl-default-runtime                  1.2.0         py311hb335429_6      11.5 KiB   conda  ros-humble-rosidl-default-runtime-1.2.0-py311hb335429_6.tar.bz2
ros-humble-rosidl-generator-c                      3.1.5         py311hb335429_6      32.5 KiB   conda  ros-humble-rosidl-generator-c-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-generator-cpp                    3.1.5         py311hb335429_6      35.8 KiB   conda  ros-humble-rosidl-generator-cpp-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-generator-py                     0.14.4        py311hb335429_6      45.2 KiB   conda  ros-humble-rosidl-generator-py-0.14.4-py311hb335429_6.tar.bz2
ros-humble-rosidl-parser                           3.1.5         py311hb335429_6      55.3 KiB   conda  ros-humble-rosidl-parser-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-runtime-c                        3.1.5         py311hb335429_6      31.7 KiB   conda  ros-humble-rosidl-runtime-c-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-runtime-cpp                      3.1.5         py311hb335429_6      20 KiB     conda  ros-humble-rosidl-runtime-cpp-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-runtime-py                       0.9.3         py311hb335429_6      36 KiB     conda  ros-humble-rosidl-runtime-py-0.9.3-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-c                    2.0.1         py311hb335429_6      32.1 KiB   conda  ros-humble-rosidl-typesupport-c-2.0.1-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-cpp                  2.0.1         py311hb335429_6      31.1 KiB   conda  ros-humble-rosidl-typesupport-cpp-2.0.1-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-fastrtps-c           2.2.2         py311hb335429_6      31.3 KiB   conda  ros-humble-rosidl-typesupport-fastrtps-c-2.2.2-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-fastrtps-cpp         2.2.2         py311hb335429_6      33.3 KiB   conda  ros-humble-rosidl-typesupport-fastrtps-cpp-2.2.2-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-interface            3.1.5         py311hb335429_6      13 KiB     conda  ros-humble-rosidl-typesupport-interface-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-introspection-c      3.1.5         py311hb335429_6      29.7 KiB   conda  ros-humble-rosidl-typesupport-introspection-c-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-introspection-cpp    3.1.5         py311hb335429_6      29.8 KiB   conda  ros-humble-rosidl-typesupport-introspection-cpp-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rpyutils                                0.2.1         py311hb335429_6      17 KiB     conda  ros-humble-rpyutils-0.2.1-py311hb335429_6.tar.bz2
ros-humble-rti-connext-dds-cmake-module            0.11.2        py311hb335429_6      15.8 KiB   conda  ros-humble-rti-connext-dds-cmake-module-0.11.2-py311hb335429_6.tar.bz2
ros-humble-sensor-msgs                             4.2.3         py311hb335429_6      469.1 KiB  conda  ros-humble-sensor-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-shape-msgs                              4.2.3         py311hb335429_6      102.3 KiB  conda  ros-humble-shape-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-shared-queues-vendor                    0.15.9        py311hb335429_6      51.4 KiB   conda  ros-humble-shared-queues-vendor-0.15.9-py311hb335429_6.tar.bz2
ros-humble-spdlog-vendor                           1.3.1         py311h9883907_6      10.7 KiB   conda  ros-humble-spdlog-vendor-1.3.1-py311h9883907_6.tar.bz2
ros-humble-sqlite3-vendor                          0.15.9        py311he5a647e_6      11.9 KiB   conda  ros-humble-sqlite3-vendor-0.15.9-py311he5a647e_6.tar.bz2
ros-humble-sros2                                   0.10.4        py311hb335429_6      63.7 KiB   conda  ros-humble-sros2-0.10.4-py311hb335429_6.tar.bz2
ros-humble-sros2-cmake                             0.10.4        py311hb335429_6      12.8 KiB   conda  ros-humble-sros2-cmake-0.10.4-py311hb335429_6.tar.bz2
ros-humble-statistics-msgs                         1.2.1         py311hb335429_6      86.9 KiB   conda  ros-humble-statistics-msgs-1.2.1-py311hb335429_6.tar.bz2
ros-humble-std-msgs                                4.2.3         py311hb335429_6      300.8 KiB  conda  ros-humble-std-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-std-srvs                                4.2.3         py311hb335429_6      93.6 KiB   conda  ros-humble-std-srvs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-stereo-msgs                             4.2.3         py311hb335429_6      60.7 KiB   conda  ros-humble-stereo-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-tf2                                     0.25.5        py311hb303436_6      104 KiB    conda  ros-humble-tf2-0.25.5-py311hb303436_6.tar.bz2
ros-humble-tf2-bullet                              0.25.5        py311hb335429_6      16 KiB     conda  ros-humble-tf2-bullet-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-eigen                               0.25.5        py311hb335429_6      18.6 KiB   conda  ros-humble-tf2-eigen-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-eigen-kdl                           0.25.5        py311hb335429_6      20.5 KiB   conda  ros-humble-tf2-eigen-kdl-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-geometry-msgs                       0.25.5        py311hb335429_6      32.3 KiB   conda  ros-humble-tf2-geometry-msgs-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-kdl                                 0.25.5        py311hb335429_6      21.7 KiB   conda  ros-humble-tf2-kdl-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-msgs                                0.25.5        py311hb335429_6      163.5 KiB  conda  ros-humble-tf2-msgs-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-py                                  0.25.5        py311hb335429_6      35.7 KiB   conda  ros-humble-tf2-py-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-ros                                 0.25.5        py311hb335429_6      488.6 KiB  conda  ros-humble-tf2-ros-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-ros-py                              0.25.5        py311hb335429_6      38 KiB     conda  ros-humble-tf2-ros-py-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-sensor-msgs                         0.25.5        py311hb335429_6      15.4 KiB   conda  ros-humble-tf2-sensor-msgs-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tf2-tools                               0.25.5        py311hb335429_6      16.8 KiB   conda  ros-humble-tf2-tools-0.25.5-py311hb335429_6.tar.bz2
ros-humble-tinyxml-vendor                          0.8.3         py311hb335429_6      11.7 KiB   conda  ros-humble-tinyxml-vendor-0.8.3-py311hb335429_6.tar.bz2
ros-humble-tinyxml2-vendor                         0.7.6         py311hfc76a15_6      11.8 KiB   conda  ros-humble-tinyxml2-vendor-0.7.6-py311hfc76a15_6.tar.bz2
ros-humble-tracetools                              4.1.1         py311hb335429_6      23.8 KiB   conda  ros-humble-tracetools-4.1.1-py311hb335429_6.tar.bz2
ros-humble-trajectory-msgs                         4.2.3         py311hb335429_6      123.7 KiB  conda  ros-humble-trajectory-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-uncrustify-vendor                       2.0.2         py311hb335429_6      10.5 KiB   conda  ros-humble-uncrustify-vendor-2.0.2-py311hb335429_6.tar.bz2
ros-humble-unique-identifier-msgs                  2.2.1         py311hb335429_6      53.7 KiB   conda  ros-humble-unique-identifier-msgs-2.2.1-py311hb335429_6.tar.bz2
ros-humble-urdf                                    2.6.0         py311hb335429_6      124.7 KiB  conda  ros-humble-urdf-2.6.0-py311hb335429_6.tar.bz2
ros-humble-urdf-parser-plugin                      2.6.0         py311hb335429_6      14.3 KiB   conda  ros-humble-urdf-parser-plugin-2.6.0-py311hb335429_6.tar.bz2
ros-humble-urdfdom                                 3.0.2         py311hb303436_6      141.1 KiB  conda  ros-humble-urdfdom-3.0.2-py311hb303436_6.tar.bz2
ros-humble-urdfdom-headers                         1.0.6         py311hb335429_6      19.9 KiB   conda  ros-humble-urdfdom-headers-1.0.6-py311hb335429_6.tar.bz2
ros-humble-visualization-msgs                      4.2.3         py311hb335429_6      295.8 KiB  conda  ros-humble-visualization-msgs-4.2.3-py311hb335429_6.tar.bz2
ros-humble-yaml-cpp-vendor                         8.0.2         py311hb335429_6      10.6 KiB   conda  ros-humble-yaml-cpp-vendor-8.0.2-py311hb335429_6.tar.bz2
ros-humble-zstd-vendor                             0.15.9        py311hefdfea7_6      11.2 KiB   conda  ros-humble-zstd-vendor-0.15.9-py311hefdfea7_6.tar.bz2
ros2-distro-mutex                                  0.5.0         humble               3.6 KiB    conda  ros2-distro-mutex-0.5.0-humble.tar.bz2
rosdistro                                          0.9.0         py311h38be061_1      115.1 KiB  conda  rosdistro-0.9.0-py311h38be061_1.conda
rospkg                                             1.5.1         pyhd8ed1ab_0         30.6 KiB   conda  rospkg-1.5.1-pyhd8ed1ab_0.conda
ruamel_yaml                                        0.18.6                                        pypi   https://files.pythonhosted.org/packages/73/67/8ece580cc363331d9a53055130f86b096bf16e38156e33b1d3014fffda6b/ruamel.yaml-0.18.6-py3-none-any.whl
ruamel_yaml_clib                                   0.2.8                                         pypi   https://files.pythonhosted.org/packages/a4/f7/22d6b620ed895a05d40802d8281eff924dc6190f682d933d4efff60db3b5/ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl
ruff                                               0.5.2                                         pypi   https://files.pythonhosted.org/packages/ec/60/e2a9ae058b34128caa5f863f268e1c9bd083793264f4bf7e8e469be651f9/ruff-0.5.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
setuptools                                         70.3.0        pyhd8ed1ab_0         484.8 KiB  conda  setuptools-70.3.0-pyhd8ed1ab_0.conda
six                                                1.16.0        pyh6c4a22f_0         13.9 KiB   conda  six-1.16.0-pyh6c4a22f_0.tar.bz2
snowballstemmer                                    2.2.0         pyhd8ed1ab_0         57.4 KiB   conda  snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2
spdlog                                             1.12.0        hd2e6256_2           183.5 KiB  conda  spdlog-1.12.0-hd2e6256_2.conda
sqlite                                             3.46.0        h6d4b2fc_0           840.2 KiB  conda  sqlite-3.46.0-h6d4b2fc_0.conda
tinyxml                                            2.6.2         h4bd325d_2           55.2 KiB   conda  tinyxml-2.6.2-h4bd325d_2.tar.bz2
tinyxml2                                           10.0.0        h59595ed_0           117.8 KiB  conda  tinyxml2-10.0.0-h59595ed_0.conda
tk                                                 8.6.13        noxft_h4845f30_101   3.2 MiB    conda  tk-8.6.13-noxft_h4845f30_101.conda
toml                                               0.10.2        pyhd8ed1ab_0         18 KiB     conda  toml-0.10.2-pyhd8ed1ab_0.tar.bz2
tomli                                              2.0.1         pyhd8ed1ab_0         15.6 KiB   conda  tomli-2.0.1-pyhd8ed1ab_0.tar.bz2
typeguard                                          4.3.0                                         pypi   https://files.pythonhosted.org/packages/eb/de/be0ba39ee73760bf33329b7c6f95bc67e96593c69c881671e312538e24bb/typeguard-4.3.0-py3-none-any.whl
typing_extensions                                  4.12.2                                        pypi   https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl
tzdata                                             2024a         h0c530f3_0           117 KiB    conda  tzdata-2024a-h0c530f3_0.conda
uncrustify                                         0.74.0        h27087fc_0           729.4 KiB  conda  uncrustify-0.74.0-h27087fc_0.tar.bz2
urdf_parser_py                                     0.0.4                                         pypi   https://files.pythonhosted.org/packages/a3/8b/9dd44781a4e87746a426c56c3368c3da64fd90a130f582340cbf74397f8e/urdf_parser_py-0.0.4.tar.gz
virtualenv                                         20.26.3                                       pypi   https://files.pythonhosted.org/packages/07/4d/410156100224c5e2f0011d435e477b57aed9576fc7fe137abcf14ec16e11/virtualenv-20.26.3-py3-none-any.whl
wayland                                            1.23.0        h5291e77_0           315.3 KiB  conda  wayland-1.23.0-h5291e77_0.conda
wheel                                              0.43.0        pyhd8ed1ab_1         56.6 KiB   conda  wheel-0.43.0-pyhd8ed1ab_1.conda
xkeyboard-config                                   2.42          h4ab18f5_0           379.9 KiB  conda  xkeyboard-config-2.42-h4ab18f5_0.conda
xorg-kbproto                                       1.0.7         h7f98852_1002        26.7 KiB   conda  xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2
xorg-libice                                        1.1.1         hd590300_0           57.1 KiB   conda  xorg-libice-1.1.1-hd590300_0.conda
xorg-libsm                                         1.2.4         h7391055_0           26.8 KiB   conda  xorg-libsm-1.2.4-h7391055_0.conda
xorg-libx11                                        1.8.9         h8ee46fc_0           808.7 KiB  conda  xorg-libx11-1.8.9-h8ee46fc_0.conda
xorg-libxau                                        1.0.11        hd590300_0           14.1 KiB   conda  xorg-libxau-1.0.11-hd590300_0.conda
xorg-libxdmcp                                      1.1.3         h7f98852_0           18.7 KiB   conda  xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2
xorg-libxext                                       1.3.4         h0b41bf4_2           49 KiB     conda  xorg-libxext-1.3.4-h0b41bf4_2.conda
xorg-libxinerama                                   1.1.5         h27087fc_0           13 KiB     conda  xorg-libxinerama-1.1.5-h27087fc_0.tar.bz2
xorg-libxrender                                    0.9.11        hd590300_0           36.9 KiB   conda  xorg-libxrender-0.9.11-hd590300_0.conda
xorg-renderproto                                   0.11.1        h7f98852_1002        9.4 KiB    conda  xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2
xorg-xextproto                                     7.3.0         h0b41bf4_1003        29.6 KiB   conda  xorg-xextproto-7.3.0-h0b41bf4_1003.conda
xorg-xproto                                        7.0.31        h7f98852_1007        73.2 KiB   conda  xorg-xproto-7.0.31-h7f98852_1007.tar.bz2
xz                                                 5.2.6         h166bdaf_0           408.6 KiB  conda  xz-5.2.6-h166bdaf_0.tar.bz2
yaml                                               0.2.5         h7f98852_2           87.1 KiB   conda  yaml-0.2.5-h7f98852_2.tar.bz2
yaml-cpp                                           0.8.0         h59595ed_0           200.1 KiB  conda  yaml-cpp-0.8.0-h59595ed_0.conda
zipp                                               3.19.2        pyhd8ed1ab_0         20.4 KiB   conda  zipp-3.19.2-pyhd8ed1ab_0.conda
zlib                                               1.2.13        h4ab18f5_6           90.7 KiB   conda  zlib-1.2.13-h4ab18f5_6.conda
zstd                                               1.5.6         ha6fb4c9_0           541.8 KiB  conda  zstd-1.5.6-ha6fb4c9_0.conda
ruben-arts commented 1 month ago

Pinging @wolfv and @traversaro in hopes of some expertise :smiley:

traversaro commented 1 month ago

Thanks for the detailed report. I guess there is some package that is generating non-relocatable files, and conda/pixi binary relocation is not working as expected, either due to a problem in boa/conda-build when the package is generated, or on conda/pixi side when the package is installed.

I will try to replicate locally to provide more insight.

traversaro commented 1 month ago

I will try to replicate locally to provide more insight.

I tried to replicate the error (without the docker layer to avoid the exposed surface) as in the following:

git clone https://github.com/Caltech-AMBER/obelisk
cd obelisk
git checkout 46f503cf2ba7068b2b576e5540eb3ab17cea7f10
export OBELISK_ROOT=`pwd`
pixi shell -e dev
pixi run messages-build
pixi run source-obelisk
source fun.sh

where fun.sh contains:

# convenience aliases for lifecycle commands
function obk-lifecycle {
    if [[ -z "$1" || -z "$2" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-lifecycle <node> <state>\033[0m"
        return 1
    fi
    ros2 lifecycle set "$1" "$2"
}

function obk-configure {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-configure <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" configure
}

function obk-activate {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-activate <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" activate
}

function obk-deactivate {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-deactivate <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" deactivate
}

function obk-cleanup {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-cleanup <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" cleanup
}

function obk-shutdown {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-shutdown <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" shutdown
}

function obk-start {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-start <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" configure
}

function obk-stop {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-stop <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" deactivate
    obk-lifecycle "$1" cleanup
}

function obk-kill {
    if [[ -z "$1" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-kill <config_name>\033[0m"
        return 1
    fi
    obk-lifecycle "$1" shutdown
}

# convenience function for ros2 launch command
function obk-launch {
    local config_file_path=""
    local device_name=""
    local auto_start="True"
    local bag="True"

    while [[ $# -gt 0 ]]; do
        key="$1"
        case $key in
            config_file_path=*)
            config_file_path="${key#*=}"
            shift
            ;;
            device_name=*)
            device_name="${key#*=}"
            shift
            ;;
            auto_start=*)
            auto_start="${key#*=}"
            shift
            ;;
            bag=*)
            bag="${key#*=}"
            shift
            ;;
            *)
            echo "Unknown option $key"
            return 1
            ;;
        esac
    done

    # Check if any of the required arguments are empty
    if [[ -z "$config_file_path" || -z "$device_name" ]]; then
        echo -e "\033[1;34mError: Missing required arguments.\033[0m"
        echo -e "\033[1;34mUsage: obk-launch config_file_path=<path> device_name=<name> auto_start=<True|False>\033[0m"
        return 1
    fi

    ros2 launch obelisk_ros obelisk_bringup.launch.py config_file_path:=${config_file_path} device_name:=${device_name} auto_start:=${auto_start} bag:=${bag}
}

and the command obk-launch config_file_path=dummy_cpp.yaml device_name=onboard works with any error:

(obelisk:dev) traversaro@IITBMP014LW012:~/src/obelisk$ obk-launch config_file_path=dummy_cpp.yaml device_name=onboard
[INFO] [launch]: All log files can be found below /home/traversaro/.ros/log/2024-07-19-13-47-58-351991-IITBMP014LW012-128365
[INFO] [launch]: Default logging verbosity is set to INFO
[INFO] [1721389678.445505787] [obelisk_bringup]: Bringing up the Obelisk nodes on device onboard...
[INFO] [1721389678.446267661] [obelisk_bringup]: Logging directory set to /home/traversaro/src/obelisk/obk_logs/dummy_20240719_134758
[INFO] [ros2-1]: process started with pid [128377]
[INFO] [global_state-2]: process started with pid [128379]
[INFO] [example_position_setpoint_controller-3]: process started with pid [128381]
[INFO] [jointencoders_passthrough_estimator-4]: process started with pid [128383]
[INFO] [obelisk_mujoco_robot-5]: process started with pid [128385]
[example_position_setpoint_controller-3] [INFO] [1721389678.506150084] [obelisk_control_0]: position_setpoint_controller created.
[obelisk_mujoco_robot-5] [INFO] [1721389678.510027860] [obelisk_robot_0]: mujoco_sim created.
[jointencoders_passthrough_estimator-4] [INFO] [1721389678.510874102] [obelisk_estimation_0]: passthrough_estimator created.
[ros2-1] stdin is not a terminal device. Keyboard handling disabled.[INFO] [1721389678.611208462] [rosbag2_recorder]: Press SPACE for pausing/resuming
[ros2-1] [INFO] [1721389678.617097626] [rosbag2_storage]: Opened database '/home/traversaro/src/obelisk/obk_logs/dummy_20240719_134758/obk_stack_bag/obk_stack_bag_0.db3' for READ_WRITE.
[ros2-1] [INFO] [1721389678.618158961] [rosbag2_recorder]: Listening for topics...
[ros2-1] [INFO] [1721389678.618227534] [rosbag2_recorder]: Event publisher thread: Starting
[ros2-1] [INFO] [1721389678.619552301] [rosbag2_recorder]: Subscribed to topic '/rosout'
[ros2-1] [INFO] [1721389678.620203279] [rosbag2_recorder]: Subscribed to topic '/parameter_events'
[ros2-1] [INFO] [1721389678.620683118] [rosbag2_recorder]: Subscribed to topic '/obelisk_robot_0/transition_event'
[ros2-1] [INFO] [1721389678.621018608] [rosbag2_recorder]: Subscribed to topic '/obelisk_control_0/transition_event'
[ros2-1] [INFO] [1721389678.621335630] [rosbag2_recorder]: Subscribed to topic '/obelisk_estimation_0/transition_event'
[ros2-1] [INFO] [1721389678.621673117] [rosbag2_recorder]: Subscribed to topic '/events/write_split'
[ros2-1] [INFO] [1721389678.622038396] [rosbag2_recorder]: Recording...
[ros2-1] [INFO] [1721389678.622673361] [rosbag2_recorder]: Subscribed to topic '/dummy/transition_event'
[obelisk_mujoco_robot-5] [WARN] [1721389678.745433183] [obelisk_robot_0]: Registered publisher was not provided a config string! Skipping creation.
[obelisk_mujoco_robot-5] [WARN] [1721389678.745964320] [obelisk_robot_0]: Registered timer was not provided a config string! Skipping creation.
[obelisk_mujoco_robot-5] [INFO] [1721389678.746006540] [obelisk_robot_0]: obelisk_robot_0 configured.
[obelisk_mujoco_robot-5] [INFO] [1721389678.746089603] [obelisk_robot_0]: Simulation thread started.
[jointencoders_passthrough_estimator-4] [INFO] [1721389678.747547581] [obelisk_estimation_0]: obelisk_estimation_0 configured.
[obelisk_mujoco_robot-5] [INFO] [1721389678.748395048] [obelisk_robot_0]: Setting up Mujoco visualization.
[example_position_setpoint_controller-3] [INFO] [1721389678.751133250] [obelisk_control_0]: obelisk_control_0 configured.
[jointencoders_passthrough_estimator-4] [INFO] [1721389678.755367964] [obelisk_estimation_0]: obelisk_estimation_0 activated.
[example_position_setpoint_controller-3] [INFO] [1721389678.755524794] [obelisk_control_0]: obelisk_control_0 activated.
[ros2-1] [INFO] [1721389678.824586478] [rosbag2_recorder]: Subscribed to topic '/obelisk/dummy/ctrl'
[ros2-1] [INFO] [1721389678.825261112] [rosbag2_recorder]: Subscribed to topic '/obelisk/dummy/est'
[obelisk_mujoco_robot-5] WARNING: dzn is not a conformant Vulkan implementation, testing use only.
[obelisk_mujoco_robot-5] WARNING: dzn is not a conformant Vulkan implementation, testing use only.
[obelisk_mujoco_robot-5] WARNING: Some incorrect rendering might occur because the selected Vulkan device (Microsoft Direct3D12 (NVIDIA GeForce RTX 4050 Laptop GPU)) doesn't support base Zink requirements: feats.features.logicOp have_EXT_custom_border_color have_EXT_line_rasterization
[obelisk_mujoco_robot-5] libEGL warning: egl: failed to create dri2 screen
[obelisk_mujoco_robot-5] [INFO] [1721389682.573071904] [obelisk_robot_0]: Starting Mujoco simulation loop.
[obelisk_mujoco_robot-5] [INFO] [1721389682.575883012] [obelisk_robot_0]: Timer callback created
[obelisk_mujoco_robot-5] [INFO] [1721389682.576449340] [obelisk_robot_0]: obelisk_robot_0 activated.
[ros2-1] [INFO] [1721389682.645800196] [rosbag2_recorder]: Subscribed to topic '/obelisk/dummy/sensor'

without any runtime error, pixi info:

(obelisk:dev) traversaro@IITBMP014LW012:~/src/obelisk$ pixi info
 WARN pixi::project::manifest::validation: The feature 'cuda118' is defined but not used in any environment
      Pixi version: 0.23.0
          Platform: linux-64
  Virtual packages: __unix=0=0
                  : __linux=5.15.153.1=0
                  : __glibc=2.35=0
                  : __cuda=12.3=0
                  : __archspec=1=skylake
         Cache dir: /home/traversaro/.cache/rattler/cache
      Auth storage: /home/traversaro/.rattler/credentials.json

Project
------------
              Name: obelisk
     Manifest file: /home/traversaro/src/obelisk/pixi.toml
  Config locations:
      Last updated: 19-07-2024 12:16:04

Environments
------------
       Environment: default
          Features: default
       Solve group: default
          Channels: conda-forge
  Dependency count: 3
      Dependencies: python, pip, setuptools
 PyPI Dependencies: matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: messages-build, source-obelisk, cmake, all-tests, cpp-test-node, cpp-test-viz, cpp-build, ros-build, cpp-build-debug, cpp-test-node-debug, cpp-ctest

       Environment: obelisk
          Features: obelisk, default
          Channels: conda-forge
  Dependency count: 3
      Dependencies: python, pip, setuptools
 PyPI Dependencies: mujoco, ruamel.yaml, urdf_parser_py, matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: source-obelisk, cpp-ctest, messages-build, cpp-test-viz, all-tests, ros-build, cmake, cpp-build-debug, cpp-test-node-debug, cpp-test-node, cpp-build

       Environment: test
          Features: cuda121, obelisk, ros2base, test, default
       Solve group: dev
          Channels: nvidia, nvidia/label/cuda-12.1.0, conda-forge, robostack-staging
  Dependency count: 7
      Dependencies: cuda, ros-humble-ros-base, colcon-common-extensions, pytest, python, pip, setuptools
 PyPI Dependencies: mujoco, ruamel.yaml, urdf_parser_py, pytest-xdist, typeguard, dynamixel-sdk, matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: cpp-test-node-debug, cmake, messages-build, cpp-test-viz, cpp-ctest, cpp-test-node, source-obelisk, all-tests, ros-build, cpp-build-debug, cpp-build

       Environment: ros2-install
          Features: ros2base, default
          Channels: robostack-staging, conda-forge
  Dependency count: 5
      Dependencies: ros-humble-ros-base, colcon-common-extensions, python, pip, setuptools
 PyPI Dependencies: matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: ros-build, cpp-test-node-debug, cpp-build-debug, cpp-build, source-obelisk, all-tests, messages-build, cpp-test-viz, cpp-ctest, cpp-test-node, cmake

       Environment: dev-no-gpu
          Features: obelisk, ros2base, test, dev, build, default
          Channels: conda-forge, robostack-staging
  Dependency count: 10
      Dependencies: ros-humble-ros-base, colcon-common-extensions, pytest, cmake, ninja, make, glfw, python, pip, setuptools
 PyPI Dependencies: mujoco, ruamel.yaml, urdf_parser_py, pytest-xdist, typeguard, dynamixel-sdk, pre-commit, ruff, pyright, matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: all-tests, source-obelisk, cpp-test-node, cpp-build-debug, cpp-test-node-debug, messages-build, cpp-build, cpp-test-viz, ros-build, cmake, cpp-ctest

       Environment: dev
          Features: cuda121, obelisk, ros2base, test, dev, build, default
       Solve group: dev
          Channels: nvidia, nvidia/label/cuda-12.1.0, conda-forge, robostack-staging
  Dependency count: 11
      Dependencies: cuda, ros-humble-ros-base, colcon-common-extensions, pytest, cmake, ninja, make, glfw, python, pip, setuptools
 PyPI Dependencies: mujoco, ruamel.yaml, urdf_parser_py, pytest-xdist, typeguard, dynamixel-sdk, pre-commit, ruff, pyright, matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: cpp-test-viz, all-tests, cpp-build-debug, cpp-test-node, source-obelisk, cpp-test-node-debug, cpp-ctest, cmake, ros-build, messages-build, cpp-build

       Environment: docs
          Features: docs, default
          Channels: conda-forge
  Dependency count: 3
      Dependencies: python, pip, setuptools
 PyPI Dependencies: myst-parser, sphinx, sphinx-rtd-theme, sphinx-tabs, matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: cpp-test-node-debug, ros-build, messages-build, cmake, cpp-test-node, cpp-build, all-tests, cpp-ctest, cpp-test-viz, source-obelisk, cpp-build-debug

       Environment: build
          Features: cuda121, build, default
          Channels: nvidia, nvidia/label/cuda-12.1.0, conda-forge
  Dependency count: 8
      Dependencies: cuda, cmake, ninja, make, glfw, python, pip, setuptools
 PyPI Dependencies: matplotlib, numpy, obelisk_py
  Target platforms: linux-64
             Tasks: all-tests, cpp-ctest, cpp-build, cpp-test-viz, cpp-test-node, cpp-test-node-debug, source-obelisk, cpp-build-debug, messages-build, ros-build, cmake

Probably there is something in the docker image that is causing the error to appear, could you try to make a more minimal reproducible example?

alberthli commented 1 month ago

Hi @traversaro - apologies about the messiness of our setup scripts, and thank you for still investigating the issue. We don't believe the issue is with docker. When running the following commands on my local filesystem (the same as you), I still get the originally-reported type support error. Commands:

git clone https://github.com/Caltech-AMBER/obelisk
cd obelisk
git checkout 46f503cf2ba7068b2b576e5540eb3ab17cea7f10
export OBELISK_ROOT=`pwd`
pixi shell -e dev
pixi run messages-build
pixi run source-obelisk
ros2 launch obelisk_ros obelisk_bringup.launch.py config_file_path:=dummy_cpp.yaml device_name:=onboard auto_start:=true bag:=false

Minimum Example

We've set up a minimum example in the following repo that might be helpful (commit hash 067d9fa5e8b92b13f52d25abc33bf80358850f54): https://github.com/Caltech-AMBER/ros_mwes/tree/rosidl-errors.

Tl;dr: Running our example produces the error

error while loading shared libraries: librosidl_typesupport_cpp.so: cannot open shared object file: No such file or directory

This is not exactly the same as the originally-reported error, but might still provide insight. The README on the rosidl-errors branch contains a report of everything we've found so far, but for convenience, I will summarize here.

In this minimum working example, we define 3 packages:

  1. test_a_msgs, which contains a simple definition of a trivial message TestA that only has a std_msgs/Header field.
  2. test_b_msgs, which contains a message TestB with a TestA field in it, so this package should depend on test_a_msgs. This simulates the setup in our project, which has one custom message depend on another.
  3. test_pkg, which spins a trivial node with a timer that publishes a message of TestB type.

We reproduce in Docker. You can either choose to repro by mounting the repo root or by adding the pixi.toml and test workspace to the image at build time. The main advantage to mounting is that caches persist, so you don't have to, e.g., recreate the pixi environment from scratch each time you use the container. The advantage to adding the files is that there is no info shared between the container and your local filesystem.

# mounts the repo root at the /repro directory
docker compose -f docker-compose-simple.yml run --build test

# no mounting - just adds the necessary files
docker compose -f docker-compose-simple-nomount.yml run --build test

Either way, within the container, run

# activate pixi shell
pixi shell

# within pixi shell, run these commands
cd test_ws
rm -rf build install
colcon build --symlink-install --packages-select test_a_msgs test_b_msgs --parallel-workers $(nproc)
source install/setup.bash
colcon build --symlink-install --parallel-workers $(nproc)
source install/setup.bash
ros2 run test_pkg test_node

This will raise the error

/repro/test_ws/install/test_pkg/lib/test_pkg/test_node: error while loading shared libraries: librosidl_typesupport_cpp.so: cannot open shared object file: No such file or directory

Upon running pixi list, we see that rosidl_typesupport_cpp is installed (rosidl-related deps shown here):

ros-humble-rosidl-adapter                          3.1.5         py311hb335429_6      59.8 KiB   conda  ros-humble-rosidl-adapter-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-cli                              3.1.5         py311hb335429_6      35.5 KiB   conda  ros-humble-rosidl-cli-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-cmake                            3.1.5         py311hb335429_6      27.5 KiB   conda  ros-humble-rosidl-cmake-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-default-generators               1.2.0         py311hb335429_6      12.4 KiB   conda  ros-humble-rosidl-default-generators-1.2.0-py311hb335429_6.tar.bz2
ros-humble-rosidl-default-runtime                  1.2.0         py311hb335429_6      11.5 KiB   conda  ros-humble-rosidl-default-runtime-1.2.0-py311hb335429_6.tar.bz2
ros-humble-rosidl-generator-c                      3.1.5         py311hb335429_6      32.5 KiB   conda  ros-humble-rosidl-generator-c-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-generator-cpp                    3.1.5         py311hb335429_6      35.8 KiB   conda  ros-humble-rosidl-generator-cpp-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-generator-py                     0.14.4        py311hb335429_6      45.2 KiB   conda  ros-humble-rosidl-generator-py-0.14.4-py311hb335429_6.tar.bz2
ros-humble-rosidl-parser                           3.1.5         py311hb335429_6      55.3 KiB   conda  ros-humble-rosidl-parser-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-runtime-c                        3.1.5         py311hb335429_6      31.7 KiB   conda  ros-humble-rosidl-runtime-c-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-runtime-cpp                      3.1.5         py311hb335429_6      20 KiB     conda  ros-humble-rosidl-runtime-cpp-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-runtime-py                       0.9.3         py311hb335429_6      36 KiB     conda  ros-humble-rosidl-runtime-py-0.9.3-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-c                    2.0.1         py311hb335429_6      32.1 KiB   conda  ros-humble-rosidl-typesupport-c-2.0.1-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-cpp                  2.0.1         py311hb335429_6      31.1 KiB   conda  ros-humble-rosidl-typesupport-cpp-2.0.1-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-fastrtps-c           2.2.2         py311hb335429_6      31.3 KiB   conda  ros-humble-rosidl-typesupport-fastrtps-c-2.2.2-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-fastrtps-cpp         2.2.2         py311hb335429_6      33.3 KiB   conda  ros-humble-rosidl-typesupport-fastrtps-cpp-2.2.2-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-interface            3.1.5         py311hb335429_6      13 KiB     conda  ros-humble-rosidl-typesupport-interface-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-introspection-c      3.1.5         py311hb335429_6      29.7 KiB   conda  ros-humble-rosidl-typesupport-introspection-c-3.1.5-py311hb335429_6.tar.bz2
ros-humble-rosidl-typesupport-introspection-cpp    3.1.5         py311hb335429_6      29.8 KiB   conda  ros-humble-rosidl-typesupport-introspection-cpp-3.1.5-py311hb335429_6.tar.bz2

Further, by running grep -Rnw librosidl_typesupport_cpp.so after all this, we recover the following output:

(test) root@89a237835046:/repro/test_ws# grep -Rnw librosidl_typesupport_cpp.so
grep: install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_cpp.so: binary file matches
grep: install/test_b_msgs/lib/libtest_b_msgs__rosidl_typesupport_cpp.so: binary file matches
build/test_pkg/CMakeFiles/test_node.dir/link.txt:1:/usr/bin/c++     CMakeFiles/test_node.dir/src/test_node.cpp.o  -o test_node  -Wl,-rpath,/repro/.pixi/envs/default/lib:/repro/test_ws/install/test_b_msgs/lib:/repro/test_ws/install/test_a_msgs/lib /repro/.pixi/envs/default/lib/librclcpp.so -lpthread /repro/.pixi/envs/default/lib/liblibstatistics_collector.so /repro/.pixi/envs/default/lib/librcl.so /repro/.pixi/envs/default/lib/librmw_implementation.so /repro/.pixi/envs/default/lib/libament_index_cpp.so /repro/.pixi/envs/default/lib/librcl_logging_spdlog.so /repro/.pixi/envs/default/lib/librcl_logging_interface.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_typesupport_fastrtps_c.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_typesupport_introspection_c.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_typesupport_fastrtps_cpp.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_typesupport_introspection_cpp.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_generator_py.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_typesupport_c.so /repro/.pixi/envs/default/lib/librcl_interfaces__rosidl_generator_c.so /repro/.pixi/envs/default/lib/librcl_yaml_param_parser.so -lyaml /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_c.so /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_typesupport_fastrtps_cpp.so /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_typesupport_introspection_c.so /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_typesupport_introspection_cpp.so /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_generator_py.so /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_typesupport_c.so /repro/.pixi/envs/default/lib/librosgraph_msgs__rosidl_generator_c.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_c.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_typesupport_fastrtps_cpp.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_typesupport_introspection_c.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_typesupport_introspection_cpp.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_generator_py.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_typesupport_c.so /repro/.pixi/envs/default/lib/libstatistics_msgs__rosidl_generator_c.so /repro/.pixi/envs/default/lib/libtracetools.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_typesupport_fastrtps_c.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_fastrtps_c.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_fastrtps_c.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_c.so /repro/.pixi/envs/default/lib/librosidl_typesupport_fastrtps_c.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_typesupport_introspection_c.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_introspection_c.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_introspection_c.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_introspection_c.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_typesupport_fastrtps_cpp.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_fastrtps_cpp.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_fastrtps_cpp.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_fastrtps_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_fastrtps_cpp.so /repro/.pixi/envs/default/lib/libfastcdr.so.1.0.24 /repro/.pixi/envs/default/lib/librmw.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_typesupport_introspection_cpp.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_introspection_cpp.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_introspection_cpp.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_introspection_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_introspection_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_introspection_c.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_typesupport_cpp.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_cpp.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_generator_py.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_generator_py.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_typesupport_c.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_c.so /repro/test_ws/install/test_b_msgs/lib/libtest_b_msgs__rosidl_generator_c.so /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_generator_c.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_generator_py.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_generator_py.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_c.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_c.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_generator_c.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_generator_c.so /repro/.pixi/envs/default/lib/librosidl_typesupport_c.so /repro/.pixi/envs/default/lib/librcpputils.so /repro/.pixi/envs/default/lib/librosidl_runtime_c.so /repro/.pixi/envs/default/lib/librcutils.so -ldl -lrt -Wl,-rpath-link,/repro/.pixi/envs/default/lib 
build/test_pkg/CMakeFiles/test_node.dir/build.make:141:test_node: /repro/.pixi/envs/default/lib/librosidl_typesupport_cpp.so
build/test_a_msgs/CMakeFiles/test_a_msgs__rosidl_typesupport_cpp.dir/link.txt:1:/usr/bin/c++ -fPIC   -shared -Wl,-soname,libtest_a_msgs__rosidl_typesupport_cpp.so -o libtest_a_msgs__rosidl_typesupport_cpp.so CMakeFiles/test_a_msgs__rosidl_typesupport_cpp.dir/rosidl_typesupport_cpp/test_a_msgs/msg/test_a__type_support.cpp.o  -Wl,-rpath,/repro/.pixi/envs/default/lib: /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_c.so /repro/.pixi/envs/default/lib/librosidl_runtime_c.so /repro/.pixi/envs/default/lib/librcutils.so -ldl -lrt -Wl,-rpath-link,/repro/.pixi/envs/default/lib 
build/test_a_msgs/CMakeFiles/test_a_msgs__rosidl_typesupport_cpp.dir/build.make:126:libtest_a_msgs__rosidl_typesupport_cpp.so: /repro/.pixi/envs/default/lib/librosidl_typesupport_cpp.so
grep: build/test_a_msgs/libtest_a_msgs__rosidl_typesupport_cpp.so: binary file matches
build/test_b_msgs/CMakeFiles/test_b_msgs__rosidl_typesupport_cpp.dir/link.txt:1:/usr/bin/c++ -fPIC   -shared -Wl,-soname,libtest_b_msgs__rosidl_typesupport_cpp.so -o libtest_b_msgs__rosidl_typesupport_cpp.so CMakeFiles/test_b_msgs__rosidl_typesupport_cpp.dir/rosidl_typesupport_cpp/test_b_msgs/msg/test_b__type_support.cpp.o  -Wl,-rpath,/repro/test_ws/install/test_a_msgs/lib:/repro/.pixi/envs/default/lib: /repro/test_ws/install/test_a_msgs/lib/libtest_a_msgs__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/libstd_msgs__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/libbuiltin_interfaces__rosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_cpp.so /repro/.pixi/envs/default/lib/librosidl_typesupport_c.so /repro/.pixi/envs/default/lib/librosidl_runtime_c.so /repro/.pixi/envs/default/lib/librcutils.so -ldl -lrt -Wl,-rpath-link,/repro/.pixi/envs/default/lib 
build/test_b_msgs/CMakeFiles/test_b_msgs__rosidl_typesupport_cpp.dir/build.make:128:libtest_b_msgs__rosidl_typesupport_cpp.so: /repro/.pixi/envs/default/lib/librosidl_typesupport_cpp.so
grep: build/test_b_msgs/libtest_b_msgs__rosidl_typesupport_cpp.so: binary file matches

In particular, we see that it tries to use the .so file located at

/repro/.pixi/envs/default/lib/librosidl_typesupport_cpp.so

By tab completing, we find that this directory contains the following files:

(test) root@4926310b49cb:/repro/test_ws# ls /repro/.pixi/envs/default/lib/librosidl_
librosidl_runtime_c.so                      librosidl_typesupport_cpp.so                librosidl_typesupport_fastrtps_cpp.so       librosidl_typesupport_introspection_cpp.so
librosidl_typesupport_c.so                  librosidl_typesupport_fastrtps_c.so         librosidl_typesupport_introspection_c.so

So, the .so file exists, CMake is being told where, but we still get an error.

Minimum Example Without Pixi

We now run the same example but without using pixi. When we do this, there is no error!

We install all of the required dependencies via pre-built ROS binaries in the docker container. In particular, we only install the following 4 packages:

ros-humble-ros-base
ros-dev-tools
ros-humble-rosidl-generator-cpp
ros-humble-rosidl-default-generators

Similarly, we provide both a mounted and non-mounted option for repro.

# mounted option
docker compose -f docker-compose-simple-nopixi.yml run --build test

# no mounting
docker compose -f docker-compose-simple-nopixi-nomount.yml run --build test

Within the container, run

cd test_ws
rm -rf build install
colcon build --symlink-install --packages-select test_a_msgs test_b_msgs --parallel-workers $(nproc)
source install/setup.bash
colcon build --symlink-install --parallel-workers $(nproc)
source install/setup.bash
ros2 run test_pkg test_node

This will produce periodic output like this:

[INFO] [1721411615.185264056] [test_node]: Publishing message
[INFO] [1721411616.185296777] [test_node]: Publishing message
[INFO] [1721411617.185177851] [test_node]: Publishing message

So, it seems to me either the issue is with pixi or with the robostack binaries, but it's not clear which.

Confirming the Full Example in Docker

We also confirm that pulling our original repo into a Docker container and running pixi inside of it raises the original error.

To run the container:

docker compose -f docker-compose-obelisk.yml run --build test

Within the container, run the following. The docker compose file doesn't use the nvidia runtime to minimize shared info between the local system and the container - it should still reproduce the error.

# activate pixi shell
pixi shell -e dev-no-gpu

# within pixi shell, run these commands
pixi run messages-build
source /obelisk/obelisk_ws/install/setup.bash
pixi run source-obelisk
source /obelisk/obelisk_ws/install/setup.bash
ros2 launch obelisk_ros obelisk_bringup.launch.py config_file_path:=dummy_cpp.yaml device_name:=onboard auto_start:=true bag:=false

The nodes cannot completely launch without error, since the setup also cannot initialize GLFW right now, but it will still raise the following error:

[jointencoders_passthrough_estimator-3] [rcutils|error_handling.c:65] an error string (message, file name, or formatted message) will be truncated
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3] >>> [rcutils|error_handling.c:108] rcutils_set_error_state()
[jointencoders_passthrough_estimator-3] This error state is being overwritten:
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3]   'Type support not from this implementation. Got:
[jointencoders_passthrough_estimator-3]     Handle's typesupport identifier (rosidl_typesupport_cpp) is not supported by this library, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1707312462476/work/ros-humble-rosidl-typesupport-cpp/src/work/src/type_support_dispatch.hpp:111
[jointencoders_passthrough_estimator-3]     Could not load library libobelisk_sensor_msgs__rosidl_typesupport_introspection_cpp.so: dlopen error: libstd_msgs__rosidl_typesupport_introspection_cpp.so: cannot open shared object file: No such file or directory, at /opt/conda/build_artifacts/ros-humble-rcutils-0_1707311166947/work/ros-humble-rcutils/src/work/src/shared_library.c:99, at /opt/conda/build_artifacts/ros-humble-rosidl-typesupport-cpp-0_1707312462476/work/ros-humble-rosidl-typesupport-cpp/s, at /opt/conda/build_artifacts/ros-humble-rmw-cyclonedds-cpp-0_1707313040772/work/ros-humble-rmw-cyclonedds-cpp/src/work/src/rmw_node.cpp:1958'
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3] with this new error message:
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3]   'type_support is null, at /opt/conda/build_artifacts/ros-humble-rmw-cyclonedds-cpp-0_1707313040772/work/ros-humble-rmw-cyclonedds-cpp/src/work/src/rmw_node.cpp:2779'
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3] rcutils_reset_error() should be called after error handling to avoid this.
[jointencoders_passthrough_estimator-3] <<<
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3] >>> [rcutils|error_handling.c:108] rcutils_set_error_state()
[jointencoders_passthrough_estimator-3] This error state is being overwritten:
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3]   'type_support is null, at /opt/conda/build_artifacts/ros-humble-rmw-cyclonedds-cpp-0_1707313040772/work/ros-humble-rmw-cyclonedds-cpp/src/work/src/rmw_node.cpp:2779, at /opt/conda/build_artifacts/ros-humble-rcl-0_1707314261614/work/ros-humble-rcl/src/work/src/rcl/subscription.c:109'
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3] with this new error message:
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3]   'invalid allocator, at /opt/conda/build_artifacts/ros-humble-rcl-0_1707314261614/work/ros-humble-rcl/src/work/src/rcl/subscription.c:219'
[jointencoders_passthrough_estimator-3] 
[jointencoders_passthrough_estimator-3] rcutils_reset_error() should be called after error handling to avoid this.
[jointencoders_passthrough_estimator-3] <<<
[jointencoders_passthrough_estimator-3] invalid allocator, at /opt/conda/build_artifacts/ros-humble-rcl-0_1707314261614/work/ros-humble-rcl/src/work/src/rcl/subscription.c:219
alberthli commented 1 month ago

Solution

Update: based on the minimal example with pixi, I appended the pixi environment's lib directory to LD_LIBRARY_PATH, which eliminates the error in both my original code and the minimal example!

After activating the environment, I simply do

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PIXI_PROJECT_ROOT/.pixi/envs/$PIXI_ENVIRONMENT_NAME/lib

Difficulties Automatically Setting LD_LIBRARY_PATH

Is this behavior expected? Should we manually append to the LD_LIBRARY_PATH every time this or similar errors come up?

I'm finding it difficult to automatically append to LD_LIBRARY_PATH, since we can't adjust the LD_LIBRARY_PATH environment variable upon activation of the environment, as PIXI_PROJECT_ROOT and PIXI_ENVIRONMENT_NAME are not set until post-activation. Further, defining some pixi task like

update-ld-lib-path = { cmd="export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PIXI_PROJECT_ROOT/.pixi/envs/$PIXI_ENVIRONMENT_NAME/lib" }

doesn't seem to work for me. Changes to LD_LIBRARY_PATH don't seem to persist after running the task.

Workaround

My current workaround is to define some bash script

#!/bin/bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PIXI_PROJECT_ROOT/.pixi/envs/$PIXI_ENVIRONMENT_NAME/lib

and add it to my pixi.toml activation scripts:

[activation]
scripts = [<other activation scripts here>, "scripts/update_ld_library_path.sh"]
traversaro commented 1 month ago

Thanks a lot for the detailed follow up! It is a bit late currently in Europe, I will check it tomorrow.

alberthli commented 1 month ago

No worries - your attention is much appreciated!

traversaro commented 1 month ago

Thanks a lot for the mwe example, now everything is much more clear. I think the problem is that you are mixing apt's compilers with conda-forge's tools (like cmake) and libraries. By doing that, your executables are not really aware that should look for package manager installed libraries in $CONDA_PREFIX\lib instead of /usr/lib or /usr/local/lib, and hence the problem (that is the reason adding $CONDA_PREFIX\lib to LD_LIBRARY_PATH is a workaround for this). More in general, mixing system compilers with conda libraries is not really supported or heavily tested, so I would strongly suggest you to use the conda-forge's compilers as well, for example by installing the compilers meta package. Indeed, by adding the compilers with pixi add compilers and building from scratch the ws the ros2 run test_pkg test_node works fine for me.

traversaro commented 1 month ago

I wonder if we should clarify this in some documentation. On the robostack side the need to install compilers is specified in https://robostack.github.io/GettingStarted.html#installation-tools-for-local-development, but perhaps your starting point to work on pixi+ROS was something else?

alberthli commented 1 month ago

Thanks, this resolved our issues completely and makes the workaround obsolete.

Yes, I would say that this should be 100% clarified on the pixi side. Actually, I started using pixi when I was looking for a cleaner way to comanage pypi dependencies with conda deps (for example, cuda). The fact that it was also compatible with robostack was something I noticed afterwards. Therefore, I wasn't familiar with all the robostack documentation that you linked above. Stating it somewhere up front on the pixi docs would have been very helpful.

ruben-arts commented 1 month ago

Our ROS2 tutorial describes it when you build a C node. I hoped that that would be enough. Together with this issue, I hope google might help us next time!

Thanks @traversaro for the help as always!