Roomberry Surveillance Robot:Roomba + Pi Zero + Camera
Roomberry is een bewakingsrobot op basis van Roomba met een Raspberry Pi Zero W en een cameramodule. Jaren geleden begon ik enkele tests uit te voeren om een Roomba op afstand te besturen met een Arduino One met een RN-VX WiFly-module.
Vorige maand besloot ik het idee nieuw leven in te blazen, maar met een nieuw doel:de Roomba veranderen in een bewakingsrobot met de mogelijkheid om foto's en video's te maken. Het eerste idee was om de Arduino als microcontroller te blijven gebruiken met een Arducam-module om foto's te maken. Ik ontdekte echter al snel dat de beeldverwerkingscapaciteit van Arduino te beperkt was voor mijn interesses. De tweede optie was om het platform te veranderen en een Raspberry Pi Zero W te gebruiken met een cameramodule. Dit alternatief betekende een aantal uitdagingen, vooral met betrekking tot het aandrijven, maar bood ook meer mogelijkheden. In dit bericht leg ik uit hoe je Roomberry bouwt, een bewakingsrobot op basis van Roomba met een Raspberry Pi Zero W en een cameramodule.
Een demonstratie van de mogelijkheden van Roomberry en de webinterface ontwikkeld om ermee te communiceren, is te zien in de volgende video.
iRobot Roomba
iRobot's Roomba biedt een Open Interface (OI) om met de robot te communiceren via een mini-DIN-connector. De OI is een software-interface ontworpen voor Roomba Creator 2 (een aanpassing van serie 600). Het is echter ook volledig compatibel met series 500 en 700. Er zijn echter enkele bugs, afhankelijk van het platform en de gebruikte firmwareversie. Met de software-interface kunt u het gedrag van Roomba manipuleren en de sensoren uitlezen. Een volledige beschrijving van de mogelijkheden vindt u in dit document.
Mini DIN-connector
De Roomba mini DIN-connector bevindt zich vooraan rechts van Roomba serie 700 en heeft 7 pinnen. Zijn positie varieert enigszins in de serie 600, waarvan de locatie zich aan de rechterachterkant van Roomba bevindt, onder een wegklapbare plastic beschermkap. Mini DIN 7 mannelijke connectoren zijn ingewikkeld om te kopen, maar de meer gebruikelijke mini-DIN 8-pins mannelijke connector is ook compatibel.
Om een soepele en betrouwbare verbinding/ontkoppeling van de poort te garanderen, heb ik een 5-pins kabel (ontworpen voor led-strips) met een vrouwelijke connector gesoldeerd aan een mini-DIN 8-pins mannelijke connector met behulp van pinnen 1-2 (stroom), 6-7 (aarde), 3 (RxD), 4 (TxD) en 5 (BRC). Echter, zoals later werd opgemerkt, was de stroom/aardverbinding uiteindelijk niet nodig. De resulterende kabel is te zien in de volgende afbeeldingen.
Roomba seriële poort
Om de OI te gebruiken, de opdrachten moet worden verzonden via een tweerichtings seriële communicatie gemaakt in mini DIN 7 pinnen 3 (RxD) en 4 (TxD). Deze UART-poort werkt op TTL-niveaus (0 – 5V). Deze spanning is prima voor microcontrollers die 5V-logica gebruiken, zoals de meeste Arduino-kaarten. Het is echter niet goed voor mensen met lagere logische spanningsniveaus (zoals de Raspberry Pi).
In theorie heeft pin 3 (RxD) 3,3 V als het hoge logische niveau. Maar de Roomba zal 5V uitvoeren op pin 4 (TxD), wat de Raspberry Pi Zero kan beschadigen. Om de hardware veilig te houden een logic level shifter zou gebruikt moeten worden. De eenvoudigste manier om dit te doen is met een weerstandsdeler, zoals al geïmplementeerd in mijn vorige project Calduino, maar dit werkt mogelijk niet bij hoge snelheden (de seriële poort van Roomba werkt met 115200 bauds).
In plaats daarvan heeft een actieve level shifter de voorkeur. Als je je eigen circuit wilt bouwen, gebruik dan de veldeffecttransistor AN10441 zoals hier wordt uitgelegd. Een veel eenvoudigere optie is om een van de bestaande bidirectionele logische niveau-converters te gebruiken, zoals deze van Adafruit. Dit apparaat kan tot 4 signalen beheren en deze veilig verlagen van 5V naar 3,3V. Tegelijkertijd verhoogt het de signalen van 3,3V naar 5V.
De Raspberry Pi van stroom voorzien vanuit Roomba
Er zijn een paar alternatieven om stroom te leveren via Roomba's batterij:
Aangedreven door de Mini DIN 7
De mini DIN 7 biedt een ongereguleerde directe verbinding in pinnen 1/2 (Vcc) - 6/7 (Gnd) naar Roomba's batterij. De verbinding is beperkt tot 200 mA hoewel een PTC-resetbare zekering . Het biedt een spanning tussen 20,5 en 10V, beperkt tot 0,2A met een vermogen van 2W. De continue stroom van deze twee pinnen samen mag niet groter zijn dan 200 mA. Als u een piek van meer dan 500 mA trekt, wordt de zekering gereset.
Een Raspberry Pi Zero W zou met deze voeding moeten kunnen werken. De Raspberry Pi Foundation beoordeelt het typische bare-board actieve stroomverbruik in 150 mA. Deze benchmark plaatst het tussen 120 mA in inactief status en 180 mAonder stress (bijvoorbeeld FullHD-video afspelen). Hierbij wordt echter geen rekening gehouden met het extra verbruik van de camera. Volgens mijn metingen verhoogt de camera (ik gebruik deze, met dezelfde sensor als versie 1 officiële Pi-camera) het stroomverbruik tot meer dan 300 mA, met pieken van 450 mA. Tijdens mijn test is de zekering meerdere keren doorgeslagen tijdens het opnemen van video's.
Als conclusie sluit de bestaande thermofuse het gebruik van deze verbinding om de Raspberry Pi Zero W van stroom te voorzien af. Ik heb niet kunnen achterhalen of het mogelijk en veilig is om de zekering van het bord te verwijderen zonder andere componenten te beschadigen.
Voeding vanaf een externe powerbank
Er zijn een paar alternatieven om deze zekeringlimiet te vermijden. Aan de ene kant zou de gemakkelijkere oplossing zijn om een powerbank . te gebruiken om de Raspberry Pi Zero van externe voeding te voorzien. Het vereist echter dat de gebruiker het periodiek oplaadt. Een andere optie zou zijn om een seriële verbinding te ontwerpen tussen de mini DIN 7 voeding en de powerbank. Met een aantal elektronische componenten moet het mogelijk zijn om de Roomba-accu te gebruiken om de powerbank op te laden. Om mijn ontwerp te vereenvoudigen, heb ik besloten om het gebruik van extra stroombronnen te vermijden.
Stroomvoorziening vanaf de batterij
Ik heb uiteindelijk besloten om over te slaan de zekering door een directe verbinding . op te bouwen naar hetbatterijpakket . De tegenhanger van deze optie is dat je de robot gedeeltelijk moet demonteren . In Roomba-serie 600 zijn er twee grote pads die rechtstreeks zijn aangesloten op het batterijpakket onder de dock-knop. In Roomba serie 700/800 zul je nog een aantal onderdelen moeten demonteren. Bekijk de volgende video tot minuut 6 om stap voor stap te zien hoe u toegang krijgt tot het moederbord van uw robot . Als u klaar bent, soldeert u gewoon een paar kabels aan het batterijpad, zoals weergegeven in de volgende afbeeldingen.
Deze kabels zorgen voor een directe verbinding met de batterij zonder enige zekering. Ze leveren tussen 20,5 en 10V, afhankelijk van het laadniveau van de batterij. De Raspberry Pi Zero W heeft echter een gereguleerde stroombron van 5 V nodig. Om de spanning te verlagen een stap omlaag is gebruikt. Er zijn veel opties om dit te doen, variërend van het gebruik van een goedkope lineaire regelaar (zoals de 7805 TO-220) met een paar condensatoren voor het installeren van een schakelende regelaar .
Vanwege de hogere efficiëntie , en aangezien het altijd verbonden zal zijn, zou ik adviseren om een goede kwaliteit te gebruiken/kopen (vermijd Chinese imitaties) step-down switching regulator . Ik heb de Pololu D24V5F5 buck-regelaar gebruikt die een invoer tot 36 V nodig heeft en deze reduceert tot 5 V voor een maximale uitgangsstroom van 500 mA. Het rendement ligt tussen 85% en 90% en heeft een zeer lage uitval. U kunt ook een UBEC (Universal Battery Elimination Circuit) gebruiken, zoals het circuit dat vaak wordt gebruikt in de RC-wereld. Ik plaatste mijn spanningsregelaar in een vrije ruimte in het midden - rechts van de robot.
De aansluitingen waren goed beschermd met krimpkous en de D24V5F5-module was bedekt met isolerend plastic (ik heb hier geen foto's van gemaakt). Ik heb de module-uitgang aan een micro-USB-kabel gesoldeerd, waardoor ik hem rechtstreeks op de Raspberry Pi Zero W-voedingsingang kan aansluiten.
Met behulp van een roterend boorgereedschap en schuurpapier heb ik een kleine inkeping gemaakt in de bovenklep van Roomba om een schone aansluiting van de micro-USB-kabel mogelijk te maken, zoals te zien is in de volgende foto.
Roomba OI-modi
De Roomba OI heeft vier bedrijfsmodi:Uit, Passief, Veilig en Volledig.
Uit-modus :Na het vervangen van de batterij of wanneer de OI voor het eerst wordt ingeschakeld, staat de OI in de uit-modus. In deze status luistert de Roomba naar de poort met de standaard baudrate (115200) in afwachting van een startopdracht. De commando's reset en stop kunnen op elk moment worden verzonden en zullen OI ook in de uit-modus zetten.
Passieve modus: Zodra een Start-commando is verzonden, gaat Roomba naar de passieve modus . In deze status kunt u sensorgegevens opvragen en ontvangen met behulp van een van de sensorcommando's. U kunt de huidige commandoparameters voor de actuatoren echter niet wijzigen (motoren, luidspreker, verlichting, low-side drivers, digitale uitgangen). Roomba gaat naar passieve modus ook als een van de opdrachten voor de reinigingsmodus (Spot, Clean, Seek Dock, enz.) wordt verzonden.
In de passieve modus gaat Roomba naar de uit-modus na vijf minuten inactiviteit om stroom te besparen en de batterij te sparen. Volgens iRobot-documentatie kan de slaapstand worden uitgeschakeld door de BRC-pin af en toe laag te pulseren voordat deze vijf minuten zijn verstreken. Elke puls zou deze vijf minuten teller moeten resetten. In de tests die ik heb uitgevoerd (met een Roomba 780), zal het naar beneden trekken van de BRC de robot alleen wakker maken, maar het zal niet voorkomen dat hij naar de energiebesparende modus gaat. De robot piept wanneer hij wakker wordt (als hij niet wordt opgeladen in het dockstation).
Veilige modus :Roomba gaat naar Veilige modus als de Safe-opdracht wordt verzonden. Veilige modus geeft je volledige controle over de robot en schakelt alle motoren en LED's uit. Als echter niet aan een veiligheidsgerelateerde voorwaarde wordt voldaan, schakelt de robot automatisch over naar de passieve modus . Die veiligheidsvoorwaarden zijn:detectie van een klif tijdens het vooruit rijden, wiel vallen en aansluiting op de lader. In deze modus laadt Roomba niet op (hoewel hij in het dock is) en bespaart hij geen stroom door na 5 minuten inactiviteit over te schakelen naar de uit-modus. Dit punt is erg belangrijk:je kunt de batterij van de robot leeg laten lopen en deze beschadigen als je niet overschakelt naar de passieve of uit-modus.
Volledige modus :wanneer u een volledige opdracht naar de OI stuurt, gaat Roomba naar de Volledige modus . De robot gedraagt zich precies zoals in de veilige modus, maar houdt geen rekening met de eerder genoemde veiligheidsgerelateerde omstandigheden, dus houd rekening met de risico's!
Voorzorgsmaatregelen voor de batterij :Zoals opgemerkt, zal Roomba in de passieve modus slapen na 5 minuten inactiviteit om de batterij te sparen. In de Veilige en Volledige modi zal Roomba nooit slapen, en als hij gedurende langere tijd in deze toestand wordt gelaten, zal hij de batterij diep ontladen, zelfs als deze op de oplader is aangesloten. De oplader zal Roomba in alle modi van stroom voorzien, maar zal de batterij niet opladen in de veilige of volledige modus. Het is belangrijk om Roomba terug te zetten naar de passieve of uit-modus zodra een taak is voltooid en/of wanneer het batterijniveau laag is om het te beschermen.
Raspberry Pi Zero W
De Raspberry Pi Zero W is een bijgewerkte versie van de Raspberry Pi Zero met draadloos LAN en Bluetooth . Het model bevat een 1 GHz single-core CPU, 512 MB RAM, mini-HDMI, een micro-USB OTG-poort, micro-USB voor voeding, 40-pins header, composiet video, reset-headers, een cameraconnector, evenals de nieuwe draadloze functies. Het maakt gebruik van de draadloze chip Cypress CYW43438 die 802.11b/g/n wifi (alleen 2,4 GHz) en Bluetooth 4.0 (dezelfde chip als Raspberry Pi 3 Model B) ondersteunt. Ik kocht het in Pimoroni met headers (niet gesoldeerd) en adapters voor € 16.
Camera
De Raspberry Pi Zero W CSI-cameraconnector is kleiner dan die van de Pi 3. Als je al een camera hebt, moet je een adapter kopen om deze te gebruiken. Anders zou ik aanraden om deze cameramodule te kopen, die een 5MP-sensor bevat (hetzelfde als versie 1 officiële Pi-camera) en video kan opnemen met 1080p. Het kost 18€. Ik koos voor de groothoekcamera met IR-cut. Ik weet dat ik 's nachts niets zal kunnen zien, maar het gebruik van IR-LED's zal het energieverbruik verhogen, dat ik laag wilde houden. Je kunt altijd Philips HUE-lampen gebruiken om je lampen in huis op afstand te bedienen.
Voeding van Raspberry Pi Zero W
Er zijn een aantal overwegingen die gemaakt moeten worden met betrekking tot de voeding van de Pi Zero. Allereerst, en in tegenstelling tot grotere modellen, heeft de Pi Zero geen regeling of zekering om het te beschermen tegen overspanning of stroompieken. Dit betekent dat u een stabiele stroombron . moet leveren met 5 V. De stroombron kan worden aangesloten op de micro-USB aan de rechterkant (Pwr In) of op de 5V-pin op de GPIO-header. Beiden zijn dezelfde lijn. Zorg ervoor dat als een onjuiste spanning wordt toegepast of als er een stroompiek in de lijn optreedt, u waarschijnlijk schade zult veroorzaken. uw Raspberry Pi permanent .
Zoals al is opgemerkt, zijn tijdens het uitvoeren van stresstests verbruikspieken van 400 mA gemeten met de camera aangesloten. De Raspberry Pi Foundation raadt een voeding van minimaal 1,2 A aan. De 0,5 A die door de buck-regelaar wordt geleverd, was voor mij echter voldoende. Tot nu toe heb ik geen problemen met de stroomvoorziening gevonden.
Het energieverbruik verminderen
Aangezien de Raspberry op Roomba's batterij zal werken, zal het interessant zijn om verminderen het stroomverbruik zo veel mogelijk. Als u bijvoorbeeld weet dat de Pi Zero headless zal werken (zonder dat er een monitor is aangesloten) en alleen toegankelijk is via SSH, is het niet nodig om het displaycircuit van stroom te voorzien. Het uitschakelen van de HDMI-poort kan tot 25 mA besparen. Om dit te doen, voert u gewoon /usr/bin/tvservice -o uit (of met -p om opnieuw in te schakelen). Ik heb een kort script in /etc/rc.local geplaatst dat controleert of de HDMI-kabel is aangesloten of niet en de HDMI-poort dienovereenkomstig uitschakelt.
# Haal het huidige video-uitvoertype op en verwijder de onbelangrijke stukjes
video=“$(tvservice -s | sed “s/^.*\[\([^ ]*\) .*$/\1/ ” )“
if [“$video“ !=“HDMI”]; dan
printf “HDMI niet gedetecteerd. Uitschakelen.\n”
tvservice -off> /dev/null
else
printf “HDMI gedetecteerd.\n”
fi
Een andere manier om het stroomverbruik te verminderen is het uitschakelen van de LED's van de Pi. De Raspberry Pi Zero heeft er maar één, de activiteits-LED, die knippert telkens wanneer de SD-kaart wordt gebruikt. Het verbruik is ongeveer 5 mA. Om het volledig uit te schakelen, voegt u deze regels toe aan uw /etc/rc.local bestand:
# Stel de Pi Zero ACT LED-trigger in op 'none'
echo none | sudo tee /sys/class/leds/led0/trigger
# Schakel de Pi Zero ACT-LED uit
echo 1 | sudo tee /sys/class/leds/led0/brightness
U kunt dit ook doen door het bestand /etc/config.txt te bewerken:
# Schakel de ACT-LED op de Pi Zero uit
dtparam=act_led_trigger=geen
dtparam=act_led_activelow=aan
Ik weet niet zeker of dit zich zal vertalen in een echte verlaging van het verbruik, maar aangezien het niet zal worden gebruikt, kunt u de bluetooth-module van de Pi Zero uitschakelen door de volgende regel toe te voegen aan /etc/config .txt:
# Schakel bluetooth uit op de Pi Zero
dtoverlay=pi3-disable-bt
Probeer ten slotte de geïnstalleerde en draaiende software op de Pi Zero te verminderen. Gebruik bijvoorbeeld Raspbian lite in plaats van de desktopversie en installeer geen extra software tenzij je het echt nodig hebt. Hoe meer processen op uw machine draaien, hoe meer verbruik deze zal hebben.
Andere overwegingen
- Het zal erg handig zijn om een resetknop in de Pi Zero te bouwen. Zo voorkom je dat je elke keer dat je het systeem opnieuw wilt opstarten de voeding moet loskoppelen en aansluiten. Om dit te doen, hoeft u alleen de gaten van de Raspberry te verbinden die zijn gemarkeerd met run met een momentschakelaar. Ik heb er een gebruikt van Sparkfun.
- Je hebt een nieuwe en nieuwe MicroSD-kaart nodig met Raspbian Stretch lite of nieuwer. Zoals uitgelegd in dit bericht, raad ik je aan een zo groot mogelijke kaart te gebruiken. Hoewel de hier toegepaste configuratie probeert het schrijven op de schijf te verminderen, zorgt het overlaten van voldoende vrije ruimte voor een langere levensduur van de SD-kaarten.
- In deze tutorial wordt ervan uitgegaan dat de gebruikte Raspberry Pi Zero Raspbian Stretch headless wordt uitgevoerd . In eerdere berichten kun je lezen hoe je Rasbian installeert, nieuwe gebruikers maakt en verbinding maakt via SSH.
Roomberry bouwen
Als alle onderdelen zijn beschreven, gaan we kijken hoe we Roomberry, uw Raspberry-interface met Roomba, kunnen bouwen en uitvoeren.
Mijn doel was om de componenten (Raspberry Pi Zero, cameramodule, logic level converter en switch-knop) in te kapselen in een stabiele behuizing met gemakkelijke toegang tot alle poorten en SD-kaart. De enige optie die ik vond, met uitzondering van het printen van mijn eigen 3D-ontwerp, was deze. Deze koffer voldoet aan alle eisen en stelt me in staat om een HAT (Hardware Attached on Top) te bevestigen, een uitbreidingskaart met de benodigde elektronische componenten. De volgende afbeelding toont het PCB-schema. Merk op dat de Run-pinnen zich in de Pi Zero bevinden en niet in de HAT. Om het te bouwen, is een stuk van een printplaat van 12 x 10 pinnen voldoende. Om de PCB te snijden heb ik een roterend gereedschap gebruikt.
De omzetter voor logisch niveau heeft zowel hoge als lage spanning nodig, die kan worden verkregen van GPIO (de Pi Zero bevat een step-down-converter van 5 naar 3,3 V genaamd PAM2306AYPKE). Ik heb de schakelknop . geplaatst in het midden van de Pi Zero, omdat het een verlengstuk was van de HAT. Door dit te doen, valt de steel van de knop op uit de behuizing, zodat deze extern kan worden ingedrukt. Je zult een aantal gaten in de behuizing moeten boren:een voor de stoomknop en een (en groter) gat voor de camera. Bovendien moest ik de ruimte van de behuizing die is ontworpen voor de CSI-connector zorgvuldig schuren om ruimte te maken voor een 180 graden draai van de kabel. De volgende foto's tonen de resultaten:
Raspbian Stretch configureren
Voordat u Roomberry aansluit op de mini DIN 7-connector van de Roomba, moeten enkele configuratiestappen worden uitgevoerd. Ervan uitgaande dat de Raspberry Pi Zero W de laatste versie van Raspbian draait en al headless is ingesteld.
Sluit de micro-USB-voeding aan eerder gebouwd voor de Pi Zero. Na een paar seconden zou het systeem operationeel moeten zijn. Open een SSH-verbinding met je pi Zero.
Standaard is de seriële poort van de Pi geconfigureerd om te worden gebruikt voor console-invoer/uitvoer . Om via deze poort met Roomba te communiceren, moet de seriële consolelogin worden uitgeschakeld. U kunt het doen met raspi-configchoosing menu 5 - Interfacing-opties en P6 - Serieel. Antwoord Nee op de vraag "Wilt u in shell inloggen om via serieel toegankelijk te zijn?" en Ja naar "Wilt u dat de seriële poorthardware wordt ingeschakeld?". Start het systeem nog niet opnieuw op. U kunt ook commentaar geven op de consoledefinitie en aan het einde van bestand /boot/config de volgende regel toevoegen:
#Zoek en becommentarieer consoledefinitie
#console=serial0,115200
...
enable_uart=1
Als je het nog niet hebt gedaan, schakel dan de cameramodule in . Nogmaals, je kunt het doen via raspi-config door menu 5 en P1-optie te kiezen. Aan de andere kant kunt u ook bestand /boot/config bewerken en deze wijzigingen opnemen (het uitschakelen van de camera-led is niet vereist, maar wordt aanbevolen om stroom te besparen):
start_x=1
gpu_mem=128
disable_camera_led=1
Ik weet niet zeker wat de optimale hoeveelheid RAM is om toe te wijzen als gpu_memory wanneer de cameramodule wordt gebruikt. Tot nu toe heb ik geen 'Out of resource'-fouten gevonden tijdens het gebruik van de camera, dus ik neem aan dat 128 Mb een goede keuze is.
Alles wisselen uitschakelen en mount /tmp-map in RAM-schijf met 50 megabyte aan ruimte. Deze locatie wordt gebruikt om tijdelijke bestanden op te slaan, zoals camerakiekjes en Roomba-statusbestanden. Verhoog de vastleggingstijd in etc/fstab tot 30 minuten en neem de noatime-optie op in de SD-partitie. Zoek de opdrachten in dit bericht.
Nu is het tijd om te testen of alles correct werkt. Zet je Pi lager en sluit de seriële poort aan op Roomba. Plaats de Roomba bij het oplaadstation . Start het systeem op en controleer of alles werkt zoals verwacht (en dat de robot niets vreemds doet).
Test lezen vanaf seriële poort :ik heb minicom gebruikt om de gegevens te lezen die door Roomba zijn verzonden. Om het te installeren typ je gewoon:
sudo apt-get minicom
Maak verbinding met de seriële poort van Roomba door te doen:
minicom –b 115200 -o -D /dev/serial0
Als uw Roomba aan het opladen is, zou u elke seconde een tekst moeten zien die lijkt op de volgende afbeelding en de oplaadstatus van de Roomba aangeeft. Druk op CTRL + A en X om minicom af te sluiten.
Read More Detail :Roomberry Surveillance Robot:Roomba + Pi Zero + Camera
Productieproces
- Hoe maak je een Arduino+Raspberry Pi-robotplatform
- BrickPi Bookreader
- Raspberry Pi CD Box Robot
- Rollende alarmrobot
- Maak een Minecraft Creeper Robot
- Archimedes:The AI Robot Owl
- Roomberry Surveillance Robot:Roomba + Pi Zero + Camera
- Open CV Robot
- ROS Robot
- Simple Pi Robot
- Robot beklimt muren voor bewaking, inspectie en onderhoudsklussen