{ "cells": [ { "cell_type": "markdown", "source": [ "[← Dynamical Systems as ROS Nodes](../../../getting_started/python_to_ros/dynamical_systems_as_ros_nodes.rst)\n" ], "id": "cell-0", "metadata": {} }, { "cell_type": "markdown", "source": [ "# Crazyflie Multi-Sensor Fusion: From Python to ROS2\n" ], "id": "cell-1", "metadata": {} }, { "cell_type": "markdown", "source": [ "In the [Crazyflie Sensor Fusion](../theory_to_python/crazyflie_sensor_fusion.ipynb) tutorial, we designed a multi-sensor Kalman filter system in Python. Now we'll deploy this system as ROS2 nodes, demonstrating a more complex architecture with **three separate sensor nodes**.\n", "\n", "**Key Insight**: Multi-sensor fusion maps naturally to ROS!\n", "\n", "Unlike single-sensor systems (like TurtleBot), the Crazyflie has:\n", "- **Three sensor nodes**: Motion capture, barometer, IMU\n", "- **One fusion node**: Kalman filter subscribing to all three\n", "\n", "This demonstrates how ROS handles multi-rate, heterogeneous sensor systems.\n" ], "id": "cell-2", "metadata": {} }, { "cell_type": "markdown", "id": "cell-conceptual-foundation", "metadata": {}, "source": "# Conceptual Foundation: From Dynamical Systems to ROS Nodes\n\nRecall from the [Crazyflie Sensor Fusion](../theory_to_python/crazyflie_sensor_fusion.ipynb) tutorial that we represented our multi-sensor fusion system as a composition of dynamical systems:\n\n