Tools Libraries Dependencies - Forestry-Robotics-UC/fruc_dataset_apparatus GitHub Wiki

Tools, Languages, and Libraries

Overview

This document lists all programming languages, frameworks, tools, and libraries used in the FRUC Dataset Apparatus system.

Programming Languages

Language Purpose Version Notes
Bash Shell scripting 5.0+ Main orchestration language for launch scripts
Python 3 ROS driver scripting 3.10+ Used in launch scripts and utilities
C++ ROS packages, drivers C++17 Compiled components in sensor drivers

Core Frameworks

ROS2 (Robot Operating System 2)

  • Distribution: Jazzy (LTS)
  • Installation: Pre-installed in Docker base images (ros:jazzy-ros-base)
  • Key Components:
    • ros2 launch - Launch system for starting nodes
    • ros2 bag - Rosbag recording and playback
    • ros2 topic - Topic introspection
    • colcon - Build system and package manager

Docker & Container Orchestration

Component Version Platform Notes
Docker 20.10+ Desktop/Workstation Standard container runtime
Docker Compose 1.29+ Desktop/Workstation Container orchestration (docker-compose)
Podman 3.0+ SteamDeck, optional desktop Drop-in Docker replacement, rootless by default
Podman Compose 1.0+ SteamDeck, optional desktop Compatible with docker-compose.yml files
Base Image Latest All platforms ros:jazzy-ros-base - Official ROS2 Jazzy minimal image

Platform Selection:

  • Desktop/Workstation: Use Docker and docker-compose (standard installation)
  • SteamDeck: Use Podman (pre-installed) and podman-compose
  • Script Compatibility: Launch scripts automatically detect and use the correct runtime

Command Compatibility:

  • Podman and Docker use identical OCI image format and docker-compose.yml syntax
  • Simply replace dockerpodman and docker-composepodman-compose
  • Container images built with Docker work seamlessly on Podman and vice versa

Containerized Sensor Drivers

Sensor Driver Packages

Sensor Driver Package Source Container
Xsens IMU norlab_xsens_driver github.com/norlab-ulaval/norlab_xsens_driver Dockerfile.xsens
RealSense D435i realsense2 + realsense-ros github.com/IntelRealSense Dockerfile.realsense
Ouster LiDAR ouster-ros github.com/errorcodecritical/ouster-ros Dockerfile.ouster
Emlid GNSS nmea_navsat_driver github.com/ros-drivers/nmea_navsat_driver Dockerfile.emlid

Dependency Libraries for Sensors

RealSense (Intel):

  • librealsense2 - Main SDK library (built from source)
  • ros-jazzy-cv-bridge - OpenCV bridge
  • ros-jazzy-image-transport - Image transport layer
  • ros-jazzy-sensor-msgs - ROS2 sensor message types
  • libusb-1.0-0-dev - USB communication library

Ouster:

  • ouster-ros (ROS2 branch)
  • UDP packet parsing for LiDAR data
  • Point cloud generation libraries

Xsens:

  • norlab_xsens_driver (ROS2 Jazzy branch)
  • Serial communication libraries
  • IMU data parsing

Emlid/GNSS:

  • nmea_navsat_driver - NMEA protocol parsing
  • Serial/network interface libraries

Recording and Visualization

Recording Tools

Tool Package Purpose
hector_recorder hector_recorder Custom ROS2 recording tool with advanced filtering
ros2 bag record ROS2 built-in Standard ROS2 rosbag recording
MCAP Built-in format support Recording format container

Recording Dependencies:

  • hector_recorder - github.com/tu-darmstadt-ros-pkg/hector_recorder
  • hector_recorder_msgs - Message definitions for recorder
  • ZSTD compression library (multi-profile support)

Visualization and Monitoring

Tool Type Purpose
Foxglove Bridge Docker image Web-based ROS2 visualization via port 9092
RViz ROS2 tool Configuration files for local visualization
greenwave_monitor ROS2 package Performance and health monitoring (NVIDIA Isaac ROS)

Visualization Dependencies:

  • foxglove-bridge - Bridge container (mjpc13/foxglove-bridge:latest)
  • RViz configuration files in /rviz/ directory

Build System and Compilation Tools

Compilation Stack

Tool Version Purpose
colcon Latest ROS2 build orchestrator
CMake 3.16+ Build configuration
GCC/G++ 11+ C++ compiler (in build-essential)
git 2.25+ Version control and source fetching

Package Managers

Manager Purpose
apt Ubuntu package management (inside containers)
pip Python package installation
rosdep ROS dependency resolver

Build Dependencies (Installed in Containers)

build-essential      # Compiler toolchain
git                  # Source control
python3-colcon-common-extensions  # Colcon plugins
python3-rosdep       # ROS dependency resolution
python3-pip          # Python packages
cmake                # Build configuration
wget                 # File downloading

Development Tools

Container Management Tools

For Desktop (Docker):

Tool Purpose Required For
docker Container runtime All Docker operations
docker-compose Container orchestration Starting sensor containers

For SteamDeck (Podman):

Tool Purpose Required For
podman Container runtime (drop-in Docker replacement) All Podman operations
podman-compose Container orchestration (compatible with docker-compose.yml) Starting sensor containers

Launch System Tools

Tool Purpose Required For
kdialog KDE dialog boxes Interactive GUI mode (launch-system.sh)
zenity GNOME dialog boxes Interactive GUI mode (gnome-launch-system.sh)
bash Shell interpreter All shell scripts

System Configuration

Tool Purpose
udev rules Device permission management (RealSense)
serial terminal Direct device communication
tty-perms.sh Serial port permission setup script

Python Utilities

Script Purpose
mtnode.py Xsens driver node initialization
mtdevice.py Xsens device communication library
ouster.launch.py Ouster ROS2 launch configuration
emlid_reach.launch.py Emlid ROS2 launch configuration

Message Types and Protocols

ROS2 Message Types Used

Message Type Package Purpose
sensor_msgs/Imu ros-jazzy-sensor-msgs IMU data from Xsens and Ouster
sensor_msgs/MagneticField ros-jazzy-sensor-msgs Magnetometer readings
sensor_msgs/Image ros-jazzy-sensor-msgs Camera images from RealSense
sensor_msgs/CameraInfo ros-jazzy-sensor-msgs Camera calibration data
sensor_msgs/PointCloud2 ros-jazzy-sensor-msgs LiDAR point clouds
sensor_msgs/NavSatFix ros-jazzy-sensor-msgs GNSS position data
geometry_msgs/TransformStamped ros-jazzy-geometry-msgs Transform frames (TF)
tf2 ros-jazzy-tf2 Transform library

Custom Message Types

  • ouster_sensor_msgs - Ouster-specific packet types
  • hector_recorder_msgs - Recorder control messages

Communication Protocols

Protocol Used By Purpose
Serial (RS232/USB) Xsens IMU Direct sensor communication
USB 3.0 RealSense camera High-bandwidth image data
Ethernet (link-local) Ouster LiDAR Network packet streaming
Serial/UDP Emlid GNSS Position data
DDS (ROS2) All containers Inter-process communication

Operating System Dependencies

Linux Distribution

  • Ubuntu 22.04 LTS (recommended)
  • Ubuntu 24.04 LTS (compatible)
  • SteamOS (with Linux environment)

System Libraries

Library Purpose
libssl TLS/SSL support
libusb USB device communication
libudev Device management
libx11 X11 display server (for visualization)
libgl1-mesa OpenGL graphics library

Kernel Modules

  • usbhid - USB human interface devices
  • ftdi_sio - FTDI USB serial driver
  • Standard Ethernet networking

Version Compatibility Matrix

Supported Combinations

Component Version Compatibility
ROS2 Jazzy Primary (documented)
ROS2 Humble Secondary (legacy rosbag format)
Docker 20.10+ All versions work
Ubuntu 22.04+ Recommended base
Python 3.10+ All drivers compatible
C++ Standard C++17 Build requirement

Legacy Support

  • ROS1 branch exists but is legacy
  • Docker image compatibility: ros:jazzy-ros-base is primary base
  • Older sensor drivers may require version adjustments

Configuration Files

YAML Configuration Files

File Purpose Location
ouster_config.yaml Ouster LiDAR settings docker_shared/ouster_config.yaml

Launch Files (Python)

File Purpose
robot_state_publisher.launch.py TF publisher configuration
view_robot.launch.py RViz visualization setup
robot_description.launch.py URDF loading
rs_launch.py RealSense camera launch
ouster.launch.py Ouster LiDAR launch
xsens-launch.sh Xsens IMU launch
emlid-launch.sh Emlid GNSS launch

Summary: Dependency Tree

FRUC Dataset Apparatus
├── ROS2 Jazzy
│   ├── Colcon (build system)
│   ├── DDS (ROS Mid-layer)
│   ├── Standard ROS2 packages
│   │   ├── sensor_msgs
│   │   ├── geometry_msgs
│   │   └── tf2
│   └── ROS2 tools
│       ├── ros2 bag
│       ├── ros2 launch
│       └── ros2 topic
├── Docker & Containers
│   ├── ros:jazzy-ros-base (base image)
│   ├── Ubuntu 22.04 LTS
│   └── Build tools (CMake, GCC, git)
├── Sensor Drivers
│   ├── Xsens: norlab_xsens_driver
│   ├── RealSense: realsense-ros + librealsense2
│   ├── Ouster: ouster-ros
│   └── Emlid: nmea_navsat_driver
├── Recording
│   ├── hector_recorder
│   ├── ros2 bag record
│   └── ZSTD compression
├── Visualization
│   ├── Foxglove Bridge
│   └── RViz (optional)
└── Development Tools
    ├── kdialog (GUI)
    ├── Python 3.10+
    └── System utilities (git, wget, cmake)

Environment Variables

Variable Purpose Example
ROS_DOMAIN_ID DDS domain isolation 11 (default)
DISPLAY X11 display for GUI :0 or :1
OUSTER_HOSTNAME Ouster sensor network address 169.254.49.182
TOPICS Recording topic list Environment from .env file

Networking Requirements

Port/Protocol Service Direction
UDP 7502 Ouster LiDAR data Inbound
TCP 9092 Foxglove Bridge HTTP Outbound to client
TCP/UDP 67-68 DHCP (if using) Device network
TCP 5900 VNC (optional) Remote visualization

Last Updated: 2026-03-30
For detailed setup instructions, see: Installation Setup