MRAA für Arduino-Erweiterungsboard in einem Container und ROS2 nutzen

Hallo,

zwischenzeitlich konnte ich meinen Ultraschallsensor an das MRAA Board direkt in der IOT2050 anschließen. Jetzt möchte ich die Ultraschallsensorwerte mit ROS2 übertragen. Dafür dachte ich, dass ich einen Container erstelle, der auf den Ultraschallsensor über MRAA zugreift und eine ROS2-Installation hat.

Leider habe ich jetzt Probleme MRAA in dem Container zu installieren. Die Informationen (auch auf der MRAA-Homepage) helfen mir jetzt leider nicht erfolgreich einen Docker-Container mit MRAA zu installieren. Wie soll denn hierfür ein Dockerfile aussehen?

Danke, Verena

1 Like

Hi Verena,

ja, dabei können wir Dir helfen. Entweder kannst Du aus diesem Dockerfile

Den Teil mit der MRAA herauskopieren (Zeile 8-19) und in Deines packen. Oder Du kannst auch das Docker Image von EduArt verwenden, in dem die MRAA Library bereits installiert ist. Das findest Du hier:

https://hub.docker.com/repository/docker/eduartrobotik/eduart-robot/general

Grüße,

Markus

Danke für den Input. Leider bekomme ich eine Fehlermeldung. Ich habe auch schon verschiedene Container-Varianten ausprobiert. Im Prinzip handelt es sich aktuell um die obige Version. Der Container hat Probleme mit MRAA…

libmraa[54]: libmraa version v2.2.0-43-g3c288a0 initialised by user ‘user’ with EUID 1000
libmraa[54]: Unknown Platform, currently not supported by MRAA
libmraa[54]: gpio: platform doesn’t support chardev, falling back to sysfs
libmraa[54]: libmraa initialised for platform ‘Unknown platform’ of type 98
libmraa[54]: gpio: init: pin 8 beyond platform pin count (0)
Traceback (most recent call last):

  • File “/home/user/ros/src/eddi_ws/src/eddi_sensor/eddi_sensor/test_us.py”, line 41, in *
  • sensor = UltraschallSensor(trigger_pin, echo_pin)*
  • File “/home/user/ros/src/eddi_ws/src/eddi_sensor/eddi_sensor/test_us.py”, line 6, in init*
  • self.trigger = mraa.Gpio(trigger_pin)*
  • File “/usr/local/lib/python3.10/dist-packages/mraa.py”, line 729, in init*
  • this = _mraa.new_Gpio(pin, owner, raw)*
    ValueError: Invalid GPIO pin specified

Ich habe mein Python Skript (zunächst ohne ROS2) noch einmal außerhalb des Containers ausprobiert. Dort funktioniert alles.

Muss ich beim Starten des Containers noch etwas berücksichtigen, damit die Pins auch verfügbar sind? Vielleicht vergleichbar zur Einbindung von USB-Ports?
docker run -it --privileged -v /dev/ttyUSB0:/dev/ttyUSB0 -v /dev/ttyUSB1:/dev/ttyUSB1 -v /dev/ttyUSB2:/dev/ttyUSB2 -v /dev/ttyUSB3:/dev/ttyUSB3 ediradar2 /bin/bash

Noch einmal vielen Dank.
Grüße, Verena

Hallo,

ja beim Start des Containers muss man was berücksichtigen. Wir mounten den kompletten “/dev” Ordner anstelle von expliziten Devices wie in Deinem Fall. Dies wird so manchen ITler nicht gefallen, aber ist auf dem Roboter voll in Ordnung.

Ich habe gerade das kleine Skript von Antonello im Container ausprobiert. Dies funktioniert mit der Einstellung oben.

Wenn es dennoch weiter Probleme gibt, kann ich Dir gerne anbieten das Problem zusammen zu analisieren. Schicke mir einfach kurz ne Mail an christian.wendt@eduart-robotik.com.

Grüße,

Christian Wendt