Vanwege de tamelijk geringe hardwarekosten en relatief eenvoudige bediening is Kinect nog steeds erg populair bij robotica, ook al heeft Microsoft de technologie al lang geleden afgeschreven.

De Nimbus 3D ToF-cameramodule van Pieye is ontworpen om van een RPi een dieptecamera te maken. Als auteur van een Kinect-boek kon ik de verleiding niet weerstaan met de Nimbus te gaan experimenteren. Voordat we beginnen wilt u misschien eerst het document onder [1] doornemen; daar vindt u een vergelijking van verschillende dieptesensorsystemen uit de Kinect-serie.

Hardware

Elektor leverde de camera in een relatief compacte doos waarin zich de print, een flatcable en twee schroeven bevonden, plus een 3D-geprinte binnenverpakking – alles te zien in figuur 1.

Figuur 1. Overal komt men tegenwoordig 3D-geprinte zaken tegen.

Vanwege de grote hoeveelheid gegevens die door de gebruikte sensor moet worden verzonden, vindt de communicatie tussen het board en de enkelkaartcomputer plaats via de camerapoort. Zorg ervoor dat u, voordat u het board daadwerkelijk aansluit, de cameraconnector van de RPi met de flatcable verbindt. Sluit vervolgens het board aan op de GPIO-poort, installeer de schroeven (een beetje scheef) en geniet van het resultaat van figuur 2.

Figuur 2. De ToF-scanner is nu in principe klaar voor gebruik.

Bij het testen met een Raspberry Pi 4 bleef er ongeveer een halve millimeter afstand na het aansluiten van de GPIO-headers en het monteren van de schroeven. Dit kwam door de zwarte (eveneens 3D-geprinte) afstandsbussen die iets te lang bleken te zijn. Dit kan echter snel worden opgelost met een vijl of een elektrisch slijpsteentje (Proxxon/Dremel).

Eerste gebruik

Snelle hardware in combinatie met Unix-achtige computers had altijd de vervelende eigenschap dat die voor eindgebruikers vaak alleen toegankelijk is via kernelmodules en andere moeilijk te configureren interfaces. In het geval van Nimbus 3D is het eenvoudiger omdat de vereiste code als kant-een-klaar imagebestand via [2] wordt geleverd. Een paar dagen voor de redactionele deadline leverde de fabrikant een update met ondersteuning voor Raspberry Pi 4 en een GitHub-repository. Als u uw image downloadt van [3], gaat dat iets sneller – de Nextcloud-service is soms wat traag (figuur 3).

Figuur 3. Als u uw firmware-image downloadt van GitHub, spaart u wat tijd – de Nextcloud-service is soms een beetje traag.

Een test van het image nimbus_rpi3_rpi4_v0.1.78_d998e541_shrink.img.gz op een SD-kaart met een Raspberry Pi 4 werkte na de update in een testrun. Maar alle andere tests die hier worden besproken, zijn gemaakt met een Raspberry Pi 3B+. Het systeem startte eenmaal opnieuw op en presenteerde vervolgens een terminalvenster (zie figuur 4).

Figuur 4. Toegang tot de desktop is ‘ietwat gecompliceerd’ met het meegeleverde image.

Voor het daadwerkelijke opstarten is naast een via HDMI aangesloten monitor een internetverbinding nodig om de status van de output te controleren. Nimbus 3D is geen stand-alone systeem. In plaats daarvan is het de bedoeling dat de Raspberry Pi – net als bij een Kinect – als een camera fungeert die de informatie die hij vastlegt naar een werkstation stuurt. Door de hoge framesnelheid zorgt een gigabit-Ethernet-verbinding hier voor minder latentie. Een bijzonder krachtige voeding is verplicht; het gebruik van de officiële voeding of een echt equivalent voorkomt problemen.

De eerstvolgende taak is om het IP-adres van de Raspberry Pi te bepalen en vervolgens de bijbehorende webpagina in de browser van een andere PC te openen. Als u (zoals ik) Ubuntu gebruikt en zowel de Raspberry Pi als de PC op hetzelfde netwerk zijn aangesloten, kunt u NMAP gebruiken om ernaar te zoeken, zoals hieronder:

 

tamhan@TAMHAN18:~$ nmap -sP 192.168.1.0/24

 

Starting Nmap 7.60 ( https://nmap.org ) at 2020-08-11 06:06 CEST

Nmap scan report for sagemcom (192.168.1.1)

Host is up (0.00055s latency).

Nmap scan report for raspberrypi (192.168.1.66)

Host is up (0.0015s latency).

Nmap scan report for TAMHAN18 (192.168.1.68)

 

Terzijde: de opdracht zoals hier gebruikt is alleen geldig als de router IP-adressen aan de netwerkclient verstrekt met behulp van het 192.168.1.x-basisadres. Als het basisadres anders is, moet u de invoer navenant aanpassen. Als de verbinding tot stand is gebracht, wordt de webpagina weergegeven zoals in figuur 5.

Figuur 5. Het vastleggen van afbeeldingen werkt zonder problemen.

U ziet mijn hand, evenals de kabelgoten aan het plafond en de gasleiding – en dat alles relatief goed. Dat is niet echt verrassend aangezien de datasheet een resolutie belooft van 352x288 pixels met een meetbereik van 0,1...3 m.

De ervaring leert dat ToF-sensoren op de korte afstand meer problemen hebben. Omdat ik zojuist een Tektronix 577 had geopend, laten figuren 6 en 7 er twee afbeeldingen van zien.

Figuur 6. Opname van een open Tektronix 577.
Figuur 7. Opname van een open Tektronix 577 vanuit een andere hoek.

Wat het meest opvalt, is dat de LED’s die voor de verlichting worden gebruikt, op een bepaalde minimale afstand tot overbelichting leiden.

Twee dingen zijn hierbij belangrijk. Ten eerste lichten de LED’s op het board slechts heel zwak rood op omdat het infrarood-LED’s zijn. Om te controleren of ze werken, is een smartphone-camera een goed hulpmiddel. Met mijn BlackBerry was het geen probleem om te bewijzen dat de LED’s werkten. Bovendien moet u bedenken dat relatief veel warmte wordt geproduceerd. De temperatuur in mijn ondergrondse ‘bunker’ bedroeg 20 °C. Hoewel de Raspberry Pi zonder behuizing op tafel lag, bereikte hij toch temperaturen tot 70 °C. Het gebruik van een Raspberry Pi in een behuizing zonder enige vorm van koeling wordt daarom afgeraden.

Het weergeven van diepte-informatie in de browser is misschien een interessante mogelijkheid, maar of dit de prijs van bijna € 230 rechtvaardigt, is de vraag. Gelukkig is er een Python-bibliotheek onder [4] waarmee ontwikkelaars de diepte-informatie in eigen applicaties kunnen integreren. Interessant is dat de provider vertrouwt op websockets om communicatie te implementeren – een procedure waarvoor Python 3 versie 3.6 of hoger vereist is. Ik heb Ubuntu 18.04 LTS gebruikt voor de volgende stappen, met Python-versie 3.6.9 geïnstalleerd op mijn PC.

In de volgende stap wordt de package manager PIP, die deel uitmaakt van Python, gebruikt. Zorg ervoor dat u PIP3 gebruikt en niet de PIP-versie die (per ongeluk) in Python 2.X is opgenomen.

 

tamhan@TAMHAN18:~$ pip3 install nimbus-python

. . .

Successfully installed certifi-2020.6.20 chardet-3.0.4 idna-2.10 nimbus-python-0.0.4 numpy-1.19.1 requests-2.24.0 urllib3-1.25.10 websockets-8.1

 

Voor een simpele eerste programmeerpoging is een testprogramma zoals dit geschikt:

 

from nimbusPython import NimbusClient

cli = NimbusClient.NimbusClient("192.168.1.66")

header, (ampl, radial, x, y, z, conf) = cli.getImage(invalidAsNan=True)

 

Na het importeren van de Nimbus-bibliotheek wordt een client-object gemaakt dat de verbinding inkapselt met de Raspberry Pi die als camera dient. Daarna wordt de methode getImage aangeroepen die een groep vectoren met de dieptegegevens retourneert. Deze kunnen vervolgens naar wens worden verwerkt. Ik zou hiervoor MatPlotLib willen aanraden. Dit programma en de rest van de Python-bibliotheek werkten redelijk goed in mijn tests. Soms was het niet mogelijk om een verbinding tot stand te brengen en moest ik het proces dan afbreken.

Terzijde: de ontwikkelomgeving

Hoewel de handleiding het gebruik van het meegeleverde firmeware-image sterk aanbeveelt, wilde ik mijn eigen experimenten doen. Voor dit doel gebruikte ik een Raspberry Pi 4 te gebruiken die was uitgerust met het firmware-image 2020-08-20-raspios-buster-armhf-full.img. Aansluitend moest ik de low-level werk-omgeving bijwerken met de onderstaande opdrachten:

 

pi@raspberrypi:~ $ sudo apt-get update

pi@raspberrypi:~ $ sudo apt-get upgrade

pi@raspberrypi:~ $ sudo rpi-update

 

Nu moest ik de package-bronmap toevoegen. Daartoe heb ik het commando deb http://apt.pieye.org/debian/ nimbus-stable main toegevoegd aan het bestand /etc/apt/sources.list met superuser-rechten, en vervolgens het volgende commando uitgevoerd om een SSH-key toe te voegen:

 

wget -O - -q http://apt.pieye.org/apt.pieye.org.gpg.key | sudo apt-key add -

sudo apt-get update

 

Na de verplichte herstart wordt de volgende DTOverlay-declaratie toegevoegd aan het einde van het bestand /boot/config.txt, opnieuw met superuser-rechten:

 

[all]

#dtoverlay=vc4-fkms-v3d

dtoverlay=irs1125

 

Nu kan de server die verantwoordelijk is voor het leveren van de dieptebeelden worden geïnstalleerd – zorg ervoor dat u ook de I2C-bus in raspi-config vrijgeeft (sudo raspi-config -> 5 interface-opties -> P5 I2C):

 

pi@raspberrypi:~ $ sudo apt-get install nimbus-server

 

Daarna is weer een herstart nodig. De volgende opdrachten downloaden de webinterface en installeren de Unix server-services die nodig zijn voor de verwerking:

 

pi@raspberrypi:~ $ sudo systemctl start nimbusServer.service

pi@raspberrypi:~ $ sudo apt-get install nginx git

pi@raspberrypi:~ $ git clone https://github.com/pieye/nimbus-web.git

 

Tenslotte moest ik het bestand /etc/nginx/sites-available/default bewerken zodat de root-declaratie als volgt verwijst naar de software die van GitHub is gedownload:

 

root/home/pi/nimbus-web;

 

Nu ontbrak alleen nog de vermelding van sudo service nginx restart die de webserver herstartte en de webinterface toegankelijk maakte op het IP-adres van de Raspberry Pi. Ik maakte via mijn PC verbinding en kreeg drie zwarte schermen voorgeschoteld. Een analyse van de status van de service toonde aan dat die, kort na de aanroep, was overleden, waardoor ik met het zwarte scherm van figuur 8 achterbleef.

Figuur 8. De server crasht – weer.

Deze fout is te wijten aan een incompatibiliteit tussen kernel en driver. Dit is bekend bij de fabrikant en wordt regelmatig verholpen.

Was het de moeite waard?

Het lijdt geen twijfel dat pieye met Nimbus 3D een relatief goedkope dieptesensor biedt die – zelfs in vergelijking met de Kinect – behoorlijk indrukwekkende resultaten levert. Wie tegenwoordig een compacte dieptescanner nodig heeft, heeft op dit gebied weinig keus. Het is duidelijk dat er betere sensoren zijn voor militaire toepassingen. Het is echter de vraag of men er zoveel geld voor wil uitgeven.

Afgezien van de onmiskenbare voordelen van het besproken product, zijn er aspecten die kunnen worden verbeterd. Het feit dat er geen aansluitingen zijn om het board rechtstreeks of via een voedingseenheid te voeden, stoorde me. Betere Python-software zou ook helpen. In ieder geval hoop ik dat u dankzij deze review een goede indruk hebt gekregen van wat u van deze sensor kunt verwachten.

----------------------------------------------------------------------------------------------------------------------

Wilt u meer van die fantastische Elektor-artikelen?

 

--> Neem vandaag nog een abonnement op Elektor - u mist nooit meer een artikel, project of handleiding!

----------------------------------------------------------------------------------------------------------------------