Ubuntu 20.04 auf Raspberry Pi mit ROS2, Bluetooth, I2C und Kameraunterstützung

Das Internet ist voll von unnötigen und teilweise wirklich blöden Anleitungen und Anweisungen, wenn es um die Bluetooth Unterstützung oder Fehler bei der Kamera vom Raspi geht.

Darth: ROS2, R2SD2: ROS2 + ROS1, Yoda: ROS2, C3PO: ROS2 + ROS1

Deshalb eine Schritt für Schritt Anleitung für die Installation von ROS2, Bluetooth Aktivieren, I2C und die Kameraunterstützung:

ROS2:

sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install ros-galactic-desktop
source /opt/ros/galactic/setup.bash

Das wars auch schon. Danach kann man mit:

ros2 run demo_nodes_py listener

prüfen, ob die Installation geklappt hat.

I2C aktivieren:

sudo apt install -y i2c-tools
sudo i2cdetect -y 1

Der Test sollte so etwas ergeben:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- -- -- -- -- -- --

vorausgesetzt das I2C Board ist richtig angeschlossen.

Kamera mit OpenCV:

Mit OpenCV lässt sich die Kamera ansprechen:

pip3 install opencv-contrib-python==4.5.3.56
sudo nano /boot/firmware/config.txt
# Ans Ende einfügen:
# start_file=start4x.elf
# fixup_file=fixup4x.dat
# start_x=1
# gpu_mem=64
sudo reboot now

Mit einem kurzen Test Programm lässt sich die Kamerafunktion überprüfen:

# test.py
import cv2

cap = cv2.VideoCapture(0)

# Capture frame
ret, frame = cap.read()
if ret:
        cv2.imwrite('image.jpg', frame)

cap.release()

Ein Videostream erfolgt mit einer while Schleife:

import cv2
# Create object for default camera 0
video_capture = cv2.VideoCapture(0)

while True:
    # Get frame from video
    ret, frame = video_capture.read()

    # Show frame as video stream
    cv2.imshow('Video', frame)

    # Run program until user enters 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# If program exists while loop, release video capture and close all windows
video_capture.release()
cv2.destroyAllWindows()

Bluetooth aktivieren

Auch hierzu liest man eine Menge Unsinn und Treiber Angaben, die man überhaupt nicht braucht.

Der einzige notwendige zusätzliche Treiber wird installiert mit:

sudo apt install pi-bluetooth

Danach kann man Bluetooth Geräte mit

bluetoothctl
scan on

suchen und mit connect Mac Adresse verbinden. Um die Verbindung in Zukunft automatisch stattfinden zu lassen der Mac Adresse noch vertrauen: trust MAC-Adresse.

Um ein X-Box Controller verbinden zu können muss mit

echo 'options bluetooth disable_ertm=Y' | sudo tee -a /etc/modprobe.d/bluetooth.conf

der sogenannte: Enhanced Re-Transmission Mode deaktiviert werden. Da ich das leider nicht erklären kann, was das ist noch ein Link dazu: https://en.wikipedia.org/wiki/List_of_Bluetooth_protocols#:~:text=The%20EL2CAP%20specification%20adds%20an,)%2C%20such%20as%20802.11abgn.

Diese Seite verwendet Cookies, um die Nutzerfreundlichkeit zu verbessern. Mit der weiteren Verwendung stimmen Sie dem zu.

Datenschutzerklärung