Crazy Car NG, Running Linux

The Mission

The FH Joanneum bachelor studies Electronics and Computer Engineering has a class Embedded Computing (1 and 2), in semester 4 and 5. During this class we want to learn

  • C++

  • Linux hardware interfaces

  • Linux realtime

  • Some Python

  • … and more

Also on FH Joanneum, there is a fun contest, Crazy Car - RC cars racing against each other, autonomously. FH Joanneum is one of the competitors, and as such has hardware (a car). Traditionally, that car has been equipped with bare metal software (class Embedded Systems, semester 3).

In search for something to play with in Embedded Computing 2, we chose to have fun with the car’s next generation hardware (schematics and print) and a Raspberry Pi.

Goal: Create Toolcase

Create Linux implementations for the hardware devices that are found on a car. These implementations should be usable from many possible architectures, including the reference architecture below, but also from more static architectures.

Goal: Create Reference Architecture

Given a working toolcase that we can use code out of, a reference architecture is implemented.

Project Tracking

Further Information

Documentation

How to write and build documentation

Todo List

Todo

Motor

Background: PWM and GPIO Usage

Explain meaning of pins forward/backward/speed

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/fh-stece2022/checkouts/latest/Documentation/toolcase/motor.rst, line 22.)

Todo

Motor

Class Description

Note that the SysFS_Motor class does not expose how the motor control works - it shouldn’t. Rather, it has only one method, set_speed(percentage_of_max_speed).

Depending on the parameter’s value, IOs and PWM are tuned accordingly. Give examples (here in Sphinx/RST, not in code/doxygen) so the user can understand how set_speed() is implemented in terms of SysFS_Motor’s forward, backward and speed ctor params.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/fh-stece2022/checkouts/latest/Documentation/toolcase/motor.rst, line 33.)

Todo

Motor

Future

  • How about pulling the brake? How would that work? What’s the difference between a hard brake and set_speed(0)?

  • Overcurrent detection? How would one make use of an ADC to implement this?

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/fh-stece2022/checkouts/latest/Documentation/toolcase/motor.rst, line 55.)

Todo

Gyroscope

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/fh-stece2022/checkouts/latest/Documentation/toolcase/sensor-bno055.rst, line 46.)

Todo

Proximity

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/fh-stece2022/checkouts/latest/Documentation/toolcase/sensor-vl53l1x.rst, line 50.)

Todo

Servo

  • Link to this document: Background: PWM vs. PPM, And Servos

  • Explain how PPM and PWM relate (in Sphinx/RST): the servo interprets its input as PPM, but the servo class generates PWM output. Or so.

  • Give links

  • Link to servo datasheet

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/fh-stece2022/checkouts/latest/Documentation/toolcase/servo.rst, line 16.)

Todo

Gyroscope

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/fh-stece2022/checkouts/latest/Documentation/toolcase/servo.rst, line 30.)