Skip to content

Farukcinemre/rplidarc1_stm32_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 

Repository files navigation

STM32 Based Lidar Data Processing & UART Telemetry System

[English Description Below] | [Türkçe Açıklama Aşağıdadır]

🇬🇧 English Description

This project is an embedded system solution that performs real-time Edge Computing on Slamtec RPLIDAR C1 point cloud data using an STM32 microcontroller. Instead of processing raw data on the PC, the STM32 handles parsing, filtering, and repackaging, transmitting only relevant data via a high-speed UART interface to a PC dashboard.

This architecture reduces bandwidth usage and offloads the processing burden from the host computer.

🏗 System Architecture

The system consists of three main layers:

  1. Acquisition Layer: RPLIDAR C1 scans 360 degrees and streams data to STM32 via UART.
  2. Embedded Processing Layer: STM32 receives data using DMA (Direct Memory Access) into a circular buffer. A State Machine algorithm parses the packets, applies angle/distance filters, and encapsulates the data into a custom protocol.
  3. Visualization Layer: A Python-based GUI receives the optimized packets via USB-TTL, renders a PPI (Plan Position Indicator) Radar Scope, and logs data to CSV files.

graph LR
A[RPLIDAR C1] -->|UART 460800 Baud| B(STM32 DMA Buffer)
B -->|Parsing & Filtering| C{STM32 CPU}
C -->|Custom Protocol| D[USB-TTL Converter]
D -->|USB| E[PC / Python GUI]

⚙️ Technical Specifications

Firmware (STM32)

  • Hardware: STM32 Series (e.g., STM32F103/F407)
  • Communication: Dual UART Channels + DMA (Ring Buffer Management)
  • Baud Rate: 460800 bps (High Speed)
  • Algorithm:
    • State Machine: IDLE, WAITING_DESCRIPTOR, RECEIVING_SCAN
    • Filtering: Hardware/Software floating-point windowing for Angle and Distance.
    • Error Handling: Checksum and Sync Bit verification.

Software (Python Interface)

  • Language: Python 3.x
  • Libraries: PySerial (IO), OpenCV (Rendering), Pandas (Logging), NumPy (Math).
  • Architecture: Multi-threaded design (Separate threads for Serial I/O and GUI rendering using thread-safe queues).

📡 Communication Protocols

1. Output Protocol (STM32 -> PC)
To ensure data integrity and simplify parsing on the PC side, STM32 transmits a fixed-length 6-Byte packet:

Byte Index Content Description
0 0xAA Header
1 Angle_L Angle Low Byte
2 Angle_H Angle High Byte (Val >> 1) / 64.0 = Degree
3 Dist_L Distance Low Byte
4 Dist_H Distance High Byte Val / 4.0 = mm
5 0xBB Footer

🚀 Setup & Usage

Hardware Connections:

  • Lidar TX -> STM32 RX (PA10)
  • Lidar RX -> STM32 TX (PA9)
  • STM32 TX (PA2) -> USB-TTL RX
  • STM32 RX (PA3) -> USB-TTL TX

Python GUI Controls:

  • R: Start Recording (Default 20s).
  • T: Stop Recording & Save to CSV (Raw & Average Data).
  • S / X: Start/Stop Lidar Motor.
  • Q / ESC: Quit.

🇹🇷 Türkçe Açıklama

Bu proje, Slamtec RPLIDAR C1 sensöründen gelen yüksek frekanslı nokta bulutu verilerinin (Point Cloud) STM32 mikrodenetleyicisi üzerinde gerçek zamanlı olarak işlenmesi (Edge Computing), filtrelenmesi ve yüksek hızlı UART hattı üzerinden PC arayüzüne aktarılmasını sağlayan gömülü sistem çözümüdür.

Proje, ham veriyi PC tarafında işlemek yerine mikrodenetleyici tarafında süzerek bant genişliği optimizasyonu sağlar ve sadece anlamlı veriyi (belirlenen ROI - Region of Interest) iletir.

🏗 Sistem Mimarisi

Sistem üç ana katmandan oluşmaktadır:

  1. Veri Toplama Katmanı (Acquisition): RPLIDAR C1, 360 derece lazer tarama yapar ve verileri UART üzerinden STM32'ye gönderir.
  2. Gömülü İşleme Katmanı (Processing): STM32, DMA (Direct Memory Access) kullanarak verileri CPU'yu yormadan belleğe alır. State Machine tabanlı bir algoritma ile paketleri ayıklar (parsing), açı/mesafe filtrelemesi yapar ve veriyi yeniden paketler.
  3. Görselleştirme Katmanı (Visualization): Python tabanlı arayüz, USB-TTL dönüştürücü üzerinden gelen optimize edilmiş paketleri çözer, Radar ekranı (PPI Scope) oluşturur ve CSV formatında kayıt alır.

⚙️ Teknik Özellikler

Gömülü Yazılım (Firmware)

  • Donanım: STM32 Serisi (Örn: STM32F103/F407)
  • Haberleşme: Çift UART Kanalı + DMA
  • Baud Rate: 460800 bps (Yüksek Hız)
  • Algoritma:
    • State Machine: IDLE, WAITING_DESCRIPTOR, RECEIVING_SCAN
    • Filtreleme: Donanımsal veya yazılımsal işlemler ile açı ve mesafe pencereleme.
    • Hata Yönetimi: Checksum ve Sync Bit kontrolü.

Arayüz Yazılımı (GUI)

  • Dil: Python 3.x
  • Kütüphaneler: PySerial (IO), OpenCV (Render), Pandas (Data Logging), NumPy (Math).
  • Mimari: Multi-threaded yapı. (Seri port okuma ve GUI çizimi ayrı thread'lerde çalışır, thread-safe queue yapısı kullanılır.)

📡 Haberleşme Protokolleri

Çıkış Protokolü (STM32 -> PC)
STM32, Lidar verisini işledikten sonra veri bütünlüğünü sağlamak ve parsing işlemini kolaylaştırmak için 6 Byte'lık sabit uzunluklu özel bir paket yapısı kullanır:

Byte Index İçerik Açıklama
0 0xAA Header (Başlangıç)
1 Angle_L Açı Değeri (Düşük Byte)
2 Angle_H Açı Değeri (Yüksek Byte) (Val >> 1) / 64.0 = Derece
3 Dist_L Mesafe Değeri (Düşük Byte)
4 Dist_H Mesafe Değeri (Yüksek Byte) Val / 4.0 = mm
5 0xBB Footer (Bitiş)

🚀 Kurulum ve Kullanım

1. Donanım Bağlantısı

  • Lidar TX -> STM32 RX (PA10)
  • Lidar RX -> STM32 TX (PA9)
  • STM32 TX (PA2) -> USB-TTL Dönüştürücü RX
  • STM32 RX (PA3) -> USB-TTL Dönüştürücü TX
  • GND -> USB-TTL GND (Topraklar birleştirilmelidir)

2. Python Arayüzü Kullanımı
Gerekli kütüphaneleri yükleyin:
pip install pyserial opencv-python pandas numpy

Scripti çalıştırın:

python telemetry_lidar_stm32.py

Klavye Kısayolları (GUI):

  • R: Veri kaydını başlatır (Recording).
  • T: Kaydı bitirir ve .csv dosyalarını oluşturur (Raw Data & Average Data).
  • S / X: Lidar motorunu başlatır/durdurur (Seri komut gönderir).
  • Q / ESC: Çıkış.

About

Efficient C library to interface RPLIDAR C1 with STM32, featuring packet parsing and motor control.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages