Skip to main content

SDK for mission planning

Project description

๐ŸŒฟ LeafSDK

๐Ÿ— High-Level Architecture

Component Description
LeafSDK Core Main Python library for mission planning, gimbal control, vision-based landing, etc.
MAVLink Interface Communicates with LeafFC through MAVLink Router
Mission Planner High-level user API to define missions (waypoints, conditionals, checkpoints)
Gimbal Controller Gimbal control abstraction (positioning, stabilization)
Vision Module Vision-based landing, precision landing helpers
Service Daemon Python service running on the mission computer, keeping connection alive
CLI Tool (Optional) For simple mission upload/test
Example Applications Templates for common mission scripts
Internal Utilities Common classes for timeouts, retries, MAVLink message generation etc.

๐Ÿ“ˆ Full Architecture Diagram for LeafSDK

           +-----------------------+
           |  User Mission Scripts |
           | (Python Programs)     |
           +----------+------------+
                      |
                      v
          +------------------------+
          |      LeafSDK Core      |
          |                        |
          | Mission Planner        |
          | Gimbal Controller      |
          | Vision Landing         |
          | Condition Manager      |
          +------------------------+
                      |
                      v
         +---------------------------+
         |  MAVLink Interface Layer  |
         |  (pymavlink)              |
         +---------------------------+
                      |
                      v
       +---------------------------------+
       |      MAVLink Router Service     |
       | (forwarding UDP/TCP messages)   |
       +---------------------------------+
                      |
                      v
              +-------------------+
              |     LeafFC        |
              |  (Flight Control  |
              |    Firmware)      |
              +-------------------+

๐Ÿ“š Code / Library Structure

src/
โ”‚
โ”œโ”€โ”€ __init__.py
โ”‚
โ”œโ”€โ”€ connection/                      # MAVLink connection layer
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ mavlink_interface.py        # Low-level MAVLink connection handling
โ”‚   โ”œโ”€โ”€ heartbeat_monitor.py        # Check heartbeat / link health
โ”‚   โ””โ”€โ”€ connection_manager.py       # High-level connect/health lifecycle
โ”‚
โ”œโ”€โ”€ core/                            # High-level drone 
mavlink
โ”‚
โ”œโ”€โ”€ [mavlink submodule]/             # Mavlink submodule
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚
โ”‚   โ”œโ”€โ”€ gimbal/                      # Gimbal pitch/yaw/roll control
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ””โ”€โ”€ gimbal_controller.py
โ”‚
โ”‚   โ”œโ”€โ”€ mission/                     # Mission planner and waypoint logic
โ”‚   โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”‚   โ”œโ”€โ”€ waypoint.py
โ”‚   โ”‚   โ”œโ”€โ”€ condition.py
โ”‚   โ”‚   โ””โ”€โ”€ mission_planner.py
โ”‚
โ”‚   โ””โ”€โ”€ vision/                      # Camera-based features
โ”‚       โ”œโ”€โ”€ __init__.py
โ”‚       โ”œโ”€โ”€ vision_landing.py       # ArUco marker detection for landing
โ”‚       โ””โ”€โ”€ camera_stabilizer.py    # Optical flow drift estimation
โ”‚
โ”œโ”€โ”€ service/                         # Persistent background service
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ leaf_service.py             # Main entry point
โ”‚   โ”œโ”€โ”€ service_manager.py          # Controls lifecycle of connection/loop
โ”‚   โ””โ”€โ”€ health_checker.py           # Monitors heartbeat and battery
โ”‚
โ”œโ”€โ”€ cli/                             # Command-line interface (leafcli)
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ leafcli.py                  # CLI dispatcher
โ”‚   โ”œโ”€โ”€ upload.py                   # Upload mission
โ”‚   โ”œโ”€โ”€ validate.py                 # Validate mission file
โ”‚   โ”œโ”€โ”€ start.py                    # Start mission
โ”‚   โ”œโ”€โ”€ abort.py                    # Abort mission
โ”‚   โ”œโ”€โ”€ monitor.py                  # Live mission monitor
โ”‚   โ””โ”€โ”€ wizard.py                   # Interactive mission builder
โ”‚
โ”œโ”€โ”€ utils/                           # Utility modules shared across SDK
โ”‚   โ”œโ”€โ”€ __init__.py
โ”‚   โ”œโ”€โ”€ logger.py                   # Rich-formatted global logger
โ”‚   โ””โ”€โ”€ mavlink_helpers.py          # MAVLink message helpers (optional)
โ”‚
โ”œโ”€โ”€ examples/                        # Usage examples and demos
โ”‚   โ”œโ”€โ”€ example_mission.py
โ”‚   โ”œโ”€โ”€ example_gimbal.py
โ”‚   โ”œโ”€โ”€ example_vision_landing.py
โ”‚
โ””โ”€โ”€ setup.py                         # setuptools config for installation

๐Ÿงฉ Core Functionality

1. connection/

a. mavlink_interface.py

  • Handles MAVLink connection (UDP/TCP/Serial)
  • Heartbeat wait and validation
  • Message send/receive interface
  • Auto-reconnect logic ready

b. heartbeat_monitor.py

  • Monitors heartbeat periodically
  • Detects connection loss

c. connection_manager.py

  • High-level controller for connection + heartbeat
  • Clean connect/disconnect lifecycle

2. core/gimbal/

a. gimbal_controller.py

  • Controls gimbal pitch/yaw/roll
  • Supports forward/down camera presets
  • Ready for visual tracking input integration

3. core/mission/

a. mission_planner.py

  • Adds and manages waypoints
  • Uploads mission to LeafFC
  • Supports conditional logic for mission execution

b. waypoint.py

  • Defines structured waypoint format
  • Converts to MAVLink MISSION_ITEM

c. condition.py

  • Defines mission triggers (battery %, GPS lock, etc.)
  • Integrates into mission execution flow

4. core/vision/

a. vision_landing.py

  • Uses ArUco marker detection
  • Computes marker center for landing alignment
  • Designed to guide landing via vision

b. camera_stabilizer.py

  • Uses optical flow for drift detection
  • Frame-to-frame motion estimation for stabilization

5. service/

a. leaf_service.py

  • Main service loop with signal handling
  • Launches connection, heartbeat, and monitoring

b. service_manager.py

  • Initializes and manages runtime modules (gimbal, mission, vision)
  • Periodic update handler

c. health_checker.py

  • Reads SYS_STATUS and HEARTBEAT
  • Logs battery and connection status

6. cli/

a. leafcli.py

  • CLI entrypoint and dispatcher

b. upload.py

  • Uploads mission file to drone

c. validate.py

  • Validates structure and content of mission JSON

d. start.py

  • Starts mission with pre-flight checks

e. abort.py

  • Sends RTL (Return to Launch) or mission abort

f. monitor.py

  • Monitors live mission status and telemetry

g. wizard.py

  • Interactive CLI-based mission builder

7. utils/

a. logger.py

  • Centralized rich-based logger

b. mavlink_helpers.py

  • Factory functions to generate MAVLink messages
  • Parses heartbeat or SYS_STATUS into dict

8. examples/

a. example_mission.py

  • Shows how to build and upload a mission via SDK

b. example_gimbal.py

  • Demonstrates setting gimbal orientation

c. example_vision_landing.py

  • Detects landing field markers and prints coordinates

๐Ÿ”ฅ Example Usage

Note: You need to run as module, e.g. python3 -m src.test

from leafsdk.connection.mavlink_interface import MAVLinkInterface
from leafsdk.mission.mission_planner import MissionPlanner
from leafsdk.gimbal.gimbal_controller import GimbalController
from leafsdk.vision.vision_landing import VisionLanding
from leafsdk.service.leaf_service import LeafService

# Connect to LeafFC
mav = MAVLinkInterface("udp:127.0.0.1:14550")

# Plan a mission
mission = MissionPlanner(mav)
mission.add_waypoint(25.276987, 55.296249, 50)
mission.add_waypoint(25.277000, 55.296500, 50)
mission.add_checkpoint("midpoint")
mission.add_waypoint(25.277200, 55.296700, 10)  # Landing point
mission.upload_mission()

# Control gimbal
gimbal = GimbalController(mav)
gimbal.set_orientation(pitch=-90, yaw=0)

# Vision Landing (optional)
# vision = VisionLanding(camera_feed="/dev/video0", mav_interface=mav)
# vision.start_detection()
# vision.guide_landing()

# Start mission
mission.start_mission()

๐Ÿ›ฐ๏ธ Complex Mission Examples

Example A: Mission with Loop (Patrol Mission)

mission.add_waypoint(lat1, lon1, 30)
mission.add_waypoint(lat2, lon2, 30)
mission.add_checkpoint("patrol_point")
mission.add_waypoint(lat3, lon3, 30)

# After reaching last waypoint, go back to patrol point and repeat 3 times
mission.add_condition(LoopCondition(target_checkpoint="patrol_point", times=3))

This would allow continuous patrolling between points.


Example B: Mission with Failsafe (Return to Checkpoint if Battery Low)

mission.add_waypoint(lat1, lon1, 50)
mission.add_checkpoint("safe_point")

mission.add_waypoint(lat2, lon2, 10)

# Condition: if battery below 20%, go back to "safe_point"
mission.add_condition(BatteryBelowCondition(threshold=20, return_checkpoint="safe_point"))

Example C: Vision Based Landing (Dynamic landing)

vision = VisionLanding(camera_feed="/dev/video0", mav_interface=mav)
vision.start_detection()

# VisionLanding will constantly adjust landing coordinates
vision.guide_landing()

You can even blend GPS and Vision Landing together depending on use-case.


๐Ÿ“ฆ Packaging

  • Structure project with setup.py
  • Publish to a private/internal PyPI
  • Use setuptools and package as:
    pip install leafsdk/
    

Example setup.py:

from setuptools import setup, find_packages

setup(
    name="leafsdk",
    version="0.1.0",
    packages=find_packages(),
    install_requires=[
        "pymavlink",
        "opencv-python",
        "numpy",
        "scipy",
    ],
    entry_points={
        'console_scripts': [
            'leafcli=leafsdk.cli.leafcli:main',
        ],
    },
)

๐Ÿงฉ Mission JSON Format (for uploading via script or CLI)

Here's how you can define a Leaf Mission in JSON format:

{
  "mission_name": "inspection_mission_001",
  "start_takeoff_altitude": 30,
  "waypoints": [
    {
      "latitude": 25.276987,
      "longitude": 55.296249,
      "altitude": 30,
      "speed": 5,
      "checkpoint": "start"
    },
    {
      "latitude": 25.277500,
      "longitude": 55.297000,
      "altitude": 50,
      "speed": 5
    },
    {
      "latitude": 25.278000,
      "longitude": 55.297500,
      "altitude": 20,
      "speed": 3,
      "actions": [
        {
          "type": "gimbal_set",
          "pitch": -90,
          "yaw": 0
        }
      ]
    }
  ],
  "conditions": [
    {
      "type": "battery_above",
      "threshold": 30,
      "action": "continue"
    },
    {
      "type": "battery_below",
      "threshold": 20,
      "action": "return_to_checkpoint",
      "checkpoint": "start"
    }
  ],
  "landing": {
    "precision_landing": true
  }
}

Each waypoint can have actions (like adjusting gimbal, taking a photo).
You can define global mission conditions too (battery failsafe, timeouts, etc.).


๐ŸŒŸ Summary

Layer Example
SDK Core Python classes and modules
MAVLink pymavlink connection layer
Mission Planner High-level mission API
Gimbal Control Orientation, stabilization
Vision Visual landing capabilities
Packaging pip installable library
Service Systemd managed service
Example Scripts Provided inside examples/
Mission Format JSON-based, extendable
Mission Features Checkpoints, Looping, Failsafes, Vision Landing
Extensions Web API, Live Monitoring, OTA updates

LeafSDK Modules


๐Ÿ“ก LeafSDK Connection Module

The leafsdk.connection module provides all the functionality needed for establishing, maintaining, and monitoring MAVLink communication with the LeafFC flight controller.

It is designed to be robust, expandable, and operator-friendly, supporting rich logging and future extensions like automatic reconnection or multi-vehicle management.


๐Ÿ“ฆ Structure

File Purpose
mavlink_interface.py Core MAVLink connection handling (send, receive, heartbeat wait, close)
heartbeat_monitor.py Live monitoring of heartbeat signals to ensure link health
connection_manager.py High-level management of connection lifecycle (connect, health check, close)

โœˆ๏ธ Features

  • Easy-to-use MAVLink connection via UDP, TCP, Serial
  • Automatic heartbeat waiting at connection
  • Heartbeat-based link monitoring
  • Clean disconnection handling
  • Rich colorized logging with rich
  • Modular structure for easy upgrades (reconnect logic, multi-vehicle, etc.)

โš™๏ธ How to Use

1. Connect to the Drone

from leafsdk.connection.mavlink_interface import MAVLinkInterface

mav = MAVLinkInterface("udp:192.168.1.10:14550")

โœ… Automatically waits for heartbeat before proceeding.


2. Send and Receive Messages

# Send a MAVLink message
mav.send_message(my_message)

# Receive a specific type of message
msg = mav.receive_message(type='SYS_STATUS', timeout=5)
if msg:
    print(f"Battery remaining: {msg.battery_remaining}%")

3. Monitor Heartbeat

from leafsdk.connection.heartbeat_monitor import HeartbeatMonitor

monitor = HeartbeatMonitor(mav)
monitor.wait_for_heartbeat(timeout=10)
if monitor.is_alive():
    print("Connection healthy โœ…")

4. High-Level Connection Management

from leafsdk.connection.connection_manager import ConnectionManager

conn = ConnectionManager("udp:192.168.1.10:14550")
conn.connect()

# Check connection health periodically
conn.check_health()

conn.close()

๐Ÿ›ก๏ธ Logging Example

All connection-related activities are logged clearly in the terminal:

[INFO] 16:24:15 - MAVLinkInterface - Connecting to udp:192.168.1.10:14550 ...
[SUCCESS] 16:24:18 - MAVLinkInterface - Heartbeat received โœ… (System ID: 1)
[INFO] 16:24:22 - HeartbeatMonitor - Waiting for heartbeat...
[SUCCESS] 16:24:24 - HeartbeatMonitor - Heartbeat received โœ… (System ID: 1)
[INFO] 16:24:30 - ConnectionManager - Connection healthy โœ….

โœ… Consistent
โœ… Colorized
โœ… Operator-friendly


๐Ÿ—๏ธ Future Improvements

  • Automatic reconnection if heartbeat is lost
  • Connection retries with exponential backoff
  • Multi-vehicle connection manager
  • Connection pooling for fleets
  • Logging to files for post-flight analysis

๐Ÿ“‹ Quick Reference

Task How
Open MAVLink connection MAVLinkInterface(connection_str)
Close MAVLink connection mav.close()
Monitor heartbeat manually HeartbeatMonitor(mav)
High-level connect/check/close ConnectionManager(connection_str)


๐Ÿš€ Get Connected and Fly!

The leafsdk.connection module ensures reliable, traceable, and safe communication between LeafSDK and the drone hardware โ€”
essential for every critical mission.


๐Ÿ› ๏ธ leafsdk.service โ€” LeafSDK Service Module


๐Ÿš€ Overview

The leafsdk.service module runs LeafSDK as a background mission service, managing the MAVLink connection, health monitoring, and preparing for future mission execution and automation.

It is designed to be run as a CLI, Docker container, or a systemd service on a mission computer or edge device.


๐Ÿ“ฆ Module Structure

File Description
leaf_service.py Main entry point for launching the service
service_manager.py Manages service lifecycle and connections
health_checker.py Periodically checks link, battery, and system health

โœˆ๏ธ Core Responsibilities

  • Establish and maintain a MAVLink connection to LeafFC
  • Continuously monitor heartbeat and battery status
  • Log system health to the terminal (colorized with rich)
  • Shut down safely on interrupt (e.g., Ctrl+C or signal)
  • Designed for extensibility (mission management, watchdogs)

๐Ÿงช Quick Start

๐Ÿ–ฅ๏ธ Run the Service

python3 -m leafsdk.service.leaf_service

This will:

  1. Connect to LeafFC (default: udp:127.0.0.1:14550)
  2. Wait for heartbeat
  3. Begin a loop to monitor health and print status

๐Ÿงฌ Runtime Behavior

[INFO] 12:00 - LeafService - Starting LeafService...
[SUCCESS] 12:01 - MAVLinkInterface - Heartbeat received โœ… (System ID: 1)
[INFO] 12:02 - HeartbeatMonitor - System 1 alive
[INFO] 12:02 - Battery: 72% remaining
...

โœ… Logs are colorized โœ… Service handles signals and disconnects gracefully


๐Ÿ“‹ Service Lifecycle

Phase Description
Start Connects to LeafFC, waits for heartbeat
Running Periodically checks system status and logs
Interrupt (SIGINT) Closes connection and shuts down cleanly

๐Ÿงฉ Example Usage in Code

from leafsdk.service.leaf_service import main
main("udp:192.168.1.10:14550")

or run from CLI:

python3 -m leafsdk.service.leaf_service --conn udp:192.168.1.10:14550

๐Ÿ”ง Parameterization (e.g., CLI flags for logging, debug, etc.) can be added as needed.


๐Ÿ›ก๏ธ Health Monitoring Features

Check Description
โœ… Heartbeat Warns if lost or missing
โšก Battery Warns below 30%, errors below 20%
(๐Ÿ›ฐ๏ธ GPS - Future) Check GPS fix status before takeoff

๐Ÿ“ฆ Ready for Production?

Yes. This service is:

  • โœ… Runnable via CLI or systemd
  • โœ… Logs errors clearly
  • โœ… Modular and extensible
  • ๐Ÿงฉ Ready for mission queuing, reconnection, simulation, or telemetry streaming

๐Ÿ—๏ธ Future Improvements

Feature Description
Mission Executor Run a mission automatically if uploaded
Auto-Reconnect Retry MAVLink connection on heartbeat loss
WebSocket/REST Interface Expose service data externally
Systemd Integration Run as background Linux service
Remote Logging Stream status to a central server or cloud dashboard

๐Ÿง  Summary

leafsdk.service turns your SDK into a live, autonomous mission daemon โ€” ready for flight, health tracking, mission uploads, and future mission execution. It forms the core background process that enables the rest of LeafSDK.


๐Ÿงญ leafsdk.core.mission โ€” Mission Planning Module


๐Ÿš€ Overview

The leafsdk.core.mission module provides a robust and flexible interface for creating, validating, and uploading autonomous drone missions to the LeafFC flight controller. It allows users to define waypoints, incorporate conditional logic, and manage the entire mission lifecycle programmatically or via CLI tools.


๐Ÿ—‚๏ธ Module Structure

File Description
mission_planner.py Core planner for building, uploading, and managing mission steps
waypoint.py Lightweight data structure representing a waypoint (lat, lon, alt, speed)
condition.py Define and evaluate conditions (e.g., battery level, GPS lock)

โœˆ๏ธ Core Features

  • Add and manage GPS waypoints
  • Upload full missions to the drone over MAVLink
  • Create and apply conditional mission triggers
  • Modular design for integration with service and CLI layers
  • Easy to extend for gimbal actions, vision, and return-to-launch

๐Ÿงฑ Waypoint Definition

Waypoints are defined using:

from leafsdk.core.mission.waypoint import Waypoint

wp = Waypoint(latitude=37.7749, longitude=-122.4194, altitude=20.0)

They can be converted to MAVLink mission items using:

wp.to_mavlink(seq=0)

๐Ÿง  Conditions (Optional Checks)

Conditions can be used to delay or control mission flow. For example, wait until battery level is sufficient:

from leafsdk.core.mission.condition import BatteryCondition

cond = BatteryCondition(threshold_percent=50)
if cond.check(mav_interface):
    print("Battery OK โ€” Proceed with mission")

๐Ÿงญ Mission Planner Usage

from leafsdk.core.mission.mission_planner import MissionPlanner
from leafsdk.connection.mavlink_interface import MAVLinkInterface

mav = MAVLinkInterface("udp:192.168.1.10:14550")
planner = MissionPlanner(mav)

planner.add_waypoint(37.7749, -122.4194, 20)
planner.add_waypoint(37.7751, -122.4185, 25)
planner.upload_mission()

โœ… Automatically clears previous mission โœ… Sends new waypoints to LeafFC โœ… Logs steps with rich-formatted output


๐Ÿ“‹ Waypoint Format Details

Field Description
latitude GPS latitude in degrees
longitude GPS longitude in degrees
altitude Target altitude in meters
speed (optional) Suggested ground speed (m/s)

๐Ÿงฉ Integration Points

This module is used by:

  • โœ… leafcli mission commands (upload, validate)
  • โœ… leafsdk.service for mission execution automation
  • โœ… Future mission editor UIs (LeafScript, web, visual tools)

๐Ÿ”ฎ Planned Features

Feature Description
Gimbal + Mission Triggers Coordinate camera angles with waypoints
Mission Export Save/load .json or .yaml mission plans
Conditional Branching Mission decisions based on environment (battery, vision, etc.)
Landing Support Add LAND, RETURN_TO_LAUNCH, and TAKEOFF commands

โœ… Quick API Reference

Task Code
Add waypoint planner.add_waypoint(lat, lon, alt, speed)
Clear all planner.clear_waypoints()
Upload mission planner.upload_mission()
Define condition BatteryCondition(threshold_percent=60)
Check condition condition.check(mav)

๐Ÿง  Summary

The leafsdk.core.mission module empowers developers and operators to define rich autonomous missions for drones. It is:

โœ… Modular โœ… MAVLink-compatible โœ… CLI-integrated โœ… Production-ready


๐Ÿ“ท leafsdk.core.vision โ€” Vision Intelligence Module


๐Ÿš€ Overview

The leafsdk.core.vision module enables computer vision capabilities for autonomous drones using OpenCV. It provides:

  • Vision-based landing using ArUco marker detection
  • Frame-to-frame drift estimation via optical flow
  • A modular structure ready for advanced features like object tracking, pose estimation, and vision-based navigation

๐Ÿง  Use Cases

Feature Purpose
Vision Landing Detect landing markers and guide autonomous descent
Optical Flow Detect horizontal drift, rotation, or stabilization cues
Vision Condition Checks Wait for a marker or visual event before next waypoint
Future Additions Pose-based control, AI-based object following, visual SLAM

๐Ÿ—‚๏ธ Module Structure

File Description
vision_landing.py Detect ArUco markers and track their position in frame
camera_stabilizer.py Estimate motion drift using optical flow (Farneback)

๐Ÿ”ง Installation Requirements

Make sure your project includes these dependencies:

pip install opencv-python numpy

๐Ÿ›ฌ Vision-Based Landing

from leafsdk.core.vision.vision_landing import VisionLanding

vl = VisionLanding()
vl.start_camera()

try:
    vl.track_and_land_loop()  # Continuously detect markers
except KeyboardInterrupt:
    vl.stop_camera()

๐Ÿ” How It Works

  • Uses cv2.aruco.detectMarkers() to find known ArUco tags
  • Calculates the center of the marker
  • Intended for feedback into landing logic

๐ŸŽฅ Camera Stabilization via Optical Flow

from leafsdk.core.vision.camera_stabilizer import CameraStabilizer
import time

cs = CameraStabilizer()

try:
    while True:
        flow = cs.compute_optical_flow()
        if flow is not None:
            print(f"Drift: dx={flow[0]:.2f}, dy={flow[1]:.2f}")
        time.sleep(0.2)
except KeyboardInterrupt:
    cs.release()

๐Ÿ” How It Works

  • Uses Farneback optical flow (cv2.calcOpticalFlowFarneback)
  • Estimates average drift across entire frame
  • Useful for detecting motion instability, tracking drift, or gimbal calibration

โœ… Features Summary

Capability Implemented
ArUco Marker Detection โœ…
Camera Feed Handling โœ…
Drift via Optical Flow โœ…
Logging with rich โœ…
Pose Estimation ๐Ÿ”œ Planned
AprilTag Support ๐Ÿ”œ Optional
MAVLink Feedback Loop ๐Ÿ”œ Optional

๐Ÿ”ฎ Future Vision Features (Planned / Extendable)

Feature Description
Vision-Aided Landing Use offset from center to issue MAVLink commands
AprilTag Support Replace/extend ArUco with AprilTags
Object Tracking Use bounding boxes or feature tracking for targets
Vision-Based Conditions Integrate into mission logic: wait_until_marker_detected()
Target Following Follow a visual target (static or dynamic)

๐Ÿง  Summary

The leafsdk.core.vision module gives your drone eyes โ€” enabling perception, precision landings, and visual tracking.

โœ… Lightweight โœ… OpenCV-based โœ… Plug-and-play โœ… Ready for AI-powered extensions


๐ŸŒฟ โ€œVision gives intelligence to movement.โ€ โ€” LeafSDK

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

leafsdk-0.2.0.tar.gz (36.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

leafsdk-0.2.0-py3-none-any.whl (36.4 kB view details)

Uploaded Python 3

File details

Details for the file leafsdk-0.2.0.tar.gz.

File metadata

  • Download URL: leafsdk-0.2.0.tar.gz
  • Upload date:
  • Size: 36.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for leafsdk-0.2.0.tar.gz
Algorithm Hash digest
SHA256 69fe3930b64cee0a48f21595f30bc125a9803be5a81098ecb98a5c66d6239b16
MD5 f3b9fc6f4f0b7bad6dafe135bff99c50
BLAKE2b-256 7b2a32a41c89cda66ef60e796855edb4c7147c3f6569d4660d60465955af17ee

See more details on using hashes here.

File details

Details for the file leafsdk-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: leafsdk-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 36.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for leafsdk-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 85320847965201bea6b7656553ff7b0760224a6d0c8e3a41b47d2bad445b1d0d
MD5 0709a0e8be84da69449201b57bdd0fac
BLAKE2b-256 ff40ab1410d4c3cb3b6b93f6bfa079e26e63becec6bfbab3c25d3626a895e16f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page