J'ai essayé d'exécuter deux PWM matériels Jetson Nano à partir de la bibliothèque Jetson.GPIO Python.

introduction

L'exemple de script PWM fourni avec la bibliothèque Jetson.GPIO Python a enfin fonctionné, alors notez-le. Le premier est la vidéo. <img width = "50%" alt = "Capture d'écran 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 ">

Les cinq autres exemples de scripts ont été écrits dans le livre "Jetson Nano Super Primer". 1251.jpg

Exemple de script

simple_pwm.py Le fichier README.md de la bibliothèque dit seulement «Voir simple_pwm.py pour plus de détails sur la façon d'utiliser le canal PWM», ce qui était difficile à comprendre par rapport à d'autres exemples de scripts.

"La bibliothèque Jetson.GPIO prend uniquement en charge PWM sur la broche à laquelle le contrôleur PWM matériel est connecté. Contrairement à la bibliothèque RPi.GPIO, la bibliothèque Jetson.GPIO n'implémente pas le PWM émulé par logiciel. Jetson Nano Prend en charge deux canaux PWM matériels. Le pinmux du système doit être configuré pour connecter le contrôleur PWM matériel à la broche associée. Si pinmux n'est pas configuré, le signal PWM atteint la broche. Non. La bibliothèque Jetson.GPIO ne modifie pas dynamiquement la configuration de pinmux pour y parvenir. Lisez la documentation L4T pour plus d'informations sur la configuration de pinmux. "

Il y avait des obstacles importants tels que les documents pinmux et L4T (= Linux pour Tegra), mais j'ai finalement rattrapé ma compréhension et j'ai pu le déplacer en toute sécurité. Tout d'abord, j'ai pu exécuter l'exemple de script tant que j'avais les bons paramètres pinmux. L'outil Jetson-IO ajouté dans JetPack 4.3 (r32.3.1) a facilité la configuration de Pinmux.

(référence) J'ai essayé de définir la table Pinmux à l'aide de l'outil Jetson-IO ajouté dans JetPack 4.3 (r32.3.1). J'ai essayé d'utiliser deux PWM matériels de Jetson Nano.

Modifier le script pour déplacer le servomoteur

Tout d'abord, comprenez le contenu de l'exemple de script inclus.

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()

Le script doit être modifié car il utilise deux servomoteurs (servomoteur Geekservo 9g 360 °).

(Script modifié)

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()

(Résultat de l'exécution)

$ 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

J'ai essayé d'exécuter deux PWM matériels Jetson Nano à partir de la bibliothèque Jetson.GPIO Python.
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé d'exécuter python à partir d'un fichier chauve-souris
Je voulais utiliser la bibliothèque Python de MATLAB
J'ai essayé la bibliothèque changefinder!
J'ai essayé de reconnaître le visage de la vidéo (OpenCV: version python)
J'ai essayé de changer le script python de 2.7.11 à 3.6.0 sur Windows10
J'ai essayé Grumpy (allez exécuter Python).
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé d'exécuter le référentiel de packages Python (entrepôt) qui prend en charge PyPI
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
Python: j'ai essayé le problème du voyageur de commerce
J'ai essayé le framework de test Python Tornado
J'ai essayé d'utiliser la bibliothèque Python "pykakasi" qui peut convertir des kanji en romaji.
[IBM Cloud] J'ai essayé d'accéder à la table Db2 on Cloud à partir de Cloud Funtions (python)
[Python] J'ai essayé d'obtenir le nom du type sous forme de chaîne de caractères à partir de la fonction type
[Python] J'ai essayé le même calcul que la prédiction de LSTM à partir de zéro [Keras]
[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
J'ai essayé d'accéder à l'API Qiita depuis le début
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé la méthode des moindres carrés en Python
J'ai essayé la programmation python pour la première fois.
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé d'utiliser le module Datetime de Python
J'ai essayé d'exécuter python -m summpy.server -h 127.0.0.1 -p 8080
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'exécuter alembic, un outil de migration pour Python
J'ai essayé d'utiliser la bibliothèque de programmation fonctionnelle toolz
J'ai essayé d'extraire diverses informations du PC distant de Python par la bibliothèque WMI
J'ai essayé de représenter graphiquement les packages installés en Python
J'ai essayé Python sur Mac pour la première fois.
Touchez le dernier moteur de rendu basé sur la physique Mitsuba2 (2) Passer de Python
J'ai essayé de détecter l'iris à partir de l'image de la caméra
J'ai essayé d'exécuter l'application sur la plateforme IoT "Rimotte"
J'ai essayé de résoudre Soma Cube avec python
[Python] J'ai essayé de représenter graphiquement le top 10 des ombres à paupières
[Python] J'ai essayé d'exécuter un serveur local en utilisant flask
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé LeetCode tous les jours 1. Two Sum (Python, Go)
J'ai essayé de frapper l'API avec le client python d'echonest
J'ai essayé d'exécuter l'exemple de code du module Ansible
J'ai essayé de résumer les opérations de chaîne de Python
J'ai essayé d'exécuter le système de reconnaissance vocale hors ligne Julius avec python dans l'environnement virtuel Docker
J'ai essayé d'exécuter pymc
J'ai essayé Python> autopep8
J'ai essayé Python> décorateur
J'ai essayé d'exécuter TensorFlow
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de simuler la propagation de l'infection avec Python
J'ai essayé de créer une API list.csv avec Python à partir de swagger.yaml
J'ai essayé d'exécuter PIFuHD sur Windows pour le moment
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
[Python] J'ai installé le jeu depuis pip et j'ai essayé de jouer
J'ai essayé de programmer le test du chi carré en Python et Java.
[Python] J'ai essayé de visualiser la relation de suivi de Twitter