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
docker → podman and docker-compose → podman-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