Skip to main content

Long Thin Hauler - Graduation Project

Welcome to the official GitHub repository for the "Long Thin Hauler," an innovative autonomous vehicle designed to navigate and self-park within a constrained environment. This project is a result of extensive research and development by the BeyondTech team as part of our final-year project for METU Electrical Electronics Engineering program.

Project Overview

The "Long Thin Hauler" is an autonomous ground vehicle optimized for precise parking within narrow spaces. Using a combination of sensor fusion, wireless communication, and visual-based algorithms, our vehicle can autonomously navigate and park in a designated area measuring 3m x 3m, no matter its starting position.

Features

  • Autonomous Navigation: Navigate autonomously using sensor data and localization techniques.
  • Wireless Communication: Components communicate wirelessly in a plug-and-play manner using a custom but extensible communication protocol.
  • Visual Positioning: Utilizes cameras and fiducial markers for precise positioning and navigation.
  • Custom Mechanical Design: Features a unique mechanical design optimized for narrow spaces.

Getting Started

To get started with the Long Thin Hauler project, clone this repository and install as a Python package.

git clone https://github.com/shadymeowy/longthin
cd longthin
pip install .

Usage

While the Long Thin Hauler is designed for a specific application, the core components can be adapted for other projects. There are several modules available for use, including:

  • longthin.filter: Includes an extended Kalman filter for sensor fusion and localization utilizing preintegration of IMU data with visual odometry. Generated symbolically using the sympy library.
  • longthin.controller: Includes many controllers such as visual odometry based controller, Dubins path controller, and a PID on the heading controller.
  • longthin.calibration: Includes IMU calibration for accelerometer and magnetometer using the ellipsoid fitting method.
  • longthin.geometry: Includes geometry functions for calculating distances, angles, and transformations.
  • longthin.graphics: Includes functions for rendering the vehicle and environment in a 3D simulation.
  • longthin.model: A full vehicle model with dynamics and kinematics for simulation and control.
  • longthin.path: Includes functions for generating and manipulating Dubins paths using pure vector algebra based on the Dubins path equations.
  • longthin.ui: Qt6 based dockable UI for visualizing, tuning and monitoring the vehicle.

The project also includes a communication protocol for different transport layers and a simulation environment for testing and development. While using this project on actual hardware not trivial. However, it is easy to use the modules in a simulation environment. The simulation environment is designed to be modular and flexible. Any module that is compatible with the simulation environment can be used to test and develop the algorithms.

To run the simulation environment, use the following command:

longthin-runner --config sim.yaml

This command will run necessary modules and start the simulation environment. This method requires the tmux terminal multiplexer to be installed. If you don't have tmux installed, you can run the modules separately. To run the modules separately, check longthin/config/sim.yaml for the necessary modules.

One of the most critical feature of the project is the communication protocol that allows the modules to communicate with each other. The messages can be defined once, then can be used on microcontrollers, simulation environments, or any other platform. The project supports the various transport layers such as ZeroMQ (with its associated transport layers), UART, and ESPNOW. Any module (software or hardware) can communicate with each other in a plug-and-play manner. To see how the communication protocol works on the firmware side, check the firmware directory.

The firmware also includes a few AHRS implementations for sensor fusion. While the project itself implemented for rp2040, the individual parts are included in C99 and can be used on any platform. See the firmware directory for more information.

Documentation

There is no dedicated documentation for the project. However, we believe the project structure is quite self-explanatory. The code is well-documented, and the modules are designed to be modular and reusable. If you want the read the associated report, you can find it in the report directory. I cannot guarantee the completeness of the report. While implementing a robust system is hard, documenting the methods and implementation details is quite impossible if there is no incentive to do so.

Contributing

While this is a mere student project of ours, it may serve as a starting point for your own projects. We hope you find it useful and welcome any feedback or contributions. Feel free to reach out to us with any questions or suggestions.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Metadata

Release files for longthin 0.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for longthin 0.0.1
File Size Uploaded Provenance
longthin-0.0.1.tar.gz 62.8 kB Without provenance Details

Release files / longthin-0.0.1.tar.gz

Download URL longthin-0.0.1.tar.gz
Size 62.8 kB
Tags Source
SHA-256 checksum
How to use checksums
15c5e738c5df6cc79ba0dd8f29154187ecffbeeafb92ab4047d11bc60e1240b4
BLAKE2b-256 checksum
How to use checksums
36a7af363d9c73cea999b31edbbbb8205d081bd57ea9741afd52dacb95f47ddf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.8

Security for longthin 0.0.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.0.1 This release

1 release file No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page