Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Nox – A House Wandering Robot (ROS)

Nox is een leuke (en tijdrovende) robot die SLAM (ROS) met een Kinect gebruikt om in zijn omgeving te navigeren. Nox is een differentieel aangedreven robot gebouwd met ROS, Raspberry Pi en Arduino. Ik begon het project als een robotbasis met basisnavigatie die ik vervolgens voor andere dingen kon gebruiken, zoals een stofzuiger.

Ik besloot echter al snel om er een op zichzelf staande robot van te maken met een goed ontwerp, omdat het vaak ontbreekt in doe-het-zelf-robots. In de huidige staat kan de robot SLAM (gmapping) gebruiken om een ​​kaart van zijn omgeving te maken (met behulp van de Kinect-dieptewaarneming om muren en obstakels te detecteren) en zichzelf binnen de kaart lokaliseren. Het kan een pad naar een bepaald doel plannen en ernaartoe rijden door obstakels te vermijden.

Nox wordt aangedreven door een 11.1v lithium-ionbatterij en aangedreven door twee motoren. Het voorpaneel kan worden verwijderd om de batterij te vervangen. Een sleufgat en een schroef maken het vast en maken het mogelijk om batterijen van verschillende lengtes te plaatsen. Ik heb een batterijalarm geplaatst met een scherm om het niveau in de gaten te houden.


De motoren zijn twee 12v DC-motoren (107 tpm) van Banggood. Ze zijn leuk, maar ik heb de robot eigenlijk niet nodig om zo snel te gaan en ik had best een deel van de snelheid kunnen inruilen voor nauwkeurigere encoders.

Wat betreft het ontwerp, de belangrijkste beperking was om iets te hebben dat goed integreert met de Kinect, omdat ik de robot eromheen bouwde. Ik werd geïnspireerd door de driehoekige look van veel moderne stijlobjecten (en veel door Deus Ex moet ik toegeven). Ik wilde echt een mooie en professioneel ogende robot hebben, want het is iets dat vaak ontbreekt in doe-het-zelf-robots (maar maak je geen zorgen, de bedrading is zo rommelig als het zou moeten zijn). Een paar weken aan het CAD-model besteden om alles aan te passen was nodig.

De lampjes aan de zijkant zijn gerecycled van een gloeiende stok op oudejaarsavond die ik gratis heb gekregen en dienen om de toestand van de robot aan te geven. Als de Arduino niet is aangesloten op de ROS-master (wat aangeeft dat het robotprogramma nog niet is gestart) knipperen de lampjes drie keer heel snel achter elkaar. Tijdens het rijden knipperen de lichten meer "ademend" en de knippersnelheid is afhankelijk van de snelheid van de robot.

Knippert geen verbinding

Inactief knipperend

Structuur

Zoals hierboven vermeld, is de robot differentieel aangedreven, dus de motor is op dezelfde as geplaatst. De basis is gemaakt van hout met twee zwenkwielen voor ondersteuning. Ik was aanvankelijk van plan om één zwenkwiel te gebruiken om het hyperstatische ding te vermijden, maar kon geen goede vinden. De rest van de structuur is voornamelijk gemaakt van hout en metalen beugels, gemakkelijk te vinden in elke doe-het-zelfwinkel. Op het achterste deel van de robot kunnen platen worden gestapeld om de elektronische borden op te plaatsen.


De carter is gemaakt van zwarte plastic plaat, met de hand gesneden en gelijmd (zal de volgende keer zeker 3D-printen gebruiken).


Hardware

Aan de binnenkant van de hoofdcontroller bevindt zich een Raspberry Pi 3B met Ubuntu en ROS. De Raspberry is toegankelijk vanaf een externe computer via WiFi en ssh om de robot opdracht te geven. Het ROS-programma voert odometrieberekening, navigatieplanning en mapping uit met behulp van de Kinect. De Raspberry Pi stuurt het snelheidscommando naar een Arduino die de twee motoren bestuurt met een PID via een Adafruit Motor Shield. Het leest de waarde van de encoder, berekent de snelheid van elke motor en stuurt de waarde terug naar de Raspberry voor berekening van de kilometerstand. Arduino en Raspberry Pi zijn verbonden via USB en het Arduino-programma fungeert als een ROS-knooppunt (kijk naar rosserial voor meer info).

Ik heb verschillende soorten Arduino gebruikt voordat ik genoegen nam met de goede. In het begin gebruikte ik de basis Arduino Uno, maar ik had niet genoeg interrupt-pinnen om de encoderwaarden mee te lezen (de beste methode om dit met Arduino te doen). De snelheid en nauwkeurigheid waren beperkt omdat ik mijn toevlucht moest nemen tot andere programmeertrucs om het te laten werken. Ik probeerde een Arduino Leonardo te gebruiken, maar de beperkende factor was het geheugen en ik moest uiteindelijk overschakelen naar een Arduino Mega 2560. Een verhulde zegen, want ik heb genoeg geheugen en pinnen over om nu nieuwe functies toe te voegen.

Kinect 360 maakte vanaf het begin deel uit van het project, omdat ik SLAM (Simultaneous Localization And Mapping) wilde doen, maar zonder een hoop geld uit te geven aan een lidar. Een kinect is in feite een 3D-camera van € 25 (verwacht natuurlijk niet dezelfde nauwkeurigheid als een Hokuyo) en kan, naast de dieptescan die nodig is voor SLAM, ook worden gebruikt voor computervisie, heeft een versnellingsmeter en een microfoon reeks. Dit is allemaal handig voor de volgende stappen van het project.

Twee DC-converters worden gebruikt om de spanning om te zetten. De motor loopt direct met de accuspanning (min of meer 11,1v). Het commandogedeelte (inclusief Raspberry Pi, Arduino en encoders) draait op 5V omgezet van de batterij. De Kinect heeft een gestabiliseerde spanning van 12 V nodig en een converter levert deze ook vanuit de batterij.

Software

Voor het softwaregedeelte heb ik ROS Kinetic gebruikt. Het enige knooppunt dat ik echt heb geschreven, is de "nox_controller", die, zoals zijn naam niet echt suggereert, wordt gebruikt om de odometrie te berekenen uit de Arduino-gegevens (motorsnelheid). Het model dat voor de berekeningen is gebruikt, is te vinden in het artikel "On Differential Drive Robot Odometry with Application to Path Planning" (ik heb eigenlijk mijn eigen formules gemaakt, maar ze zijn hetzelfde, hoe dan ook, het papier is het lezen waard). Covariantiematrices worden gegeven in de odometrie, maar worden momenteel niet gebruikt (het zal echter nuttig worden als ik een IMU integreer in de odometrie).

In de Arduino gebeurt de motorbesturing via PWM. Een PID wordt verondersteld om elke motorsnelheid te beheren, maar omdat de PWM/motorsnelheidsverhouding erg lineair is, kreeg ik een goed resultaat met een directe besturing van de snelheid en heb ik de PID voorlopig gedeactiveerd. Maakt u zich geen zorgen, hoewel de juiste PID-implementatie en kalibratie onderweg zijn.

Lees meer detail:Nox – Een huiszwervende robot (ROS)


Productieproces

  1. Hoe maak je een Arduino+Raspberry Pi-robotplatform
  2. Robot die Raspberry Pi &Bridge Shield gebruikt
  3. Raspberry Pi CD Box Robot
  4. ANDY:een multifunctionele "humanoïde" robot
  5. Rollende alarmrobot
  6. Maak een Minecraft Creeper Robot
  7. JQR Quadruped Autonomous Robot
  8. Archimedes:The AI ​​Robot Owl
  9. EMAR Mini – Noodhulprobot
  10. Wifi-gestuurde robot met Raspberry Pi
  11. Intellisaurus – Dinosaur Robot Kit