From 174ec3ed638bbeab8a6378a7425fb238978d054b Mon Sep 17 00:00:00 2001 From: Andres Montano <andres.montano@tecnalia.com> Date: Mon, 7 Oct 2024 18:03:02 +0200 Subject: [PATCH] Kinova twist controller --- dockerfiles/devenv.Dockerfile | 112 +++++++++--------- .../humble_requirements.txt | 18 +++ .../melodic_requirements.txt | 0 .../noetic_requirements.txt | 10 +- dockerfiles/extra_libs/common_libs.txt | 2 +- .../scripts/generate_package_list.bash | 33 ++++++ .../ws_dependencies/humble_requirements.txt | 57 --------- dockerfiles/ws_dependencies/mairon_humble.txt | 90 ++++++++++++++ .../ws_dependencies/neurondones_humble.txt | 45 +++++++ .../noetic_configuration_scripts.txt | 0 others/trash | 56 +++++++++ 11 files changed, 308 insertions(+), 115 deletions(-) create mode 100644 dockerfiles/distro_dependencies/humble_requirements.txt rename dockerfiles/{ws_dependencies => distro_dependencies}/melodic_requirements.txt (100%) rename dockerfiles/{ws_dependencies => distro_dependencies}/noetic_requirements.txt (89%) create mode 100644 dockerfiles/scripts/generate_package_list.bash delete mode 100644 dockerfiles/ws_dependencies/humble_requirements.txt create mode 100644 dockerfiles/ws_dependencies/mairon_humble.txt create mode 100644 dockerfiles/ws_dependencies/neurondones_humble.txt rename {dockerfiles/ws_dependencies => others}/noetic_configuration_scripts.txt (100%) create mode 100644 others/trash diff --git a/dockerfiles/devenv.Dockerfile b/dockerfiles/devenv.Dockerfile index d957e00..ecc2a31 100644 --- a/dockerfiles/devenv.Dockerfile +++ b/dockerfiles/devenv.Dockerfile @@ -22,7 +22,7 @@ ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 -# Configure apt and install ubuntu-base packages +# Configure apt and install base packages RUN apt-get update && \ apt-get -y install --no-install-recommends \ apt-transport-https \ @@ -35,44 +35,31 @@ RUN apt-get update && \ checkinstall \ # clang clang-format clang-tidy clang-tools clang \ - libc++-dev libc++1 libc++abi-dev \ - libc++abi1 libclang-dev libclang1 \ - libomp-dev libomp5 lld lldb \ - llvm-dev llvm-runtime llvm \ # ccmake cmake-curses-gui \ - direnv \ gawk \ gdb \ + git-core \ git \ git-lfs \ less \ nano \ net-tools \ openssh-client \ + python3-pip \ trash-cli \ + iputils-ping \ valgrind \ wget \ xterm -# Install pip3 and packages -RUN apt-get install -y \ - python3-pip - -RUN if [ "$ROS_DISTRO" = "noetic" ]; \ - then \ - conan config set general.revisions_enabled=1 \ - && conan profile new default --detect > /dev/null \ - && conan profile update settings.compiler=gcc default; \ - fi - # Install zsh if requested RUN if [ "$EXT_SHELL" = "zsh" ]; \ then \ - apt-get -y install zsh; \ + apt-get -y install zsh; \ fi -# Configure system to look for debian packages in the Artifactory repository +# Configure system to look for debian packages in the Tecnalia's artifactory repository COPY auth.conf /etc/apt/auth.conf.d/tecnalia.conf RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - @@ -80,32 +67,43 @@ RUN curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt RUN sh -c "echo 'yaml https://git.code.tecnalia.com/tecnalia_robotics-public/gitlab_templates/raw/master/rosdistro/rosdep_tecnalia.yaml' \ >> /etc/ros/rosdep/sources.list.d/20-default.list" -# Install docker-ce -# RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - -# RUN add-apt-repository \ -# "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -# RUN apt-get update && apt-get -y install \ -# docker-ce \ -# docker-ce-cli \ -# containerd.io \ -# docker-compose-plugin +# Create a virtual environment +# RUN apt-get install -y python3-venv +# ENV VIRTUAL_ENV=/opt/venv +# RUN python3 -m venv $VIRTUAL_ENV +# ENV PATH="$VIRTUAL_ENV/bin:$PATH" # Copy the requirements.txt file into the container WORKDIR /tmp/dependencies/ -COPY /ws_dependencies/* ./ +COPY /distro_dependencies/* ./ # Install the packages listed in ${ROS_DISTRO}_requirements.txt RUN if [ -f "${ROS_DISTRO}_requirements.txt" ]; \ then \ - apt-get update && \ - awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs apt-get install -y && \ - apt-get clean; \ + apt-get update && \ + # Install apt-get packages + awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs apt-get install -y && \ + # Install pip packages + awk '/^# PIP PACKAGES/,0' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs -r -n1 pip install ;\ + apt-get clean; \ fi -# Install pip packages -RUN if [ -f "${ROS_DISTRO}_requirements.txt" ]; \ +RUN rm -rf * + +# Install extra packages ws_dependencies +ARG PACKAGES=none +COPY /ws_dependencies/* ./ +RUN if [ "$PACKAGES" != "none" ]; \ then \ - awk '/^# PIP PACKAGES/,0' ${ROS_DISTRO}_requirements.txt | grep -v '^#' | xargs -r -n1 pip install ;\ + if [ -f "${PACKAGES}.txt" ]; \ + then \ + # Install apt-get packages + apt-get update && \ + awk '/^# APT-GET PACKAGES/,/^# PIP PACKAGES/' ${PACKAGES}.txt | grep -v '^#' | xargs apt-get install -y && \ + # Install pip packages + awk '/^# PIP PACKAGES/,0' ${PACKAGES}.txt | grep -v '^#' | xargs -r -n1 pip install ;\ + apt-get clean; \ + fi \ fi RUN rm -rf * @@ -117,33 +115,31 @@ COPY /extra_libs/* ./ # Enviroment tools based on ubuntu version RUN if [ -f "common_libs.txt" ]; \ then \ - grep -v '^#' common_libs.txt | xargs wget \ - && dpkg -i *.deb; \ + grep -v '^#' common_libs.txt | xargs wget \ + && dpkg -i *.deb; \ fi -# Workaround for Azure Kinect -RUN if [ "$ROS_DISTRO" = "noetic" ]; \ - then \ - echo 'libk4a1.4 libk4a1.4/accepted-eula-hash string 0f5d5c5de396e4fee4c0753a21fee0c1ed726cf0316204edda484f08cb266d76' | debconf-set-selections \ - && echo 'libk4abt1.0 libk4abt1.0/accepted-eula-hash string 03a13b63730639eeb6626d24fd45cf25131ee8e8e0df3f1b63f552269b176e38' | debconf-set-selections \ - && wget https://raw.githubusercontent.com/microsoft/Azure-Kinect-Sensor-SDK/develop/scripts/99-k4a.rules \ - && mkdir -p udev/rules.d \ - && mv 99-k4a.rules udev/rules.d/ \ - && cp --parents udev/rules.d/99-k4a.rules /etc; \ - fi +RUN rm -rf * + +RUN apt-get --reinstall install -y libnotify-bin notify-osd -# Extra libs, e.g. vtk-7.1_20221201-1_amd64.deb -RUN if [ -f "${ROS_DISTRO}_libs.txt" ]; \ +ARG PEAK_DRIVER=install +RUN if [ "$PEAK_DRIVER" = "install" ]; \ then \ - grep -v '^#' ${ROS_DISTRO}_libs.txt | xargs wget \ - && dpkg -i *.deb;\ + apt-get update && apt-get install -y udev libpopt-dev linux-headers-$(uname -r) \ + && wget https://www.peak-system.com/fileadmin/media/linux/files/peak-linux-driver-8.18.0.tar.gz \ + && wget https://www.peak-system.com/quick/BasicLinux -O PCAN-Basic_Linux.tar.gz \ + && tar -xvf peak-linux-driver-8.18.0.tar.gz \ + && cd peak-linux-driver-8.18.0 \ + && make clean && make install || echo 'make failed but move forward'\ + && cd .. \ + && tar -xvf PCAN-Basic_Linux.tar.gz \ + && cd PCAN-Basic_Linux-4.8.0.5/libpcanbasic \ + && make clean && make install || echo 'make failed but move forward';\ fi -RUN rm -rf * -RUN apt-get --reinstall install -y libnotify-bin notify-osd - # Update this date to re-run the image final update -LABEL image.date=05-03-2024 +LABEL image.date=26-08-2024 # Update final image RUN apt-get update \ @@ -163,8 +159,12 @@ ENV RUNNING_IN_DOCKER true # Switch back to dialog for any ad-hoc use of apt-get ENV DEBIAN_FRONTEND= +# Enable localhost only ROS2 +ENV ROS_LOCALHOST_ONLY=1 +ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp + ARG SHELL -ENV SHELL "${SHELL}" +ENV SHELL="${SHELL}" ENTRYPOINT ["/ros_entrypoint.sh"] CMD $EXT_SHELL diff --git a/dockerfiles/distro_dependencies/humble_requirements.txt b/dockerfiles/distro_dependencies/humble_requirements.txt new file mode 100644 index 0000000..a0769fa --- /dev/null +++ b/dockerfiles/distro_dependencies/humble_requirements.txt @@ -0,0 +1,18 @@ +# APT-GET PACKAGES +# Base +python3-colcon-common-extensions +python3-vcstool +python3-pip +python3-venv +# ROS tools +ros-humble-rqt-controller-manager +ros-humble-rqt-joint-trajectory-controller +python3-bloom +python3-rosdep +fakeroot +debhelper +dh-python +# PIP PACKAGES +wheel +Cython +# EOF diff --git a/dockerfiles/ws_dependencies/melodic_requirements.txt b/dockerfiles/distro_dependencies/melodic_requirements.txt similarity index 100% rename from dockerfiles/ws_dependencies/melodic_requirements.txt rename to dockerfiles/distro_dependencies/melodic_requirements.txt diff --git a/dockerfiles/ws_dependencies/noetic_requirements.txt b/dockerfiles/distro_dependencies/noetic_requirements.txt similarity index 89% rename from dockerfiles/ws_dependencies/noetic_requirements.txt rename to dockerfiles/distro_dependencies/noetic_requirements.txt index cb8def3..4ca7a64 100644 --- a/dockerfiles/ws_dependencies/noetic_requirements.txt +++ b/dockerfiles/distro_dependencies/noetic_requirements.txt @@ -64,12 +64,20 @@ lcov iwyu cppcheck ros-noetic-rviz-visual-tools +libignition-math-dev # ros control boilerplate libgflags-dev libsoundio1 ros-noetic-aruco-ros +# SPOT +ros-noetic-twist-mux +ros-noetic-interactive-marker-twist-server +ros-noetic-teleop-twist-joy +ros-noetic-velodyne-pointcloud +ros-noetic-rgbd-launch +ros-noetic-velodyne-description # PIP PACKAGES sqlite_utils transform3d conan==1.59 -# EOF \ No newline at end of file +# EOF diff --git a/dockerfiles/extra_libs/common_libs.txt b/dockerfiles/extra_libs/common_libs.txt index 966b911..e3ce168 100644 --- a/dockerfiles/extra_libs/common_libs.txt +++ b/dockerfiles/extra_libs/common_libs.txt @@ -2,6 +2,6 @@ # bat-musl https://github.com/sharkdp/bat/releases/download/v0.24.0/bat-musl_0.24.0_amd64.deb # lsd-musl -https://github.com/lsd-rs/lsd/releases/download/v1.0.0/lsd-musl_1.0.0_amd64.deb +https://github.com/lsd-rs/lsd/releases/download/v1.1.2/lsd-musl_1.1.2_amd64.deb # ripgrep https://github.com/BurntSushi/ripgrep/releases/download/14.1.0/ripgrep_14.1.0-1_amd64.deb \ No newline at end of file diff --git a/dockerfiles/scripts/generate_package_list.bash b/dockerfiles/scripts/generate_package_list.bash new file mode 100644 index 0000000..06d6f0a --- /dev/null +++ b/dockerfiles/scripts/generate_package_list.bash @@ -0,0 +1,33 @@ +#!/bin/bash + +# This script assumes it is being run in a flexbotics-base-devel container, and that +# a volume is shared in /root/src with a .rosinstall.fat_image file available + +# cd $(find . -type d -name flexbotics-fat-devel) && docker run -it -v $(pwd):/root/src/$(basename $(pwd)) tecnalia-robotics-docker.artifact.tecnalia.com/flexbotics-base-devel:kinetic bash -c "$(cat generate_package_list.bash)" + +if [ -z "${ROS_DISTRO}" ]; then + echo "ROS_DISTRO not defined, fallback to detect installed ROS version" + if ! rosversion -d; then + echo "rosversion not available" + ROS_DISTRO=$(find /opt/ros/ -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) + else + if ! [[ $(rosversion -d) = *unknown* ]]; then + ROS_DISTRO=$(rosversion -d) + else + echo "rosversion reports unknown" + ROS_DISTRO=$(find /opt/ros/ -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) + fi + fi +fi + +if [ -z "${ROS_DISTRO}" ]; then + echo "ROS could not be detected" + exit 1 +fi + +mkdir -p /root/ws/src +cd /root/ws || exit +ln -sf /root/src/* src +apt-get update +rosdep update +rosdep install --from-paths src --ignore-src --rosdistro "${ROS_DISTRO}" -r -y -s | grep 'apt-get install\|pip install' > /root/src/flexbotics-fat-devel/updated_bulk_install.sh diff --git a/dockerfiles/ws_dependencies/humble_requirements.txt b/dockerfiles/ws_dependencies/humble_requirements.txt deleted file mode 100644 index 18d4456..0000000 --- a/dockerfiles/ws_dependencies/humble_requirements.txt +++ /dev/null @@ -1,57 +0,0 @@ -# APT-GET PACKAGES -# Base -python3-colcon-common-extensions -# Nav2 fix -libunwind-dev -# Mairon -ros-humble-aws-robomaker-small-warehouse-world -ros-humble-joint-state-publisher -ros-humble-gazebo-ros -ros-humble-ur-description -ros-humble-moveit-kinematics -ros-humble-moveit-planners-ompl -ros-humble-moveit-ros-move-group -ros-humble-moveit-ros-visualization -ros-humble-moveit-servo -ros-humble-moveit-simple-controller-manager -ros-humble-warehouse-ros-sqlite -ros-humble-controller-interface -ros-humble-joint-trajectory-controller -ros-humble-realtime-tools -ros-humble-ur-msgs -ros-humble-ur-client-library -ros-humble-controller-manager -ros-humble-force-torque-sensor-broadcaster -ros-humble-joint-state-broadcaster -ros-humble-position-controllers -ros-humble-ros2-controllers-test-nodes -ros-humble-velocity-controllers -ros-humble-rclpy-message-converter -python3-websocket -ros-humble-twist-stamper -gazebo -ros-humble-gazebo-ros-pkgs -ros-humble-robot-localization -docker.io -ros-humble-controller-manager-msgs -ros-humble-hardware-interface -socat -ros-humble-moveit-planners -ros-humble-joint-state-publisher-gui -ros-humble-moveit-configs-utils -ros-humble-moveit-ros-warehouse -ros-humble-moveit-setup-assistant -ros-humble-navigation2 -ros-humble-slam-toolbox -ros-humble-moveit-core -ros-humble-gazebo-ros2-control -ros-humble-tf-transformations -ros-humble-rosbridge-server -ros-humble-rosbridge-suite -python3-tk -ros-humble-ur-moveit-config -ros-humble-ur-robot-driver -# PIP PACKAGES -sqlite_utils -transform3d -# EOF diff --git a/dockerfiles/ws_dependencies/mairon_humble.txt b/dockerfiles/ws_dependencies/mairon_humble.txt new file mode 100644 index 0000000..44f91f5 --- /dev/null +++ b/dockerfiles/ws_dependencies/mairon_humble.txt @@ -0,0 +1,90 @@ +# Generated by 'rosdep install --reinstall --simulate --from-path src --ignore-src' command +# APT-GET PACKAGES +cython3 +gazebo +graphviz +libeigen3-dev +libgtk-3-dev +liblapack-dev +libpyside2-dev +libshiboken2-dev +pyqt5-dev +python3-argcomplete +python3-gi +python3-gi-cairo +python3-importlib-metadata +python3-lxml +python3-mock +python3-netifaces +python3-nose +python3-numpy +python3-opencv +python3-packaging +python3-pkg-resources +python3-pykdl +python3-pyqt5 +python3-pyqt5.qtsvg +python3-pyside2.qtsvg +python3-pytest +python3-rospkg +python3-rospkg-modules +python3-sip-dev +python3-sklearn +python3-transforms3d +python3-websocket +python3-wxgtk4.0 +python3-yaml +ros-humble-ament-cmake-nose +ros-humble-control-msgs +ros-humble-controller-manager +ros-humble-gazebo-dev +ros-humble-gazebo-msgs +ros-humble-gazebo-plugins +ros-humble-gazebo-ros +ros-humble-gazebo-ros-pkgs +ros-humble-gazebo-ros2-control +ros-humble-joint-state-broadcaster +ros-humble-joint-state-publisher +ros-humble-joint-state-publisher-gui +ros-humble-joint-trajectory-controller +ros-humble-librealsense2 +ros-humble-moveit +ros-humble-moveit-configs-utils +ros-humble-moveit-core +ros-humble-moveit-kinematics +ros-humble-moveit-msgs +ros-humble-moveit-planners +ros-humble-moveit-planners-chomp +ros-humble-moveit-ros-move-group +ros-humble-moveit-ros-planning-interface +ros-humble-moveit-ros-visualization +ros-humble-moveit-ros-warehouse +ros-humble-moveit-setup-assistant +ros-humble-moveit-simple-controller-manager +ros-humble-moveit-visual-tools +ros-humble-navigation2 +ros-humble-rclpy-message-converter +ros-humble-realsense2-camera +ros-humble-robot-localization +ros-humble-ros2-control +ros-humble-ros2-controllers +ros-humble-rviz-visual-tools +ros-humble-slam-toolbox +ros-humble-tf-transformations +ros-humble-ur-controllers +ros-humble-ur-description +ros-humble-ur-moveit-config +ros-humble-ur-robot-driver +shiboken2 +xdot +xterm +# PIP PACKAGES +open3d +pyads +sqlite-utils +torch +torchvision +transforms3d +typeguard +ultralytics +# EOF diff --git a/dockerfiles/ws_dependencies/neurondones_humble.txt b/dockerfiles/ws_dependencies/neurondones_humble.txt new file mode 100644 index 0000000..d481942 --- /dev/null +++ b/dockerfiles/ws_dependencies/neurondones_humble.txt @@ -0,0 +1,45 @@ +# APT-GET PACKAGES +# Allegro hand +cmake +libeigen3-dev +libyaml-cpp-dev +libboost-filesystem-dev +libboost-system-dev +liburdf-dev +liborocos-kdl-dev +joint-state-publisher-gui +ros-humble-control-msgs +# Bringup +# ros-humble-kortex-bringup +ros-humble-moveit-ros-move-group +ros-humble-moveit-kinematics +ros-humble-moveit-planners +ros-humble-moveit-simple-controller-manager +ros-humble-joint-state-publisher +ros-humble-joint-state-publisher-gui +ros-humble-controller-manager +ros-humble-moveit-configs-utils +ros-humble-moveit-ros-visualization +ros-humble-moveit-ros-warehouse +ros-humble-moveit-setup-assistant +ros-humble-picknik-reset-fault-controller +ros-humble-picknik-twist-controller +ros-humble-hardware-interface +ros-humble-joint-trajectory-controller +ros-humble-robotiq-description +ros-humble-gazebo-ros2-control +ros-humble-gripper-controllers +ros-humble-joint-state-broadcaster +ros-humble-kinova-gen3-7dof-robotiq-2f-85-moveit-config +ros-humble-rmw-cyclonedds-cpp +ros-humble-ign-ros2-control +ros-humble-spacenav +ros-humble-ros2-control +ros-humble-ros2-controllers +ros-humble-controller-interface +ros-humble-controller-manager +ros-humble-generate-parameter-library +ros-humble-hardware-interface +# PIP PACKAGES +# transform3d +# EOF \ No newline at end of file diff --git a/dockerfiles/ws_dependencies/noetic_configuration_scripts.txt b/others/noetic_configuration_scripts.txt similarity index 100% rename from dockerfiles/ws_dependencies/noetic_configuration_scripts.txt rename to others/noetic_configuration_scripts.txt diff --git a/others/trash b/others/trash new file mode 100644 index 0000000..cfb592a --- /dev/null +++ b/others/trash @@ -0,0 +1,56 @@ +# # Workaround for Azure Kinect +# RUN if [ "$ROS_DISTRO" = "noetic" ]; \ +# then \ +# echo 'libk4a1.4 libk4a1.4/accepted-eula-hash string 0f5d5c5de396e4fee4c0753a21fee0c1ed726cf0316204edda484f08cb266d76' | debconf-set-selections \ +# && echo 'libk4abt1.0 libk4abt1.0/accepted-eula-hash string 03a13b63730639eeb6626d24fd45cf25131ee8e8e0df3f1b63f552269b176e38' | debconf-set-selections \ +# && wget https://raw.githubusercontent.com/microsoft/Azure-Kinect-Sensor-SDK/develop/scripts/99-k4a.rules \ +# && mkdir -p udev/rules.d \ +# && mv 99-k4a.rules udev/rules.d/ \ +# && cp --parents udev/rules.d/99-k4a.rules /etc; \ +# fi + +# # Extra libs, e.g. vtk-7.1_20221201-1_amd64.deb +# RUN if [ -f "${ROS_DISTRO}_libs.txt" ]; \ +# then \ +# grep -v '^#' ${ROS_DISTRO}_libs.txt | xargs wget \ +# && dpkg -i *.deb;\ +# fi + +# # LABEL image.version=0.1.1 +# ARG INSTALL_RUST="rust" +# RUN echo "BUILDING DOCKER IMAGE USING RUST = ${INSTALL_RUST}" + +# ENV CARGO_HOME="/opt/cargo" +# ENV RUSTUP_HOME="/opt/rustup" + +# RUN if [ "${INSTALL_RUST}" = "rust" ]; \ +# then \ +# echo "Installing Rust"; \ +# curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y; \ +# else \ +# echo "Not installing Rust"; \ +# fi +# # Add .cargo/bin to PATH +# ENV PATH="/opt/cargo/bin:${PATH}" + +# Install nodejs +RUN mkdir -p /etc/apt/keyrings && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg +RUN NODE_MAJOR=20 && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list +RUN apt-get update && \ + apt-get -y install nodejs + +# clang +clang-format clang-tidy clang-tools clang \ +libc++-dev libc++1 libc++abi-dev \ +libc++abi1 libclang-dev libclang1 \ +libomp-dev libomp5 lld lldb \ +llvm-dev llvm-runtime llvm \ + +# Use rosdep to install ros packages +ARG ROSDEP=none +RUN if [ "$ROSDEP" != "none" ]; \ + then \ + git clone ${ROSDEP};\ + && rosdep update; \ + && rosdep install -iy --from-paths . --ignore-src --rosdistro ${ROS_DISTRO}; \ + fi -- GitLab