Newer
Older
# Rust_project_description
## d7018e - special studies in embedded systems - PermoCar
This is part of a team project by LuleBotics.
Team members: Robert Hedman and Olov Sehlin.
##### 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
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.
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.
#### 4: Control the permocar remotly and map the surroundings using a lidar (SLAM: Simultaneous localisation and mapping).
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.
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.
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.
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.
My tasks:
* Set up thread for Pathfinding.
* Implement a pathfinding algorithm.
* Set up communications between this thread and others as needed.
## 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/