diff --git a/.github/workflows/ros2.yaml b/.github/workflows/ros2.yaml index 145b2c847..de3e7c6dd 100644 --- a/.github/workflows/ros2.yaml +++ b/.github/workflows/ros2.yaml @@ -9,6 +9,7 @@ jobs: env: - {ROS_DISTRO: foxy, ROS_REPO: main} - {ROS_DISTRO: galactic, ROS_REPO: main} + - {ROS_DISTRO: humble, ROS_REPO: main} - {ROS_DISTRO: rolling, ROS_REPO: main} runs-on: ubuntu-latest steps: diff --git a/.github/workflows/snap.yaml b/.github/workflows/snap.yaml index c0caee4f2..a231dd1a3 100644 --- a/.github/workflows/snap.yaml +++ b/.github/workflows/snap.yaml @@ -47,3 +47,41 @@ jobs: with: snap: ${{needs.build.outputs.snap-file}} release: ${{ startsWith(github.ref, 'refs/tags/') && 'candidate' || 'edge'}} + + build22: + runs-on: ubuntu-latest + outputs: + snap-file: ${{ steps.build-snap22.outputs.snap }} + steps: + - uses: actions/checkout@v2 + with: + # full history for latest tag name + fetch-depth: 0 + - run: rm -r snap && mv snap_core22 snap + - uses: snapcore/action-build@v1 + id: build-snap22 + + # Make sure the snap is installable + - run: | + sudo snap install --dangerous ${{ steps.build-snap22.outputs.snap }} + + - uses: actions/upload-artifact@v3 + with: + name: plotjuggler-snap22 + path: ${{ steps.build-snap22.outputs.snap }} + + publish22: + if: github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + needs: build22 + steps: + - uses: actions/download-artifact@v3 + with: + name: plotjuggler-snap22 + path: . + - uses: snapcore/action-publish@v1 + env: + SNAPCRAFT_STORE_CREDENTIALS: ${{ secrets.STORE_LOGIN }} + with: + snap: ${{needs.build.outputs.snap-file}} + release: humble/${{ startsWith(github.ref, 'refs/tags/') && 'candidate' || 'edge'}} diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index e90cd5e93..d2b10d9bb 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -232,7 +232,6 @@ parts: - ros-foxy-object-recognition-msgs - ros-foxy-octomap-msgs - ros-foxy-ouster-msgs - - ros-foxy-pacmod-msgs - ros-foxy-pcl-msgs - ros-foxy-pendulum-msgs - ros-foxy-phidgets-msgs diff --git a/snap_core22/gui/PlotJuggler.desktop b/snap_core22/gui/PlotJuggler.desktop new file mode 100644 index 000000000..da513636b --- /dev/null +++ b/snap_core22/gui/PlotJuggler.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Type=Application +Name=PlotJuggler +Exec=plotjuggler +Icon=${SNAP}/meta/gui/plotjuggler.svg +Comment=Visualize timeseries like a pro +Terminal=false +Categories=Development; +Name[en_US]=PlotJuggler diff --git a/snap_core22/gui/plotjuggler.svg b/snap_core22/gui/plotjuggler.svg new file mode 100644 index 000000000..0a51f6fc7 --- /dev/null +++ b/snap_core22/gui/plotjuggler.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/snap_core22/local/fastdds_no_shared_memory.xml b/snap_core22/local/fastdds_no_shared_memory.xml new file mode 100644 index 000000000..a4f010566 --- /dev/null +++ b/snap_core22/local/fastdds_no_shared_memory.xml @@ -0,0 +1,19 @@ + + + + + CustomUdpTransport + UDPv4 + + + + + + + CustomUdpTransport + + + false + + + diff --git a/snap_core22/local/launcher-plotjuggler-ros2 b/snap_core22/local/launcher-plotjuggler-ros2 new file mode 100755 index 000000000..b39a73f54 --- /dev/null +++ b/snap_core22/local/launcher-plotjuggler-ros2 @@ -0,0 +1,10 @@ +#!/bin/bash + +# Paths to ROS 2 plugins +export PLUGIN_FOLDERS=$SNAP/opt/ros/snap/lib/plotjuggler_ros +export AMENT_PREFIX_PATH=$SNAP/opt/ros/humble +# Disable FastDDS shared-memory +export FASTRTPS_DEFAULT_PROFILES_FILE=${SNAP}/usr/share/fastdds_no_shared_memory.xml + +${SNAP}/usr/local/bin/plotjuggler --plugin_folders $PLUGIN_FOLDERS $@ + diff --git a/snap_core22/local/plotjuggler.rosinstall b/snap_core22/local/plotjuggler.rosinstall new file mode 100644 index 000000000..ea012ab97 --- /dev/null +++ b/snap_core22/local/plotjuggler.rosinstall @@ -0,0 +1,2 @@ +- git: {local-name: plotjuggler-ros-plugins, uri: 'https://github.com/PlotJuggler/plotjuggler-ros-plugins.git', version: 1.7.3} +- git: {local-name: plotjuggler_msgs, uri: 'https://github.com/facontidavide/plotjuggler_msgs.git', version: main} diff --git a/snap_core22/snapcraft.yaml b/snap_core22/snapcraft.yaml new file mode 100644 index 000000000..58e45eaf2 --- /dev/null +++ b/snap_core22/snapcraft.yaml @@ -0,0 +1,262 @@ +name: plotjuggler +adopt-info: plotjuggler # parse metadata from the plotjuggler part +summary: The timeseries visualization tool that you deserve +description: | + QT5 based application to display time series in plots, + using an intuitive "drag and drop" interface. + + The snap comes with only ROS 2 plugins. + You can launch it with + + $ plotjuggler + + launching PlotJuggler with ROS 2 plugins by default. + +issues: https://github.com/facontidavide/plotjuggler/issues +source-code: https://github.com/facontidavide/plotjuggler +license: MPL-2.0 + +confinement: strict +base: core22 + +apps: + plotjuggler: + command: usr/bin/launcher-plotjuggler-ros2 + plugs: [network, network-bind, home, removable-media] + extensions: [kde-neon, ros2-humble] + +parts: + plotjuggler: + plugin: cmake + source: . + cmake-parameters: + - -DCMAKE_BUILD_TYPE=Release + - "-DCMAKE_PREFIX_PATH=$(echo $SNAPCRAFT_CMAKE_ARGS | awk -F= '{printf(\"%s/usr/lib/$CRAFT_ARCH_TRIPLET/cmake/Qt5\", $2)}')" + build-packages: + - distro-info-data + - libpulse0 + - libdw-dev + - libbfd-dev + - libdwarf-dev + - libprotoc-dev + - libgl-dev + - libmosquitto-dev + - libzmq3-dev + - libzstd-dev + stage-packages: + - libdw1 + - libmosquitto1 + - libprotobuf23 + - libprotobuf-dev + - libzmq5 + - libzstd1 + - libfreetype6 + override-pull: | + craftctl default + git config --global --add safe.directory '*' + version="$(git describe --always --tags| sed -e 's/^v//;s/-/+git/;y/-/./')" + [ -n "$(echo $version | grep "+git")" ] && grade=devel || grade=stable + craftctl set version="$version" + craftctl set grade="$grade" + + # Necessary to bypass XDG desktop portals because ROS 2 bags metadata.yaml are refering db3 files relatively + sed -i '/QApplication app(new_argc, new_argv.data());/a QCoreApplication::setAttribute(Qt::AA_DontUseNativeDialogs);' plotjuggler_app/main.cpp + + plotjuggler-ros2: + after: [plotjuggler] + plugin: colcon + source: . + colcon-cmake-args: + - -DCMAKE_BUILD_TYPE=Release + - -DBUILD_TESTING=OFF + - -DBUILD_DOCS=OFF + # point to previously build plotjuggler + - -Dplotjuggler_DIR:PATH=$CRAFT_STAGE/usr/local/lib/cmake/plotjuggler + # Due to https://github.com/ament/ament_cmake/issues/189 implicity OpenSSL link breaks. So we change CMAKE_PREFIX_PATH and not CMAKE_FIND_ROOT_PATH + - -DCMAKE_PREFIX_PATH=$(echo $SNAPCRAFT_CMAKE_ARGS | awk -F= '{printf("%s/usr/lib/x86_64-linux-gnu/cmake/Qt5", $2)}') + - --event-handlers=console_direct+ + build-packages: + - git + - python3-vcstool + - ros-humble-ros-core + - patchelf + stage-packages: + # ROS 2 plugin need to source messages to plot them + # No custom message is going to be support for now + - ros-humble-ackermann-msgs + - ros-humble-action-msgs + - ros-humble-actionlib-msgs + - ros-humble-actuator-msgs + - ros-humble-apriltag-msgs + - ros-humble-aruco-msgs + - ros-humble-aruco-opencv-msgs + - ros-humble-automotive-autonomy-msgs + - ros-humble-automotive-navigation-msgs + - ros-humble-automotive-platform-msgs + - ros-humble-autoware-auto-msgs + - ros-humble-can-msgs + - ros-humble-cartographer-ros-msgs + - ros-humble-cascade-lifecycle-msgs + - ros-humble-control-msgs + - ros-humble-controller-manager-msgs + - ros-humble-create-msgs + - ros-humble-dataspeed-dbw-msgs + - ros-humble-dataspeed-ulc-msgs + - ros-humble-dbw-fca-msgs + - ros-humble-dbw-ford-msgs + - ros-humble-dbw-polaris-msgs + - ros-humble-delphi-esr-msgs + - ros-humble-delphi-mrr-msgs + - ros-humble-delphi-srr-msgs + - ros-humble-depthai-ros-msgs + - ros-humble-derived-object-msgs + - ros-humble-diagnostic-msgs + - ros-humble-dwb-msgs + - ros-humble-dynamixel-workbench-msgs + - ros-humble-foros-msgs + - ros-humble-four-wheel-steering-msgs + - ros-humble-foxglove-msgs + - ros-humble-gazebo-msgs + - ros-humble-geographic-msgs + - ros-humble-geometry-msgs + - ros-humble-gps-msgs + - ros-humble-graph-msgs + - ros-humble-grasping-msgs + - ros-humble-grbl-msgs + - ros-humble-grid-map-msgs + - ros-humble-ibeo-msgs + - ros-humble-irobot-create-msgs + - ros-humble-kartech-linear-actuator-msgs + - ros-humble-leo-msgs + - ros-humble-lgsvl-msgs + - ros-humble-lifecycle-msgs + - ros-humble-map-msgs + - ros-humble-marker-msgs + - ros-humble-marti-can-msgs + - ros-humble-marti-common-msgs + - ros-humble-marti-dbw-msgs + - ros-humble-marti-introspection-msgs + - ros-humble-marti-nav-msgs + - ros-humble-marti-perception-msgs + - ros-humble-marti-sensor-msgs + - ros-humble-marti-status-msgs + - ros-humble-marti-visualization-msgs + - ros-humble-marvelmind-ros2-msgs + - ros-humble-mavros-msgs + - ros-humble-micro-ros-diagnostic-msgs + - ros-humble-micro-ros-msgs + - ros-humble-microstrain-inertial-msgs + - ros-humble-mobileye-560-660-msgs + - ros-humble-moveit-msgs + - ros-humble-mrpt-msgs + - ros-humble-nao-command-msgs + - ros-humble-nao-sensor-msgs + - ros-humble-nav-2d-msgs + - ros-humble-nav-msgs + - ros-humble-nav2-msgs + - ros-humble-neobotix-usboard-msgs + - ros-humble-nmea-msgs + - ros-humble-novatel-gps-msgs + - ros-humble-novatel-oem7-msgs + - ros-humble-object-recognition-msgs + - ros-humble-octomap-msgs + - ros-humble-ouster-msgs + - ros-humble-pal-statistics-msgs + - ros-humble-pcl-msgs + - ros-humble-pendulum-msgs + - ros-humble-phidgets-msgs + - ros-humble-plansys2-msgs + - ros-humble-play-motion2-msgs + - ros-humble-polygon-msgs + - ros-humble-radar-msgs + - ros-humble-raspimouse-msgs + - ros-humble-rc-common-msgs + - ros-humble-rc-reason-msgs + - ros-humble-rclpy-message-converter-msgs + - ros-humble-rcss3d-agent-msgs + - ros-humble-realsense2-camera-msgs + - ros-humble-rmf-api-msgs + - ros-humble-rmf-building-map-msgs + - ros-humble-rmf-charger-msgs + - ros-humble-rmf-dispenser-msgs + - ros-humble-rmf-door-msgs + - ros-humble-rmf-fleet-msgs + - ros-humble-rmf-ingestor-msgs + - ros-humble-rmf-lift-msgs + - ros-humble-rmf-obstacle-msgs + - ros-humble-rmf-scheduler-msgs + - ros-humble-rmf-site-map-msgs + - ros-humble-rmf-task-msgs + - ros-humble-rmf-traffic-msgs + - ros-humble-rmf-visualization-msgs + - ros-humble-rmf-workcell-msgs + - ros-humble-robot-calibration-msgs + - ros-humble-robot-controllers-msgs + - ros-humble-rosapi-msgs + - ros-humble-rosbridge-msgs + - ros-humble-rosbridge-test-msgs + - ros-humble-rosgraph-msgs + - ros-humble-rtabmap-msgs + - ros-humble-rtcm-msgs + - ros-humble-rviz-2d-overlay-msgs + - ros-humble-sensor-msgs + - ros-humble-sensor-msgs-py + - ros-humble-shape-msgs + - ros-humble-soccer-object-msgs + - ros-humble-soccer-vision-2d-msgs + - ros-humble-soccer-vision-3d-msgs + - ros-humble-soccer-vision-attribute-msgs + - ros-humble-statistics-msgs + - ros-humble-std-msgs + - ros-humble-stereo-msgs + - ros-humble-stubborn-buddies-msgs + - ros-humble-system-modes-msgs + - ros-humble-teleop-tools-msgs + - ros-humble-test-msgs + - ros-humble-tf2-geometry-msgs + - ros-humble-tf2-msgs + - ros-humble-tf2-sensor-msgs + - ros-humble-trajectory-msgs + - ros-humble-turtlebot3-msgs + - ros-humble-turtlebot4-msgs + - ros-humble-tuw-geometry-msgs + - ros-humble-ublox-msgs + - ros-humble-ublox-ubx-msgs + - ros-humble-udp-msgs + - ros-humble-unique-identifier-msgs + - ros-humble-ur-dashboard-msgs + - ros-humble-ur-msgs + - ros-humble-urg-node-msgs + - ros-humble-velodyne-msgs + - ros-humble-vision-msgs + - ros-humble-visualization-msgs + - ros-humble-webots-ros2-msgs + - ros-humble-wiimote-msgs + - ros-humble-wireless-msgs + + # Additional DDS vendors + - ros-humble-rmw-cyclonedds-cpp + - ros-humble-rmw-fastrtps-cpp + - ros-humble-rmw-gurumdds-cpp + - ros-humble-rmw-connextdds + override-pull: | + if [ ! -d plotjuggler-ros-plugins ]; then + + vcs import < /root/parts/plotjuggler/src/snap/local/plotjuggler.rosinstall + + # prevent rosdep from installing plotjuggler + sed -i "s|plotjuggler||" plotjuggler-ros-plugins/package.xml + + # add plotjuggler_LIBRARIES link + sed -i '/\${Qt5Xml_LIBRARIES}/a ${plotjuggler_LIBRARIES}' plotjuggler-ros-plugins/plugins/CMakeLists.txt + + # Qt dependencies are managed by the kde neon-extension + sed -i '/qt/d' plotjuggler-ros-plugins/package.xml + fi + + fastdds-no-shared-memory: + plugin: dump + source: snap/local/ + organize: + 'fastdds_no_shared_memory.xml': usr/share/ + 'launcher-plotjuggler*': usr/bin/