Einführung in die Robotik (8 / 10 schritt)

Schritt 8: Software-Design


Der Rover ist ein Hindernis, Vermeidung von Roboter, der allmählich zu einem nahe gelegenen Hindernis vermeiden und Einfrieren, wenn es völlig unfähig sich zu bewegen, ist die Schäden verhindern sollen. Die Software für den Roboter ist eine grundlegende Zustand-Maschine, die für klare und einfache Kontrolle macht. Nach der Initialisierung der GPIO-Richtungen, die Edison wird ständig spüren, verarbeiten, und endlos zu reagieren. In diesem Fall ist der Roboter nur Ausgabe eine Änderung in Motordrehrichtung. Die IR-Sensoren haben sauber Digitalausgänge sind entweder hoch oder niedrig, wodurch die Umwandlung in einfache Ereignisse, die leicht als boolescher Zustand gespeichert werden können. Aufgrund der geringen Reichweite der Sensoren ist der Roboter-Software lediglich reaktiv auf externe Ereignisse. Wenn mit einem IR oder Ultraschall-Entfernungsmesser ausgestattet, wäre der Roboter in der Lage, proaktiv einen Pfad zu bestimmen, die für weitere interessante Verhalten machen würde. Wenn es anfängt, schlage ich mit einer einzigen Art von Sensor arbeiten und lernen, wie gut Sie die Daten bearbeiten können. Sobald Sie bequemes Arbeiten mit einer einzigen Art von Eingabe sind, langsam fügen Sie mehr Sensoren und auf dem Weg zu testen. Dieser Ansatz ist viel mehr methodische, sondern speichern Sie die Kopfschmerzen zu versuchen, viele verschiedene Sensoren gleichzeitig zu integrieren, die schwierig zu debuggen sein kann.

INTEL Intro zu Robotik Demo #define PIN_MOTOR1IN1 4 #define PIN_MOTOR1IN2 5 PIN_MOTOR1PWM 6 PIN_MOTOR2IN1 7 PIN_MOTOR2IN2 8 PIN_MOTOR2PWM 9 #define PIN_SENSOR_FRONT_L 0 #define #define #define #define / / vorne links #define PIN_SENSOR_FRONT_R 1 #define PIN_SENSOR_REAR_L 2 / / hinten links #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 boolescher Wert SensorFrontLActive = False; Boolesche SensorFrontRActive = False; Boolesche SensorRearLActive = False; Boolesche SensorRearRActive = False; Int "DriveTime" = 4000; Millisekunden unsigned long CurTime = 0; unsigned long LastTime = 0; Int CurrentState = STATE_FORWARD; Int LastState = STATE_IDLE; MotorSpeed Byte = 64; Max ist 255 void setup() {PinMode (PIN_MOTOR1IN1, Ausgabe) PinMode (PIN_MOTOR1IN2, Ausgabe) PinMode (PIN_MOTOR2IN1, Ausgang); PinMode (PIN_MOTOR2IN2, OUTPUT); PinMode (PIN_SENSOR_FRONT_L, Eingabe); PinMode (PIN_SENSOR_FRONT_R, Eingabe); PinMode (PIN_SENSOR_REAR_L, Eingabe); PinMode (PIN_SENSOR_REAR_R, Eingabe);} / / Ende-SETUP-ROUTINE void loop() {getSensorInput(); / / Rekord-den rohe Status des IR-Detektoren CurrentState = processSensorData(); / / entscheiden, welchem Staat man eingeben / * CurTime = millis(); / / kleine Routine durchlaufen den Staaten wenn testen (CurTime - LastTime > "DriveTime") {LastTime = CurTime; CurrentState ++; wenn (CurrentState > 4) {CurrentState = 0;}} * / if (CurrentState! = LastState) {/ / nur den Treiber zu aktualisieren, wenn sich etwas geändert hat, LastState = CurrentState; wechseln (CurrentState) {Fall 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: / / idle bei processSensorData() ein Fehler idle(); Break;} / / Ende SWITCHCASE} / / END IF CurrentState} / / MAIN ENDSCHLAUFE void getSensorInput() {SensorFrontLActive =! digitalRead(PIN_SENSOR_FRONT_L); / / speichern das logische NOT Stand der der digitalRead(), da die Sensoren aktiv sind NIEDRIGE SensorFrontRActive =! digitalRead(PIN_SENSOR_FRONT_R); SensorRearLActive =! digitalRead(PIN_SENSOR_REAR_L); SensorRearRActive =! digitalRead(PIN_SENSOR_REAR_R); } / / END Funktion getSensorInput() Int processSensorData() {//If es ist keine Eingabe, nur vorankommen, wenn (! SensorFrontLActive & &! SensorFrontRActive & &! SensorRearLActive & &! SensorRearRActive) {return STATE_FORWARD;} / / wenn etwas vor dem Roboter ist, rückwärts wenn (SensorFrontLActive & & SensorFrontRActive) {return STATE_REVERSE;} //If etwas ist auf der rechten Seite während der Bewegung nach vorne, links abbiegen, wenn (CurrentState == STATE_FORWARD & & SensorFrontRActive) {return STATE_TURNING_L;} //If etwas auf der linken Seite ist während der Bewegung nach vorne , Zug rechts wenn (CurrentState == STATE_FORWARD & & SensorFrontLActive) {return STATE_TURNING_R;} //If etwas ist auf der rechten Seite während der Bewegung in umgekehrter Richtung, biegen Sie rechts ab, wenn (CurrentState == STATE_REVERSE & & SensorFrontLActive) {return STATE_TURNING_R;} //If etwas ist nur auf der linken Seite während der Bewegung in umgekehrter Richtung, links abbiegen, wenn (CurrentState == STATE_REVERSE & & SensorFrontLActive) {return STATE_TURNING_L;} //If alle Sensoren sind aktiv , im Ort im Leerlauf, wenn (SensorFrontLActive & & SensorFrontRActive & & SensorRearLActive & & SensorRearRActive) {return STATE_IDLE;} / * (nicht implementiert) beschleunigen wenn keine Hindernisse erkannt werden, standardmäßig auf eine langsame Geschwindigkeit wenn etwas erkannt wird! Wenn etwas vor dem Roboter beim Rückwärtsfahren, beschleunigen! Wenn etwas hinter den Roboter erkannt wird, beschleunigen
! * / < Br >} / / END FUNCTION processSensorData() void moveForward() {/ / links = vorwärts, rechts = umkehren DigitalWrite (hohe PIN_MOTOR1IN1), DigitalWrite (PIN_MOTOR1IN2, LOW), AnalogWrite (PIN_MOTOR1PWM, MotorSpeed); DigitalWrite (hohe PIN_MOTOR2IN1); DigitalWrite (PIN_MOTOR2IN2, LOW), AnalogWrite (PIN_MOTOR2PWM, MotorSpeed);} void moveReverse() {/ / links = Rückseite, rechts = vorwärts DigitalWrite (PIN_MOTOR1IN1, LOW); DigitalWrite (PIN_MOTOR2IN2 DigitalWrite (hohe PIN_MOTOR1IN2); AnalogWrite (PIN_MOTOR1PWM, MotorSpeed); DigitalWrite (PIN_MOTOR2IN1, LOW) HOCH); AnalogWrite (PIN_MOTOR2PWM, MotorSpeed); } void moveLeft() {/ / links = Rückseite, rechts = umkehren DigitalWrite (PIN_MOTOR1IN1, LOW), DigitalWrite (hohe PIN_MOTOR1IN2), AnalogWrite (PIN_MOTOR1PWM, MotorSpeed); DigitalWrite (hohe PIN_MOTOR2IN1); DigitalWrite (PIN_MOTOR2IN2, LOW), AnalogWrite (PIN_MOTOR2PWM, MotorSpeed);} void moveRight() {/ / links = vorwärts, rechts = vorwärts DigitalWrite (hohe PIN_MOTOR1IN1), DigitalWrite (PIN_MOTOR1IN2, LOW), AnalogWrite (PIN_MOTOR1PWM, MotorSpeed); DigitalWrite (PIN_MOTOR2IN1, LOW); DigitalWrite (hohe PIN_MOTOR2IN2), AnalogWrite (PIN_MOTOR2PWM, MotorSpeed);} void idle() {/ / Motor Eingängen niedrig DigitalWrite (PIN_MOTOR1IN1 HOCH); DigitalWrite (PIN_MOTOR1IN2, LOW); DigitalWrite (PIN_MOTOR1PWM, LOW); DigitalWrite (PIN_MOTOR2IN1, hohe); DigitalWrite (PIN_MOTOR2IN2, LOW); DigitalWrite (PIN_MOTOR2PWM, LOW); }

In Verbindung stehende Artikel

Konfigurieren von MKS Sbase v1. 2-32-Bit-Controller-Grundlagen und Einführung in die Smoothieware.

Konfigurieren von MKS Sbase v1. 2-32-Bit-Controller-Grundlagen und Einführung in die Smoothieware.

ProlougeIch freue mich wirklich zu sehen, wie diese grundlegenden Intro in Smoothieware und der MKS Sbase 1.2 Controller so viel Aufmerksamkeit bekommen haben, und hoffe wirklich, dass es geht um den Menschen zu beginnen oder zu entscheiden, nicht zu
Sommer 2014 Einführung in die Technik-Wettbewerb

Sommer 2014 Einführung in die Technik-Wettbewerb

3. Juli 2014DURCHGruppe: EinteilerBU JiaqingQian JunqiXiang YinanYang SiyuanChen MiaomiaoVG100 EINFÜHRUNG IN DIE TECHNIKDEPATMENT DES MASCHINEN-UND ANLAGENBAUSUNIVERSITY OF MICHIGAN – SHANGHAI JIAO TONG UNIVERSITÄT JOINT INSTITUTE(ÄHM SJTU JI)SHNAGHA
Einführung in die Licht emittierende Diode verwenden Snap Schaltungen

Einführung in die Licht emittierende Diode verwenden Snap Schaltungen

In diesem Foto Instructable erfahren Sie über die Light Emitting Diode oder LED. Zudem erfahren, wie eine einfache Schaltung zu bauen, die zeigt, wie die LED funktioniert mit Snap-Schaltungen.Benötigten Teile:1 Basis-Grid (11 "x 7,7") # 6SC BG1
TWSU Einführung in die Arduino

TWSU Einführung in die Arduino

wollte immer wissen, worum es bei Arduino geht? Wir haben eine kurze Einführung in die Welt der physical computing und Arduino video. Präsentiert von unserem Gründer Daniel Hirschmann.Wir haben eine erstaunliche Start Arduino-Kit für den Verkauf in u
Einführung in die Lederverarbeitung

Einführung in die Lederverarbeitung

Leder ist ein tolles Produkt, das seit wirklich, den Anfängen des Menschen durch den Menschen genutzt wird. Es ist in Kleidung, Schuhe, Taschen, Gürtel, Holster und wirklich, ziemlich viel alles, was man sich vorstellen kann aus Leder gemacht werden
Einführung in die Grundlagen der Kerze

Einführung in die Grundlagen der Kerze

Dies ist mein erster ' Ible also los gehts!Eine Einführung in die Kerze Wachse.Paraffin - Paraffinwachs ist eine weiße oder farblose weiche solide ableitbar aus Erdöl, Kohle oder Ölschiefer. Paraffin Wachs wird meistens als ein weiß, geruchlos, gesch
12V-180kV: ein Akku mit Strom versorgt Marx-Generator (und Einführung in die Elektronik)

12V-180kV: ein Akku mit Strom versorgt Marx-Generator (und Einführung in die Elektronik)

Wenn du diese Instructable liest, eine Sache ist wohl wahr: Sie interessieren sich für Hochspannung! Wenn ja, haben Sie an den richtigen Ort gekommen; Marx-Generatoren können Ihren Durst für Funken, Pony, und begeistern. Ich habe dieses Marx-Generato
Einführung in die Chainmaille

Einführung in die Chainmaille

Haben Sie sich jemals gegründet, stricken, ein Pullover und dachte, "Ich wünschte, diese besseren Schutz gegen Pfeile hatte?" Sie sollten in Erwägung ziehen, sich Ihre Stricknadeln für ein paar Zangen und beginnen, einige chainmaille.*Chainmaill
Einführung in die elektrische Schalter verwenden Snap Schaltungen

Einführung in die elektrische Schalter verwenden Snap Schaltungen

auf diesem Foto Instructable werde ich Ihnen eine kurze Einführung in Snap-Schaltungen. Du wirst lernen, wie man eine einfache Schaltung, um zu verstehen, Direct Current (DC), zu bauen und wie ein elektrischer Schalter funktioniert.Snap-Schaltungen i
Einführung in die Infrarot-Fotos

Einführung in die Infrarot-Fotos

Dies ist eine kurze und einfache Einführung in in IR-Fotografie. Es gibt eine Menge Sachen auf IR Fotos aber ich musste noch eine Menge von Versuch und Irrtum und Graben zu bekommen, als ich gegangen bin. Ein großer Teil davon geht es um Fotobearbeit
Einführung in die ARM-Teil 1

Einführung in die ARM-Teil 1

In diesem ersten Video werde ich eine Einführung in das STM32F0Discovery Development Board, die wir für die nächsten paar Videos verwenden werden.  Ich werde beschreiben die Hardware des Vorstandes und was das Dev-Kit zu bieten hat.Link zur Website v
Hovercraft für Sommer 2014 Einführung in die Technik-Wettbewerb

Hovercraft für Sommer 2014 Einführung in die Technik-Wettbewerb

1. Einführung in Joint InstituteHallo! Wir sind Studenten aus Joint Institute von der Shanghai JiaoTong University in China. Diese schöne Schule befindet sich im Südwesten von Shanghai und Picture1 ist der Blick auf unsere fantastischen Campus.Joint
Einführung in die Dateien und Raspeln

Einführung in die Dateien und Raspeln

Dies ist eine grundlegende Einführung auf ordnungsgemäße Verwendung und Pflege von Dateien und raspeln. Hier untersuchen wir eine Reihe von verschiedenen Größen und Formen von Dateien und raspeln.Beim Sägen und Bohren, erstellt Grate und scharfe Kant
Eine illustrierte Einführung in die Raspberry Pi

Eine illustrierte Einführung in die Raspberry Pi

Der Raspberry Pi wurde ursprünglich entwickelt, um ein Werkzeug für praktisches Lernen, wie Computer funktionieren. Es ist auch ein Werkzeug, das verwendet werden kann, für alle Arten von kreativen Programmierung Projekte machen. Der Punkt der Pi ist