Introduction à la robotique (8 / 10 étapes)

Étape 8: Conception de logiciels

Le rover est un obstacle en évitant le robot qui transformera graduellement afin d’éviter un obstacle à proximité et geler si elle est complètement incapable de bouger, ce qui devrait éviter d’endommager. Le logiciel du robot est une base machine d’État, qui en fait pour un contrôle simple et clair. Après avoir initialisé les directions GPIO, l’Edison sera continuellement le sens, traiter et réagir sans cesse. Dans ce cas, la seule sortie possible du robot est un changement de sens du moteur. Les capteurs IR sont sorties propre numériques qui sont soit haut ou bas, ce qui rend les convertissant en événements simples qui peuvent être conservés comme un état booléen. En raison de la nature de courte portée des capteurs, le logiciel du robot est simplement réactif aux événements extérieurs. Si équipé d’un télémètre à ultrasons ou d’IR, le robot serait en mesure de déterminer proactivement un chemin d’accès, ce qui en ferait pour un comportement plus intéressant. Lors du démarrage, je suggère de travailler avec un seul type de capteur et apprendre comment vous pouvez traiter les données. Une fois que vous êtes à l’aise de travailler avec un seul type d’entrée, lentement, ajouter plus de capteurs et testez-les le long du chemin. Cette approche est beaucoup plus méthodique, mais vous permettra d’économiser le maux de tête d’essayer d’intégrer de nombreux capteurs différents en même temps, qui peut être difficile à déboguer.

INTEL Intro à la robotique démo #define PIN_MOTOR1IN1 4 #define PIN_MOTOR1IN2 5 #define PIN_MOTOR1PWM 6 #define PIN_MOTOR2IN1 7 #define PIN_MOTOR2IN2 8 #define PIN_MOTOR2PWM 9 #define PIN_SENSOR_FRONT_L 0 / / avant gauche #define PIN_SENSOR_FRONT_R 1 #define PIN_SENSOR_REAR_L 2 / / arrière gauche #define PIN_SENSOR_REAR_R 3 #define STATE_TURNING_L 0 #define STATE_TURNING_R 1 #define STATE_FORWARD 2 #define STATE_REVERSE 3 #define STATE_IDLE 4 boolean sensorFrontLActive = false ; sensorFrontRActive booléen = false ; sensorRearLActive booléen = false ; sensorRearRActive booléen = false ; driveTime int = 4000 ; millisecondes unsigned long curTime = 0 ; unsigned long lastTime = 0 ; currentState int = STATE_FORWARD ; int lastState = STATE_IDLE ; motorSpeed octets = 64 ; Max est 255 setup() Sub {pinMode (PIN_MOTOR1IN1, sortie) pinMode (PIN_MOTOR1IN2, OUTPUT); pinMode (PIN_MOTOR2IN1, sortie); pinMode (PIN_MOTOR2IN2, OUTPUT); pinMode (entrée, PIN_SENSOR_FRONT_L); pinMode (entrée, PIN_SENSOR_FRONT_R); pinMode (entrée, PIN_SENSOR_REAR_L); pinMode (entrée, PIN_SENSOR_REAR_R);} / / fin d’installation ROUTINE void loop() {getSensorInput(); / / enregistrer l’état brut de l’état actuel les détecteurs IR = processSensorData(); / / décider quel État pour entrer / * curTime = millis(); / / petit test de routine pour parcourir les États si (curTime - lastTime > driveTime) {lastTime = curTime ; currentState ++; if (currentState > 4) {currentState = 0;}} * / if (currentState! = lastState) {/ / mise à jour uniquement le pilote, si quelque chose a changé lastState = currentState ; switch (currentState) {affaire STATE_FORWARD : moveForward() ; break ; case STATE_REVERSE : moveReverse() ; break ; case STATE_IDLE : idle() ; break ; case STATE_TURNING_L : moveLeft() ; break ; case STATE_TURNING_R : moveRight() ; break ; default: / / ralenti si processSensorData() fait une erreur idle() ; break;} / / fin SWITCHCASE} / / END IF currentState} / / fin de boucle principale void getSensorInput() {sensorFrontLActive =! digitalRead(PIN_SENSOR_FRONT_L); / / enregistrer la logique n’est pas état de la digitalRead(), parce que les capteurs sont actives BAS sensorFrontRActive =! digitalRead(PIN_SENSOR_FRONT_R) ; sensorRearLActive =! digitalRead(PIN_SENSOR_REAR_L) ; sensorRearRActive =! digitalRead(PIN_SENSOR_REAR_R) ; } / / FIN de fonction getSensorInput() int processSensorData() {//If il n’y a aucune entrée, juste aller de l’avant si (! sensorFrontLActive & &! sensorFrontRActive & &! sensorRearLActive & &! sensorRearRActive) {return STATE_FORWARD;} / / si quelque chose est devant le robot, inversez si (sensorFrontLActive & & sensorFrontRActive) {return STATE_REVERSE;} //If quelque chose est sur la droite tout en se déplaçant vers l’avant, tourner à gauche si (currentState == STATE_FORWARD & & sensorFrontRActive) {return STATE_TURNING_L;} //If quelque chose est sur la gauche tout en se déplaçant vers l’avant , tourner à droite si (currentState == STATE_FORWARD & & sensorFrontLActive) {return STATE_TURNING_R;} //If quelque chose est sur la droite tout en se déplaçant en sens inverse, tourner à droite si (currentState == STATE_REVERSE & & sensorFrontLActive) {return STATE_TURNING_R;} //If quelque chose n’est que sur la gauche tout en se déplaçant en sens inverse, tourner à gauche si (currentState == STATE_REVERSE & & sensorFrontLActive) {return STATE_TURNING_L;} //If tous les capteurs sont actives , idle en place si (sensorFrontLActive & & sensorFrontRActive & & sensorRearLActive & & sensorRearRActive) {return STATE_IDLE;} / * accélération (non implémentée) si aucun obstacle n’est détectés, par défaut à une vitesse lente si quelque chose est détecté ! Si quelque chose est devant le robot en marche arrière, accélérer ! Si quelque chose est détecté derrière le robot, accélérer
! * / < Br >} / / END FUNCTION processSensorData() void moveForward() {/ / gauche = vers l’avant, droite = inverser digitalWrite (PIN_MOTOR1IN2, basse); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, HIGH); digitalWrite (PIN_MOTOR2IN2, basse), digitalWrite (PIN_MOTOR1IN1, HIGH); analogWrite (PIN_MOTOR2PWM, motorSpeed);} void moveReverse() {/ / gauche = marche arrière, droite = digitalWrite (PIN_MOTOR1IN1, LOW); digitalWrite (PIN_MOTOR1IN2, HIGH); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, basse), digitalWrite (PIN_MOTOR2IN2 en avant ÉLEVÉ) ; analogWrite (PIN_MOTOR2PWM, motorSpeed) ; } void moveLeft() {/ / gauche = marche arrière, droite = inverser digitalWrite (PIN_MOTOR1IN2, HIGH); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, HIGH); digitalWrite (PIN_MOTOR2IN2, basse), digitalWrite (PIN_MOTOR1IN1, basse); analogWrite (PIN_MOTOR2PWM, motorSpeed);} void moveRight() {/ / gauche = vers l’avant, droite = transmettre digitalWrite (PIN_MOTOR1IN2, basse); analogWrite (PIN_MOTOR1PWM, motorSpeed); digitalWrite (PIN_MOTOR2IN1, LOW); digitalWrite (PIN_MOTOR2IN2, élevé), digitalWrite (PIN_MOTOR1IN1, HIGH); analogWrite (PIN_MOTOR2PWM, motorSpeed);} void idle() {/ / moteur entrées basse digitalWrite (PIN_MOTOR1IN1 ÉLEVÉ) ; digitalWrite (PIN_MOTOR1IN2, basse) ; digitalWrite (PIN_MOTOR1PWM, basse) ; digitalWrite (PIN_MOTOR2IN1, élevé) ; digitalWrite (PIN_MOTOR2IN2, basse) ; digitalWrite (PIN_MOTOR2PWM, basse) ; }

Articles Liés

Introduction à la robotique de base

Introduction à la robotique de base

Cette instructable est destinée à aider à construire un robot de base que vous pouvez acheter en kit ou monter via opensource. Vous pouvez obtenir la trousse en utilisant la nomenclature opensource sur notre site Web, http://www.build-bots.com/. *HAL
IoT - contrôler un Robot de Pi framboise sur internet avec HTML et shell scripts seulement

IoT - contrôler un Robot de Pi framboise sur internet avec HTML et shell scripts seulement

(Si vous aimez cette Instructables, n'oubliez pas de voter à ce sujet (ci-dessus : drapeau de coin à droite). il est en concurrence sur l'INTERNET des objets et des concours d'automatisation. Merci beaucoup! ;-)Dans cette instructables, nous allons a
Robot de détection de couleur

Robot de détection de couleur

University of Manitoba Introduction à la robotique projet Final :J'ai conçu un robot à l'aide de framboise pi et Matlab qui détecte la couleur et se déplace en conséquence.Etape 1: Eléments requis-Raspberry Pi 2 (avec des périphériques standards)-Web
Robot d’évitement de Actobitty 2 roue objet

Robot d’évitement de Actobitty 2 roue objet

Bonjour tout le monde.Ce projet vise à construire un robot Arduino qui peut évite les objets à sa manière. Il est issu d'un robot de roues Actobitty 2, un microcontrôleur Arduino Uno, un bouclier moteur Arduino et un capteur de Distance ultrason HC-S
La tête binoculaire Robot un stéréoscope caméra

La tête binoculaire Robot un stéréoscope caméra

IntroductionRobots de film célèbres comme Wall-E et Johnny Five ont une vision binoculaire non seulement parce qu'il est mignon et relatable, mais il peut servir une fonction pratique. La vision binoculaire est la façon naturelle d'ajoutant la profon
Sensibilisation de la robotique pour les élèves de l’école primaire

Sensibilisation de la robotique pour les élèves de l’école primaire

Hello, world ! Nous sommes une équipe de robotique de l'école secondaire de Madison, New Jersey. Notre gamme de membres âgés de 13 à 18 (juges, prenez note!). Nous sommes en concurrence au Premier Tech Challengeannuel. Chaque année, notre école organ
Projet de robotique bricolage - Barnabé-Bot 2.0

Projet de robotique bricolage - Barnabé-Bot 2.0

CE QUI EST BARNABAS-BOT ?Barnabé-Bot est une introduction à la robotique kit (et classe) qui donne l'occasion aux élèves d'apprendre la Science, technique, Art et mathématiques d'une manière engageante et le plaisir. Par le biais de ce cours, enfants
Mise à niveau suiveur de ligne analogique à Arduino avec Attiny85

Mise à niveau suiveur de ligne analogique à Arduino avec Attiny85

RésuméDans ce Instructable nous allons vous montrer comment mettre à niveau un analogue de la bon marché suiveur de ligne dans un suiveur de ligne Arduino intelligent en remplaçant le comparateur LM393 IC par un Attiny85 intelligent et un Arduino cro
Revisited Mousebot

Revisited Mousebot

Mousebot de vol 2 de la marque est une amusante introduction à la robotique. Pour le plaisir que j'ai créé cette documentation étendue d'un Mousey build de bout en bout, avec quelques conseils très peu, vous ne trouverez dans le mag. Ce How-to est mi
Suiveur de ligne à l’aide de launchpad msp430g2

Suiveur de ligne à l’aide de launchpad msp430g2

Dans ce instructable j'écrirai sur bot suiveur de ligne. Ce poste couvre comment fonctionne un capteur de lumière et comment faire votre propre détecteur de lumière. Toutes critiques sont les bienvenus.IntroductionUn robot suiveur de ligne est comme
Tapsterbot 2.0 : Palonnier Assemblée

Tapsterbot 2.0 : Palonnier Assemblée

Le Tapsterbot 2.0 est un open source deltabot, qui vise à aider les tests d'applications mobiles sur des appareils réels (iOS, Android, etc.), mais qui pourraient servir d'une excellente introduction à la robotique et Arduino.Ici, nous allons assembl
Tapster 2.0 : Fixer les Servos à partie supérieure

Tapster 2.0 : Fixer les Servos à partie supérieure

Bienvenue à la prochaine étape pour le Tapsterbot ! Le Tapsterbot 2.0 est un open source deltabot, qui vise à aider les tests d'applications mobiles sur des appareils réels (iOS, Android, etc.), mais qui pourraient servir d'une excellente introductio
Aspirateur Central du pauvre

Aspirateur Central du pauvre

Un aspirateur central est un système de conduite interne, relié à un aspirateur fixe. Attaché à la mène, généralement via une sortie d'air, un portable et long tuyau est utilisé pour faire l'aspiration réelle.Trois avantages d'un tel système :L'air v
Scribblebots

Scribblebots

Introduction de robotique à nos étudiants, nous avons commencé en explorant ce qui est et n'est pas un robot. Nous avons également discuté de ce que peuvent faire les robots. Nous avons exploré les composants des robots et commencé notre enquête sur