Ich habe versucht, zwei Jetson Nano-Hardware-PWMs aus der Jetson.GPIO Python-Bibliothek auszuführen.

Einführung

Das mit Jetson.GPIO Python-Bibliothek </ A> gelieferte PWM-Beispielskript hat endlich funktioniert. Notieren Sie es sich. Erstens ist das Video. <img width = "50%" alt = "Screenshot 2020-01-13 14.41.50.png " src = "https: // qiita-image" -store.s3.ap-northeast-1.amazonaws.com/0/72479/f86ca2dc-6388-10e9-8586-a338a3766792.png "> </ A>

Die anderen fünf Beispielskripte wurden im Buch "Jetson Nano Super Primer" geschrieben. 1251.jpg

Beispielskript

simple_pwm.py In der README.md der Bibliothek steht nur "Siehe simple_pwm.py für Details zur Verwendung des PWM-Kanals", was im Vergleich zu anderen Beispielskripten schwer zu verstehen war.

"Die Jetson.GPIO-Bibliothek unterstützt PWM nur an dem Pin, an den der Hardware-PWM-Controller angeschlossen ist. Im Gegensatz zur RPi.GPIO-Bibliothek implementiert die Jetson.GPIO-Bibliothek keine softwareemulierte PWM. Jetson Nano Unterstützt zwei Hardware-PWM-Kanäle. Der System-Pinmux muss so konfiguriert sein, dass der Hardware-PWM-Controller mit dem zugehörigen Pin verbunden wird. Wenn Pinmux nicht konfiguriert ist, erreicht das PWM-Signal den Pin. Nein. Die Jetson.GPIO-Bibliothek ändert die Pinmux-Konfiguration nicht dynamisch, um dies zu erreichen. Weitere Informationen zum Konfigurieren von Pinmux finden Sie in der L4T-Dokumentation. "

Es gab hohe Hürden wie Pinmux- und L4T-Dokumente (= Linux für Tegra), aber ich habe endlich mein Verständnis eingeholt und konnte es sicher verschieben. Zunächst konnte ich das Beispielskript ausführen, solange ich die richtigen Pinmux-Einstellungen hatte. Das in JetPack 4.3 (r32.3.1) hinzugefügte Jetson-IO-Tool erleichterte das Einrichten von Pinmux.

(Referenz) Ich habe versucht, die Pinmux-Tabelle mit dem in JetPack 4.3 (r32.3.1) hinzugefügten Jetson-IO-Tool festzulegen. </ A> Ich habe versucht, zwei Hardware-PWMs von Jetson Nano zu verwenden. </ A>

Ändern Sie das Skript, um den Servomotor zu bewegen

Verstehen Sie zunächst den Inhalt des enthaltenen Beispielskripts.

  • Verwenden Sie für Jetson Nano Pin 33 für die PWM-Ausgabe.
  • Stellen Sie den PWM-Zyklus (Zyklus) auf 20 ms (50 Hz) ein. --Stellen Sie das Tastverhältnis (Impulsbreite geteilt durch Periode) auf 25% ein.

simple_pwm.py


import RPi.GPIO as GPIO
import time

output_pins = {
    'JETSON_XAVIER': 18,
    'JETSON_NANO': 33,
}
output_pin = output_pins.get(GPIO.model, None)
if output_pin is None:
    raise Exception('PWM not supported on this board')


def main():
    # Pin Setup:
    # Board pin-numbering scheme
    GPIO.setmode(GPIO.BOARD)
    # set pin as an output pin with optional initial state of HIGH
    GPIO.setup(output_pin, GPIO.OUT, initial=GPIO.HIGH)
    p = GPIO.PWM(output_pin, 50)
    p.start(25)

    print("PWM running. Press CTRL+C to exit.")
    try:
        while True:
            time.sleep(1)
    finally:
        p.stop()
        GPIO.cleanup()

if __name__ == '__main__':
    main()

Das Skript muss geändert werden, da zwei Servomotoren verwendet werden (Geekservo 9g 360 ° -Servomotor).

  • Pineinstellung Wechseln Sie zu 2 (32 Pins, 33 Pins)
  • PWM-Zyklus 20 ms (50 Hz) → Keine Änderung
  • Steuerimpuls 0,5 ms ~ 2,4 ms → Tastverhältnis auf 2,5% ändern (in -90 ° -Richtung drehen) ~ 7,25% (0 ° = stationär) ~ 12% (in + 90 ° -Richtung drehen)

(Geändertes Skript)

simple_pwm_servo.py


#!/usr/bin/env python

import RPi.GPIO as GPIO
import time

output_pin1 = 32
output_pin2 = 33

def main():
    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(output_pin1, GPIO.OUT, initial=GPIO.HIGH)
    p1 = GPIO.PWM(output_pin1, 50)
    GPIO.setup(output_pin2, GPIO.OUT, initial=GPIO.HIGH)
    p2 = GPIO.PWM(output_pin2, 50)

    print("PWM running. Press CTRL+C to exit.")
    try:
        while True:
            p1.start(2.5)
            print("p1 start at 2.5%")
            time.sleep(1)
            p2.start(2.5)
            print("p2 start at 2.5%")
            time.sleep(1)
            p1.start(7.25)
            print("p1 start at 7.25%")
            time.sleep(1)
            p2.start(7.25)
            print("p2 start at 7.25%")
            time.sleep(1)
            p1.start(12)
            print("p1 start at 12%")
            time.sleep(1)
            p2.start(12)
            print("p2 start at 12%")
            time.sleep(1)
            p1.start(7.25)
            print("p1 start at 7.25%")
            time.sleep(1)
            p2.start(7.25)
            print("p2 start at 7.25%")
            time.sleep(1)
    finally:
        p1.stop()
        p2.stop()
        GPIO.cleanup()

if __name__ == '__main__':
    main()

(Ausführungsergebnis)

$ python3 simple_pwm_servo.py
PWM running. Press CTRL+C to exit.
p1 start at 2.5%
p2 start at 2.5%
p1 start at 7.25%
p2 start at 7.25%
p1 start at 12%
p2 start at 12%
p1 start at 7.25%
p2 start at 7.25%
...

Recommended Posts

Ich habe versucht, zwei Jetson Nano-Hardware-PWMs aus der Jetson.GPIO Python-Bibliothek auszuführen.
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich wollte die Python-Bibliothek von MATLAB verwenden
Ich habe die Changefinder-Bibliothek ausprobiert!
Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe es mit Grumpy versucht (Python ausführen).
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe versucht, das Python Package Repository (Warehouse) auszuführen, das PyPI unterstützt
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Python: Ich habe das Problem des Handlungsreisenden ausprobiert
Ich habe das Python Tornado Testing Framework ausprobiert
Ich habe versucht, die Python-Bibliothek "pykakasi" zu verwenden, die Kanji in Romaji konvertieren kann.
[IBM Cloud] Ich habe versucht, über Cloud Funtions (Python) auf die Tabelle Db2 on Cloud zuzugreifen.
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen
[Python] Ich habe die gleiche Berechnung versucht wie die Vorhersage von LSTM von Grund auf [Keras]
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe zum ersten Mal versucht, Python zu programmieren.
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, Python -m summpy.server -h 127.0.0.1 -p 8080 auszuführen
Ich habe versucht, Deep Floor Plan mit Python 3.6.10 auszuführen.
Ich habe versucht, alembic auszuführen, ein Migrationstool für Python
Ich habe versucht, die funktionale Programmierbibliothek toolz zu verwenden
Ich habe versucht, verschiedene Informationen von Remote-PC aus Python von WMI Library zu extrahieren
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Berühren Sie den neuesten physikbasierten Renderer Mitsuba2 (2) Move from Python
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
Ich habe versucht, die App auf der IoT-Plattform "Rimotte" auszuführen.
Ich habe versucht, Soma Cube mit Python zu lösen
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
[Python] Ich habe versucht, einen lokalen Server mit flask auszuführen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe jeden Tag LeetCode ausprobiert. 1. Zwei Summen (Python, Go)
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe versucht, das Offline-Spracherkennungssystem Julius mit Python in der virtuellen Docker-Umgebung auszuführen
Ich habe versucht, Pymc auszuführen
Ich habe Python> autopep8 ausprobiert
Ich habe Python> Decorator ausprobiert
Ich habe versucht, TensorFlow auszuführen
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
Ich habe versucht, API list.csv mit Python aus swagger.yaml zu erstellen
Ich habe vorerst versucht, PIFuHD unter Windows auszuführen
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
[Python] Ich habe das Spiel von pip installiert und versucht zu spielen
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
[Python] Ich habe versucht, die folgende Beziehung von Twitter zu visualisieren