diff --git a/.devcontainer/lyrical/devcontainer.json b/.devcontainer/lyrical/devcontainer.json new file mode 100644 index 0000000..84f53f3 --- /dev/null +++ b/.devcontainer/lyrical/devcontainer.json @@ -0,0 +1,17 @@ +// https://aka.ms/devcontainer.json +{ + "dockerComposeFile": "../../docker/docker-compose.yaml", + "shutdownAction": "stopCompose", + + "name": "Fixposition SDK (ROS Lyrical)", "service": "lyrical-dev", "runServices": [ "lyrical-dev" ], + + // Use this user in the container, re-map IDs to local user automatically + "remoteUser": "fpsdk", + "updateRemoteUserUID": true, + + // compare .services.lyrical-dev.volumes in ../../docker/docker-compose.yaml + "workspaceFolder": "/home/fpsdk/fixposition-sdk", + + // Deliberately empty, see fpsdk.code-workspace instead + "customizations": {} +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59f9f1d..c89fcb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -90,6 +90,26 @@ jobs: name: fpsdk_common_versions_jazzy path: build/jazzy-ci_build_toplevel_release_ros2/*/*_versions.txt + ci-fpsdk-lyrical: + runs-on: ubuntu-latest + container: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-ci + defaults: + run: + shell: bash + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: CI + run: | + git config --global --add safe.directory ${GITHUB_WORKSPACE} + ./docker/ci.sh + - name: Artefacts + uses: actions/upload-artifact@v6 + with: + name: fpsdk_common_versions_lyrical + path: build/lyrical-ci_build_toplevel_release_ros2/*/*_versions.txt + ci-images: runs-on: ubuntu-latest needs: # we build the images only if these are successful @@ -97,6 +117,7 @@ jobs: - ci-fpsdk-noetic - ci-fpsdk-humble - ci-fpsdk-jazzy + - ci-fpsdk-lyrical steps: - name: Checkout uses: actions/checkout@v6 @@ -109,16 +130,16 @@ jobs: - name: Pull run: | cd ${GITHUB_WORKSPACE}/docker - COMPOSE_PARALLEL_LIMIT=4 docker compose pull trixie-base noetic-base humble-base jazzy-base + COMPOSE_PARALLEL_LIMIT=4 docker compose pull trixie-base noetic-base humble-base jazzy-base lyrical-base - name: Build run: | cd ${GITHUB_WORKSPACE}/docker - COMPOSE_PARALLEL_LIMIT=1 docker compose build build-trixie-run build-noetic-run build-humble-run build-jazzy-run + COMPOSE_PARALLEL_LIMIT=1 docker compose build build-trixie-run build-noetic-run build-humble-run build-jazzy-run build-lyrical-run - name: Push if: ${{ github.ref == 'refs/heads/main' }} run: | cd ${GITHUB_WORKSPACE}/docker - docker compose push build-trixie-run build-noetic-run build-humble-run build-jazzy-run + docker compose push build-trixie-run build-noetic-run build-humble-run build-jazzy-run build-lyrical-run - name: Expire old images if: ${{ github.ref == 'refs/heads/main' }} uses: actions/delete-package-versions@v5 # https://github.com/actions/delete-package-versions @@ -137,6 +158,7 @@ jobs: - ci-fpsdk-noetic - ci-fpsdk-humble - ci-fpsdk-jazzy + - ci-fpsdk-lyrical permissions: pages: write id-token: write diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index e62d292..4c29df2 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -143,6 +143,40 @@ jobs: docker compose push build-jazzy-run + docker-fpsdk-lyrical: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v6 + - name: Login + uses: docker/login-action@v4 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + # Build and push (!) one image after the other. E.g. we must build and push base before we can build ci, because it needs base (in the registry) + - name: Build and push (base) + run: | + cd ${GITHUB_WORKSPACE}/docker + COMPOSE_PARALLEL_LIMIT=1 docker compose build build-lyrical-base + docker compose push build-lyrical-base + - name: Build and push (ci) + run: | + cd ${GITHUB_WORKSPACE}/docker + COMPOSE_PARALLEL_LIMIT=1 docker compose build build-lyrical-ci + docker compose push build-lyrical-ci + - name: Build and push (dev) + run: | + cd ${GITHUB_WORKSPACE}/docker + COMPOSE_PARALLEL_LIMIT=1 docker compose build build-lyrical-dev + docker compose push build-lyrical-dev + - name: Build and push (run) + run: | + cd ${GITHUB_WORKSPACE}/docker + COMPOSE_PARALLEL_LIMIT=1 docker compose build build-lyrical-run + docker compose push build-lyrical-run + + docker-fpsdk-cleanup: runs-on: ubuntu-latest needs: @@ -150,6 +184,7 @@ jobs: - docker-fpsdk-noetic - docker-fpsdk-humble - docker-fpsdk-jazzy + - docker-fpsdk-lyrical steps: - name: Expire old images uses: actions/delete-package-versions@v5 diff --git a/.gitignore b/.gitignore index 9e1b48f..dab841b 100644 --- a/.gitignore +++ b/.gitignore @@ -40,6 +40,7 @@ baz* /*.yaml /*.gz /*.json +/.claude # We must not commit such files ever. See section FPSDK_BUILD_ROS in fpsdk_doc/fpsdk_build.hpp CATKIN_IGNORE diff --git a/Makefile b/Makefile index 564a965..ff62fe3 100644 --- a/Makefile +++ b/Makefile @@ -274,7 +274,7 @@ $(BUILD_DIR)/.lint-clang-tidy: $(BUILD_DIR)/.make-build # ---------------------------------------------------------------------------------------------------------------------- .PHONY: ci -ci: $(BUILD_DIR)/.ci-bookworm $(BUILD_DIR)/.ci-noetic $(BUILD_DIR)/.ci-humble $(BUILD_DIR)/.ci-jazzy +ci: $(BUILD_DIR)/.ci-bookworm $(BUILD_DIR)/.ci-noetic $(BUILD_DIR)/.ci-humble $(BUILD_DIR)/.ci-jazzy $(BUILD_DIR)/.ci-lyrical $(BUILD_DIR)/.ci-bookworm: $(deps) @echo "$(HLW)***** CI (bookworm) *****$(HLO)" @@ -316,6 +316,16 @@ else @false endif +$(BUILD_DIR)/.ci-lyrical: $(deps) + @echo "$(HLW)***** CI (lyrical) *****$(HLO)" +ifeq ($(FPSDK_IMAGE),) + $(V)docker/docker.sh run lyrical-ci ./docker/ci.sh + $(V)$(TOUCH) $@ +else + @echo "This ($@) should not run inside Docker!" + @false +endif + # ---------------------------------------------------------------------------------------------------------------------- .PHONY: pre-commit diff --git a/docker/Dockerfile.lyrical-base b/docker/Dockerfile.lyrical-base new file mode 100644 index 0000000..3587be6 --- /dev/null +++ b/docker/Dockerfile.lyrical-base @@ -0,0 +1,38 @@ +######################################################################################################################## +# ___ ___ +# \ \ / / +# \ \/ / Copyright (c) Fixposition AG (www.fixposition.com) and contributors +# / /\ \ License: see the LICENSE file +# /__/ \__\ +# +######################################################################################################################## + +# ROS Lyrical Luth (LTS until May 2031) base image (Ubuntu 26.04 LTS "Resolute") +FROM ros:lyrical-ros-base + +# Metadata for github packages +LABEL org.opencontainers.image.description="Fixposition SDK docker image: ROS Lyrical (Ubuntu 26.04 Resolute) base image with minimal stuff required to build" +LABEL org.opencontainers.image.source=https://github.com/fixposition + +# Variables used in our Docker build and CI scripts +ENV FPSDK_IMAGE=lyrical-base +ENV ROS_DISTRO=lyrical + +# Remove automatic use of /ros_entrypoint.sh, we'll deal with this ourselves +ENTRYPOINT [] + +# Install stuff +COPY docker/scripts/install_apt_base.sh /tmp +RUN /tmp/install_apt_base.sh && rm -f /tmp/install_apt_base.sh + +# Download, build and install FFmpeg libraries (LGPL) +COPY docker/scripts/install_ffmpeg.sh /tmp +RUN /tmp/install_ffmpeg.sh && rm -f /tmp/install_ffmpeg.sh + +# Update ld cache for the installed libraries +RUN /usr/sbin/ldconfig + +# For debugging docker builds... (last layer!) +RUN date > /fixposition-sdk-${FPSDK_IMAGE} + +######################################################################################################################## diff --git a/docker/Dockerfile.lyrical-ci b/docker/Dockerfile.lyrical-ci new file mode 100644 index 0000000..f45eff6 --- /dev/null +++ b/docker/Dockerfile.lyrical-ci @@ -0,0 +1,31 @@ +######################################################################################################################## +# ___ ___ +# \ \ / / +# \ \/ / Copyright (c) Fixposition AG (www.fixposition.com) and contributors +# / /\ \ License: see the LICENSE file +# /__/ \__\ +# +######################################################################################################################## + +FROM ghcr.io/fixposition/fixposition-sdk:lyrical-base + +# Metadata for github packages +LABEL org.opencontainers.image.description="Fixposition SDK docker image: ROS Lyrical (Ubuntu 26.04 Resolute) image for Github CI jobs" +LABEL org.opencontainers.image.source=https://github.com/fixposition + +# Variables used in our Docker build and CI scripts +ENV FPSDK_IMAGE=lyrical-ci + +# # Install pre-commit hooks (root user) +# COPY .pre-commit-config.yaml /tmp +# COPY docker/scripts/install_precommithooks.sh /tmp +# RUN /tmp/install_precommithooks.sh && rm -f /tmp/install_precommithooks.sh /tmp/.pre-commit-config.yaml + +# Install useful stuff +COPY docker/scripts/install_apt_ci.sh /tmp +RUN /tmp/install_apt_ci.sh && rm -f /tmp/install_apt_ci.share + +# For debugging docker builds... (last layer!) +RUN date > /fixposition-sdk-${FPSDK_IMAGE} + +######################################################################################################################## diff --git a/docker/Dockerfile.lyrical-dev b/docker/Dockerfile.lyrical-dev new file mode 100644 index 0000000..33edda3 --- /dev/null +++ b/docker/Dockerfile.lyrical-dev @@ -0,0 +1,60 @@ +######################################################################################################################## +# ___ ___ +# \ \ / / +# \ \/ / Copyright (c) Fixposition AG (www.fixposition.com) and contributors +# / /\ \ License: see the LICENSE file +# /__/ \__\ +# +######################################################################################################################## + +FROM ghcr.io/fixposition/fixposition-sdk:lyrical-base + +# Metadata for github packages +LABEL org.opencontainers.image.description="Fixposition SDK docker image: ROS Lyrical (Ubuntu 26.04 Resolute) image for vscode devcontainer" +LABEL org.opencontainers.image.source=https://github.com/fixposition + +# Variables used in our Docker build and CI scripts +ENV FPSDK_IMAGE=lyrical-dev + +# Unminimize system +COPY docker/scripts/unminimize_system.sh /tmp +RUN /tmp/unminimize_system.sh && rm -f /tmp/unminimize_system.sh + +# Add user for devcontainer, see ../.devcontainer/devcontainer.json +COPY docker/scripts/adduser_fpsdk.sh /tmp +RUN /tmp/adduser_fpsdk.sh && rm -f /tmp/adduser_fpsdk.sh + +# # Install pre-commit hooks (fpsdk user) +# COPY .pre-commit-config.yaml /tmp +# COPY docker/scripts/install_precommithooks.sh /tmp +# RUN sudo -u fpsdk /tmp/install_precommithooks.sh && rm -f /tmp/install_precommithooks.sh /tmp/.pre-commit-config.yaml + +# Install git-bash-prompt (fpsdk user) +COPY .devcontainer/fpsdk.bgptheme /tmp +COPY docker/scripts/install_gitbashprompt.sh /tmp +RUN sudo -u fpsdk /tmp/install_gitbashprompt.sh && rm -f /tmp/install_gitbashprompt.sh /tmp/.devcontainer/fpsdk.bgptheme + +# Set timezone, sane language and locale +ENV TZ=Europe/Zurich +ENV LANG=en_GB.UTF-8 +ENV LANGUAGE=en_GB +ENV LC_ALL=C.UTF-8 +COPY docker/scripts/install_locales.sh /tmp +RUN /tmp/install_locales.sh && rm -f /tmp/install_locales.sh + +# Install yq +COPY docker/scripts/install_yq.sh /tmp +RUN /tmp/install_yq.sh && rm -f /tmp/install_yq.sh + +# Install mcap +COPY docker/scripts/install_mcap.sh /tmp +RUN /tmp/install_mcap.sh && rm -f /tmp/install_mcap.sh + +# Install useful stuff +COPY docker/scripts/install_apt_dev.sh /tmp +RUN /tmp/install_apt_dev.sh && rm -f /tmp/install_apt_dev.share + +# For debugging docker builds... (last layer!) +RUN date > /fixposition-sdk-${FPSDK_IMAGE} + +######################################################################################################################## diff --git a/docker/Dockerfile.lyrical-run b/docker/Dockerfile.lyrical-run new file mode 100644 index 0000000..625836e --- /dev/null +++ b/docker/Dockerfile.lyrical-run @@ -0,0 +1,37 @@ +######################################################################################################################## +# ___ ___ +# \ \ / / +# \ \/ / Copyright (c) Fixposition AG (www.fixposition.com) and contributors +# / /\ \ License: see the LICENSE file +# /__/ \__\ +# +######################################################################################################################## + +FROM ghcr.io/fixposition/fixposition-sdk:lyrical-base + +# Metadata for github packages +LABEL org.opencontainers.image.description="Fixposition SDK docker image: ROS Lyrical (Ubuntu 26.04 Resolute) image with pre-built binaries" +LABEL org.opencontainers.image.source=https://github.com/fixposition + +# Variables used in our Docker build and CI scripts +ENV FPSDK_IMAGE=lyrical-run + +# Install useful stuff +COPY docker/scripts/install_apt_run.sh /tmp +RUN /tmp/install_apt_run.sh && rm -f /tmp/install_apt_run.sh + +COPY .git /tmp/fpsdk/.git/ +RUN < /fixposition-sdk-${FPSDK_IMAGE} + +######################################################################################################################## diff --git a/docker/ci.sh b/docker/ci.sh index 99f716e..28e3238 100755 --- a/docker/ci.sh +++ b/docker/ci.sh @@ -17,6 +17,8 @@ if [ -z "${FPSDK_IMAGE:-}" ]; then export ROS_DISTRO=humble elif [ -d /opt/ros/jazzy ]; then export ROS_DISTRO=jazzy + elif [ -d /opt/ros/lyrical ]; then + export ROS_DISTRO=lyrical else export ROS_DISTRO= fi @@ -106,6 +108,7 @@ function build_toplevel_release_noros rm -rf build/${buildname} make install \ INSTALL_PREFIX=install/${buildname} \ + BUILD_TESTING=ON USE_FFMPEG=ON USE_PROJ=ON \ BUILD_TYPE=Release \ BUILD_DIR=build/${buildname} || return 1 install/${buildname}/bin/fpltool -V || return 1 @@ -119,6 +122,7 @@ function test_toplevel_release_noros cd ${FPSDK_SRC_DIR} make test \ INSTALL_PREFIX=install/${buildname} \ + BUILD_TESTING=ON USE_FFMPEG=ON USE_PROJ=ON \ BUILD_TYPE=Release \ BUILD_DIR=build/${buildname} || return 1 } @@ -134,6 +138,7 @@ function build_toplevel_debug_noros rm -rf build/${buildname} make install \ INSTALL_PREFIX=install/${buildname} \ + BUILD_TESTING=ON USE_FFMPEG=ON USE_PROJ=ON \ BUILD_TYPE=Debug \ BUILD_DIR=build/${buildname} || return 1 install/${buildname}/bin/fpltool -V || return 1 @@ -147,6 +152,7 @@ function test_toplevel_debug_noros cd ${FPSDK_SRC_DIR} make test \ INSTALL_PREFIX=install/${buildname} \ + BUILD_TESTING=ON USE_FFMPEG=ON USE_PROJ=ON \ BUILD_TYPE=Debug \ BUILD_DIR=build/${buildname} || return 1 } @@ -507,7 +513,7 @@ function build_colcon_release ln -s ../../../fpsdk_apps . ln -s ../../../examples/ros2_fpsdk_demo . cd .. - colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release || return 1 + colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release || return 1 set +u source install/setup.bash || return 1 set -u @@ -573,7 +579,7 @@ if [ "${ROS_DISTRO}" = "noetic" ]; then #do_step doxygen_release_ros1 || true # continue # - Or ROS 2 -elif [ "${ROS_DISTRO}" = "humble" -o "${ROS_DISTRO}" = "jazzy" ]; then +elif [ "${ROS_DISTRO}" = "humble" -o "${ROS_DISTRO}" = "jazzy" -o "${ROS_DISTRO}" = "lyrical" ]; then echo "===== ROS2 builds =====" set +u source /opt/ros/${ROS_DISTRO}/setup.bash diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 3886bdf..efaccc5 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -35,10 +35,10 @@ services: trixie-base: image: ghcr.io/fixposition/fixposition-sdk:trixie-base - command: tail -f + command: tail -f /dev/null trixie-ci: image: ghcr.io/fixposition/fixposition-sdk:trixie-ci - command: tail -f + command: tail -f /dev/null trixie-dev: image: ghcr.io/fixposition/fixposition-sdk:trixie-dev volumes: @@ -54,7 +54,7 @@ services: - SYS_PTRACE # Set kernel.yama.ptrace_scope = 0 in /etc/sysctl.d/10-ptrace.conf hostname: fpsdk-trixie-dev-${USER} # Apparently required... (so that the container doesn't kill itself?) - command: tail -f + command: tail -f /dev/null # ----- ROS1 ------------------------------------------------------------------------------------------------------- @@ -64,7 +64,7 @@ services: build: context: .. dockerfile: docker/Dockerfile.noetic-base - command: tail -f + command: tail -f /dev/null build-noetic-ci: image: ghcr.io/fixposition/fixposition-sdk:noetic-ci build: @@ -72,7 +72,7 @@ services: dockerfile: docker/Dockerfile.noetic-ci depends_on: - build-noetic-base - command: tail -f + command: tail -f /dev/null build-noetic-dev: image: ghcr.io/fixposition/fixposition-sdk:noetic-dev build: @@ -80,14 +80,14 @@ services: dockerfile: docker/Dockerfile.noetic-dev depends_on: - build-noetic-base - command: tail -f + command: tail -f /dev/null noetic-base: image: ghcr.io/fixposition/fixposition-sdk:noetic-base - command: tail -f + command: tail -f /dev/null noetic-ci: image: ghcr.io/fixposition/fixposition-sdk:noetic-ci - command: tail -f + command: tail -f /dev/null noetic-dev: image: ghcr.io/fixposition/fixposition-sdk:noetic-dev volumes: @@ -99,7 +99,7 @@ services: cap_add: - SYS_PTRACE hostname: fpsdk-noetic-dev-${USER} - command: tail -f + command: tail -f /dev/null # ----- ROS2 ------------------------------------------------------------------------------------------------------- @@ -109,7 +109,7 @@ services: build: context: .. dockerfile: docker/Dockerfile.humble-base - command: tail -f + command: tail -f /dev/null build-humble-ci: image: ghcr.io/fixposition/fixposition-sdk:humble-ci build: @@ -117,22 +117,22 @@ services: dockerfile: docker/Dockerfile.humble-ci depends_on: - build-humble-base - command: tail -f + command: tail -f /dev/null build-humble-dev: image: ghcr.io/fixposition/fixposition-sdk:humble-dev build: context: .. dockerfile: docker/Dockerfile.humble-dev - command: tail -f + command: tail -f /dev/null depends_on: - build-humble-base + humble-base: image: ghcr.io/fixposition/fixposition-sdk:humble-base - command: tail -f - + command: tail -f /dev/null humble-ci: image: ghcr.io/fixposition/fixposition-sdk:humble-ci - command: tail -f + command: tail -f /dev/null humble-dev: image: ghcr.io/fixposition/fixposition-sdk:humble-dev volumes: @@ -144,7 +144,7 @@ services: cap_add: - SYS_PTRACE hostname: fpsdk-humble-dev-${USER} - command: tail -f + command: tail -f /dev/null build-jazzy-base: @@ -152,7 +152,7 @@ services: build: context: .. dockerfile: docker/Dockerfile.jazzy-base - command: tail -f + command: tail -f /dev/null build-jazzy-ci: image: ghcr.io/fixposition/fixposition-sdk:jazzy-ci build: @@ -160,7 +160,7 @@ services: dockerfile: docker/Dockerfile.jazzy-ci depends_on: - build-jazzy-base - command: tail -f + command: tail -f /dev/null build-jazzy-dev: image: ghcr.io/fixposition/fixposition-sdk:jazzy-dev build: @@ -171,10 +171,10 @@ services: jazzy-base: image: ghcr.io/fixposition/fixposition-sdk:jazzy-base - command: tail -f + command: tail -f /dev/null jazzy-ci: image: ghcr.io/fixposition/fixposition-sdk:jazzy-ci - command: tail -f + command: tail -f /dev/null jazzy-dev: image: ghcr.io/fixposition/fixposition-sdk:jazzy-dev volumes: @@ -186,7 +186,49 @@ services: cap_add: - SYS_PTRACE hostname: fpsdk-jazzy-dev-${USER} - command: tail -f + command: tail -f /dev/null + + + build-lyrical-base: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-base + build: + context: .. + dockerfile: docker/Dockerfile.lyrical-base + command: tail -f /dev/null + build-lyrical-ci: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-ci + build: + context: .. + dockerfile: docker/Dockerfile.lyrical-ci + depends_on: + - build-lyrical-base + command: tail -f /dev/null + build-lyrical-dev: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-dev + build: + context: .. + dockerfile: docker/Dockerfile.lyrical-dev + depends_on: + - build-lyrical-base + + lyrical-base: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-base + command: tail -f /dev/null + lyrical-ci: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-ci + command: tail -f /dev/null + lyrical-dev: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-dev + volumes: + - ../.devcontainer/.bashrc:/home/fpsdk/.bashrc + - ../.devcontainer/.bash_logout:/home/fpsdk/.bash_logout + - ../.devcontainer/.bash_history.d:/home/fpsdk/.bash_history.d + - ../.devcontainer/.vscode-server:/home/fpsdk/.vscode-server + - ../.:/home/fpsdk/fixposition-sdk + cap_add: + - SYS_PTRACE + hostname: fpsdk-lyrical-dev-${USER} + command: tail -f /dev/null # ----- containers to run pre-built apps --------------------------------------------------------------------------- @@ -200,7 +242,7 @@ services: - trixie-base trixie-run: image: ghcr.io/fixposition/fixposition-sdk:trixie-run - command: tail -f + command: tail -f /dev/null build-noetic-run: image: ghcr.io/fixposition/fixposition-sdk:noetic-run @@ -211,7 +253,7 @@ services: - noetic-base noetic-run: image: ghcr.io/fixposition/fixposition-sdk:noetic-run - command: tail -f + command: tail -f /dev/null build-humble-run: image: ghcr.io/fixposition/fixposition-sdk:humble-run @@ -222,7 +264,7 @@ services: - humble-base humble-run: image: ghcr.io/fixposition/fixposition-sdk:humble-run - command: tail -f + command: tail -f /dev/null build-jazzy-run: image: ghcr.io/fixposition/fixposition-sdk:jazzy-run @@ -233,7 +275,18 @@ services: - jazzy-base jazzy-run: image: ghcr.io/fixposition/fixposition-sdk:jazzy-run - command: tail -f + command: tail -f /dev/null + + build-lyrical-run: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-run + build: + context: .. + dockerfile: docker/Dockerfile.lyrical-run + depends_on: + - lyrical-base + lyrical-run: + image: ghcr.io/fixposition/fixposition-sdk:lyrical-run + command: tail -f /dev/null ######################################################################################################################## diff --git a/docker/scripts/install_apt_base.sh b/docker/scripts/install_apt_base.sh index d05dadc..75fe8a6 100755 --- a/docker/scripts/install_apt_base.sh +++ b/docker/scripts/install_apt_base.sh @@ -16,68 +16,73 @@ set -eEu # List of packages, with filter for the different images we make packages=$(awk -v filt=${FPSDK_IMAGE%-*} '$1 ~ filt { print $2 }' < Additional directory to mount as volumes in docker (see examples below)" echo " The command to run," echo " ... and its arguments (if any)" diff --git a/fpsdk_apps/CMakeLists.txt b/fpsdk_apps/CMakeLists.txt index 831028f..5b5a02f 100644 --- a/fpsdk_apps/CMakeLists.txt +++ b/fpsdk_apps/CMakeLists.txt @@ -6,7 +6,7 @@ include(../fpsdk_common/cmake/setup.cmake) include(../fpsdk_common/cmake/utils.cmake) project(fpsdk_apps - LANGUAGES CXX + LANGUAGES CXX C VERSION ${FPSDK_VERSION_NUMBER} DESCRIPTION "Fixposition SDK: Apps" ) diff --git a/fpsdk_common/include/fpsdk_common/parser/ubx.hpp b/fpsdk_common/include/fpsdk_common/parser/ubx.hpp index 9bac580..1536fe0 100644 --- a/fpsdk_common/include/fpsdk_common/parser/ubx.hpp +++ b/fpsdk_common/include/fpsdk_common/parser/ubx.hpp @@ -2979,7 +2979,7 @@ static constexpr uint16_t UBX_SEC_OSNMA_V3_GROUP1_BITFIELD1_IODE(const uint16 static constexpr uint8_t UBX_SEC_OSNMA_V3_GROUP1_BITFIELD1_AUTHNUM(const uint16_t bitfield1) { return (bitfield1 >> 10) & 0x1f; } //!< @todo documentation static constexpr bool UBX_SEC_OSNMA_V3_GROUP1_BITFIELD1_AUTHSTATUS(const uint16_t bitfield1) { return (bitfield1 & 0x8000) == 0x8000; } //!< @todo documentation static constexpr std::size_t UBX_SEC_OSNMA_V3_SIZE(const uint8_t* msg) { return //!< @todo documentation - sizeof(UBX_SEC_OSNMA_V3_GROUP0) + UBX_FRAME_SIZE + (UBX_SEC_OSNMA_V3_GENERALANDTIMING_AUTHSVS(*((uint32_t *)&((uint8_t *)(msg))[UBX_HEAD_SIZE + 24])) * sizeof(UBX_SEC_OSNMA_V3_GROUP1)); } //!< @todo documentation + sizeof(UBX_SEC_OSNMA_V3_GROUP0) + UBX_FRAME_SIZE + (UBX_SEC_OSNMA_V3_GENERALANDTIMING_AUTHSVS(((const uint8_t *)(msg))[UBX_HEAD_SIZE + 24]) * sizeof(UBX_SEC_OSNMA_V3_GROUP1)); } //!< @todo documentation // clang-format on ///@} diff --git a/fpsdk_common/rosnoros/geometry_msgs/PoseWithCovariance.h b/fpsdk_common/rosnoros/geometry_msgs/PoseWithCovariance.h index f8480f1..ac904c7 100644 --- a/fpsdk_common/rosnoros/geometry_msgs/PoseWithCovariance.h +++ b/fpsdk_common/rosnoros/geometry_msgs/PoseWithCovariance.h @@ -27,13 +27,13 @@ struct PoseWithCovariance_ PoseWithCovariance_() : pose() , covariance() { - covariance.assign(0.0); + covariance.fill(0.0); } PoseWithCovariance_(const ContainerAllocator& _alloc) : pose(_alloc) , covariance() { (void)_alloc; - covariance.assign(0.0); + covariance.fill(0.0); } diff --git a/fpsdk_common/rosnoros/geometry_msgs/TwistWithCovariance.h b/fpsdk_common/rosnoros/geometry_msgs/TwistWithCovariance.h index 012a2a5..1101097 100644 --- a/fpsdk_common/rosnoros/geometry_msgs/TwistWithCovariance.h +++ b/fpsdk_common/rosnoros/geometry_msgs/TwistWithCovariance.h @@ -27,13 +27,13 @@ struct TwistWithCovariance_ TwistWithCovariance_() : twist() , covariance() { - covariance.assign(0.0); + covariance.fill(0.0); } TwistWithCovariance_(const ContainerAllocator& _alloc) : twist(_alloc) , covariance() { (void)_alloc; - covariance.assign(0.0); + covariance.fill(0.0); } diff --git a/fpsdk_common/rosnoros/sensor_msgs/Imu.h b/fpsdk_common/rosnoros/sensor_msgs/Imu.h index b339450..11374b3 100644 --- a/fpsdk_common/rosnoros/sensor_msgs/Imu.h +++ b/fpsdk_common/rosnoros/sensor_msgs/Imu.h @@ -35,11 +35,11 @@ struct Imu_ , angular_velocity_covariance() , linear_acceleration() , linear_acceleration_covariance() { - orientation_covariance.assign(0.0); + orientation_covariance.fill(0.0); - angular_velocity_covariance.assign(0.0); + angular_velocity_covariance.fill(0.0); - linear_acceleration_covariance.assign(0.0); + linear_acceleration_covariance.fill(0.0); } Imu_(const ContainerAllocator& _alloc) : header(_alloc) @@ -50,11 +50,11 @@ struct Imu_ , linear_acceleration(_alloc) , linear_acceleration_covariance() { (void)_alloc; - orientation_covariance.assign(0.0); + orientation_covariance.fill(0.0); - angular_velocity_covariance.assign(0.0); + angular_velocity_covariance.fill(0.0); - linear_acceleration_covariance.assign(0.0); + linear_acceleration_covariance.fill(0.0); } diff --git a/fpsdk_common/src/cam.cpp b/fpsdk_common/src/cam.cpp index ca43766..f436a1a 100644 --- a/fpsdk_common/src/cam.cpp +++ b/fpsdk_common/src/cam.cpp @@ -301,7 +301,7 @@ bool CamStreamImpl::Connect() // Connect TRACE("CamStream(%s) connect %s:%" PRIu16, params_.name_.c_str(), - endpoints->endpoint().address().to_string().c_str(), endpoints->endpoint().port()); + endpoints.begin()->endpoint().address().to_string().c_str(), endpoints.begin()->endpoint().port()); ResetTimeout(); stream_.connect(endpoints, ec); if (ec) { diff --git a/fpsdk_doc/fpsdk-overview.drawio.svg b/fpsdk_doc/fpsdk-overview.drawio.svg index 1622878..dacf2c2 100644 --- a/fpsdk_doc/fpsdk-overview.drawio.svg +++ b/fpsdk_doc/fpsdk-overview.drawio.svg @@ -1,4 +1,4 @@ - + @@ -234,7 +234,7 @@ - + @@ -287,7 +287,7 @@ - +
@@ -306,7 +306,7 @@ - + @@ -608,10 +608,10 @@ - + - +
@@ -1093,23 +1093,23 @@ - + -
+
Humble,
- Jazzy + Jazzy, Lyrical
- + Humble,... @@ -1282,7 +1282,7 @@ - + @@ -1307,7 +1307,7 @@ - + @@ -1353,7 +1353,7 @@ - + @@ -1430,7 +1430,7 @@ - + @@ -1526,10 +1526,6 @@ - - - - diff --git a/fpsdk_doc/fpsdk_build.hpp b/fpsdk_doc/fpsdk_build.hpp index a6a1f74..c12e8b4 100644 --- a/fpsdk_doc/fpsdk_build.hpp +++ b/fpsdk_doc/fpsdk_build.hpp @@ -48,7 +48,7 @@ namespace fpsdk { - PROJ (*) (≥ 9.4.x) - FFmpeg (libavcodec, libavutil, ...) (**) (= 7.1.x) - ROS1 (*) (Noetic), or - - ROS2 (*) (Humble or Jazzy) + - ROS2 (*) (Humble, Jazzy or Lyrical) (*) Optional dependencies. Without these some functionality in the libraries and apps is unavailable (compiled out). @@ -118,6 +118,7 @@ namespace fpsdk { ./docker/docker.sh run noetic-ci ./docker/ci.sh ./docker/docker.sh run humble-ci ./docker/ci.sh ./docker/docker.sh run jazzy-ci ./docker/ci.sh + ./docker/docker.sh run lyrical-ci ./docker/ci.sh @endcode @@ -256,6 +257,11 @@ namespace fpsdk { The builds using ROS Jazzy (Ubuntu 24.04 LTS "Noble") currently use: @include fpsdk_common_versions_jazzy/fpsdk_common/fpsdk_common_versions.txt + + + The builds using ROS Lyrical (Ubuntu 26.04 LTS "Raccoon") currently use: + + @include fpsdk_common_versions_lyrical/fpsdk_common/fpsdk_common_versions.txt */ // clang-format on diff --git a/fpsdk_ros2/CMakeLists.txt b/fpsdk_ros2/CMakeLists.txt index fa21483..2dfc575 100644 --- a/fpsdk_ros2/CMakeLists.txt +++ b/fpsdk_ros2/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.16) include(../fpsdk_common/cmake/setup.cmake) project(fpsdk_ros2 - LANGUAGES CXX + LANGUAGES CXX C VERSION ${FPSDK_VERSION_NUMBER} DESCRIPTION "Fixposition SDK: ROS2 library" )