Skip to content
Snippets Groups Projects
README.md 2.99 KiB
Newer Older
Robert Hedman's avatar
Robert Hedman committed
# Rust_project_description

## d7018e - special studies in embedded systems - PermoCar

Robert Hedman's avatar
Robert Hedman committed
This is part of a team project by LuleBotics.
Team members: Robert Hedman and Olov Sehlin.

Robert Hedman's avatar
Robert Hedman committed
##### Name : Robert Hedman
##### Mail : oreeha-6@student.ltu.se
##### Personal number: XXXXXX

Goal: Create a semi autonomous permocar using rust on an raspberry pi, and arduinos for external tasks.

## Grading

Robert Hedman's avatar
Robert Hedman committed
#### 3: Control the permocar remotely:
Robert Hedman's avatar
Robert Hedman committed

Create a multithreaded comminucations software running on a raspberry pi, with key features:
* One thread (Tracker) that can communicate with an arduino over a serial interface, e.g. USB, and other threads using communicators where neccessary. The main purpose of this thread is to continuously update the position, bearing, etc of the permocar and share it with threads that poll for it.
* One thread (Controller) that can receive data over tcp (from the remote operator) and also poll the tracker for current speed using rust communicators. This thread will then update the neccessary voltage using some controller (e.g. P, PI, or PID).
* Examine if rust can control the motor drivers directly using GPIO.

Robert Hedman's avatar
Robert Hedman committed
My tasks:
* Set up threading skeleton and empty functions to be called
* Define and implement communications protocol between remote operator and controller thread.
* Mathematically find equations of motion.

Robert Hedman's avatar
Robert Hedman committed
#### 4: Control the permocar remotly and map the surroundings using a lidar (SLAM: Simultaneous localisation and mapping).
Robert Hedman's avatar
Robert Hedman committed

Extend the program with a thread that can poll a SICK LMS311 (lidar) for data, and map that data into an array.
This thread will also poll the tracker for position, heading, etc.

Robert Hedman's avatar
Robert Hedman committed
If feasable the thread will also send the map at intervals to the remote operator for plotting.

My tasks:
* Create an api to poll data from lidar
* Set up comunications between operator and mapper.

Robert Hedman's avatar
Robert Hedman committed
#### 5: Semi autonomous driving and localisation.
Robert Hedman's avatar
Robert Hedman committed

After driving the permocar manually around to create a map it should be able to get from its current position, point A, to a given reachable point on the map, point B.
A pathfinding algorithm may be used, such as A-star.
Robert Hedman's avatar
Robert Hedman committed
This may, for example, be implemented as a thread that can be started and stopped on demand via e.g. the controller which in turn gathers the necessary infomration to run a pathfinding algorithm.
It can then, for example, emulate a remote operator by sending driving instructions to the controller, or by accessing the motors directly.
Robert Hedman's avatar
Robert Hedman committed

Robert Hedman's avatar
Robert Hedman committed
My tasks:
* Set up thread for Pathfinding.
* Implement a pathfinding algorithm.
* Set up communications between this thread and others as needed.

Robert Hedman's avatar
Robert Hedman committed

## References:

`SICK LMS 311 lidar user manual`
https://www.sick.com/media/docs/1/31/331/Operating_instructions_LMS1xx_Laser_Measurement_Sensors_en_IM0031331.PDF

`SICK LMS 311 lidar telegram listings`
https://www.sick.com/media/docs/7/27/927/Technical_information_Telegram_Listing_Ranging_sensors_LMS1xx_LMS5xx_TiM5xx_MRS1000_NAV310_LD_OEM15xx_LD_LRS36xx_en_IM0045927.PDF

`Rust general documentation`
https://doc.rust-lang.org/book/second-edition/