Skip to main content

PiRacer Abstract Layer for SEA:ME DES proejct

Project description

PiRacer-Py

This package will provide you with a simple abstraction layer for the PiRacer development platform. You will be able to control the powertrain and the steering as easy as possible.

I also provides an easy way to grab images from the camera (based on v4l2 and opencv)

PiRacer Standard and Pro architecture overview:

Install

Tested on the following Hardware:

  • Raspberry Pi 4 Model B 4GB

Tested on the following distributions:

  • Raspberry Pi OS Lite "Bullseye" (64-Bit)
    • Camera is not working at the moment
  • Ubuntu Server 22.04.1 LTS (64-Bit)
  • Ubuntu Server 20.04.5 LTS (64-Bit)

Add additional sources (Ubuntu only)

If you run Ubuntu, add the following sources first:

sudo -s
echo "deb http://archive.raspberrypi.org/debian/ buster main" >> /etc/apt/sources.list
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 7FA3303E
apt update
exit

If you're facing messages like the following when trying to install packages via apt:

pi@ubuntu:/home/pi# sudo apt install PACKAGES...
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 1807 (unattended-upgr)

Disable the unattended upgrade feature by running the following command to disable:

sudo dpkg-reconfigure unattended-upgrades

Install dependencies:

sudo apt update
sudo apt install \
    gcc \
    v4l-utils \
    i2c-tools \
    raspi-config \
    python3-dev \
    python3-setuptools \
    python3-venv \
    libopencv-dev

Setup periphery

Mount boot partition (Ubuntu only)

On Ubuntu it is necessary to explicitly mount the boot partition before enabling the i2c controller and camera:

mount /dev/mmcblk0p1 /boot/

Enable i2c and camera

Use the raspi-config tool to enable the following peripherals:

  • i2c: Interface Options > I2C
  • Camera: Interface Options > Camera

Afterwards, reboot:

sudo reboot

Install piracer-py package

cd ~
mkdir piracer_test/
cd piracer_test/
python3 -m venv venv
source venv/bin/ativate

pip install piracer-py

Examples

The following examples will show the basic functionality of the piracer-py package. Make sure the virtual environment from step Install piracer-py package is activated.

Basic example

This basic example will test the power train and the steering.

Paste the following code into basic_example.py

import time
from piracer.vehicles import PiRacerPro

if __name__ == '__main__':

    piracer = PiRacerPro()
    # piracer = PiRacerStandard()

    # Forward
    piracer.set_throttle_percent(0.2)
    time.sleep(2.0)

    # Brake
    piracer.set_throttle_percent(-1.0)
    time.sleep(0.5)
    piracer.set_throttle_percent(0.0)
    time.sleep(0.1)

    # Backward
    piracer.set_throttle_percent(-0.3)
    time.sleep(2.0)

    # Stop
    piracer.set_throttle_percent(0.0)

    # Steering left
    piracer.set_steering_percent(1.0)
    time.sleep(1.0)

    # Steering right
    piracer.set_steering_percent(-1.0)
    time.sleep(1.0)

    # Steering neutral
    piracer.set_steering_percent(0.0)

Run it with:

python basic_example.py

Remote control example

The following example will let you control the PiRacer with the ShanWan Gamepad that is shipped with the PiRacer package. Make sure the dongle is connected to your Raspberry Pi.

Paste the following code into rc_example.py:

from piracer.vehicles import PiRacerPro
from piracer.gamepads import ShanWanGamepad

if __name__ == '__main__':

    shanwan_gamepad = ShanWanGamepad()
    piracer = PiRacerPro()
    # piracer = PiRacerStandard()

    while True:
        gamepad_input = shanwan_gamepad.read_data()

        throttle = gamepad_input.analog_stick_right.y * 0.5
        steering = -gamepad_input.analog_stick_left.x

        print(f'throttle={throttle}, steering={steering}')

        piracer.set_throttle_percent(throttle)
        piracer.set_steering_percent(steering)

Run it with:

python rc_example.py

Grab images example

With the following example you can grab and save images from the Raspberry Pi camera.

Paste the following code into camera_grab_example.py:

import cv2
from piracer.cameras import Camera, MonochromeCamera

if __name__ == '__main__':
    camera = MonochromeCamera()

    image = camera.read_image()
    cv2.imwrite('image.png', image)

Run it with:

python camera_grab_example.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

seame_piracer-0.1.2.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

seame_piracer-0.1.2-py3-none-any.whl (20.1 kB view details)

Uploaded Python 3

File details

Details for the file seame_piracer-0.1.2.tar.gz.

File metadata

  • Download URL: seame_piracer-0.1.2.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.5

File hashes

Hashes for seame_piracer-0.1.2.tar.gz
Algorithm Hash digest
SHA256 3ef2bb491ec21f6ec71a683e15afec9b056deabe3e97bb456efa97cf467c46d2
MD5 35d6d63d719cc83e2532a882ffedca62
BLAKE2b-256 c316596edb4ab5cb32b053ca03f57e0e44552702e85d7c866f52e33fecadd7cd

See more details on using hashes here.

File details

Details for the file seame_piracer-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for seame_piracer-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 6508d164627823927ac6adcfb55155fb51a0f232e89fc071521622a55b7461d1
MD5 f2c5f9c69f56ed8f5e53682f1dbf2c1e
BLAKE2b-256 2096e54c2ef4e165c4692803f74022c2d0e69f9156423ebd031dd8dfa36815e8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page