Jetson Nano の2GB版でやってみます。
2GB ->Ubuntu 18.04.6 LTS(Jetpack 4.6の2GBバージョン)
サーボモータはMG90SとSG90-HVを使ってみました。
MG90Sは180度、SG90-HVは360度回転します。
NanoではPWMで使えるGPIOピンは2つのようです(33と32)。
2 つのハードウェア PWM を使用するためにJetson-IO tool を使用して Pinmux テーブルの設定をしておきます。
Jetson-IO tool を起動
1 |
sudo /opt/nvidia/jetson-io/jetson-io.py |
40 pinの設定
スペースキーを押してアスタリスクを入れて、設定をSaveしておきます。
保存
一度Jetsonを再起動
*jetson-io.py実行時に一瞬、画面に何かが表示されて直ぐに終了してしまう場合
DTB ファイルが /boot ディレクトリ配下に存在しているので、/boot/dtb ディレクトリを作成して、その中にコピーします(すでにdtbディレクトリが存在している場合もあります、その場合はmkdirは不要)。
1 2 3 |
cd /boot sudo mkdir dtb sudo cp *.dtb* dtb/ |
再度、jetson-io.py を実行
MG90Sの操作例
キーボードからのキー入力を取得
1 |
sudo pip3 install readchar |
往復でちょっとづつ回転、qキーで終了
GPIOのライブラリはJetson.GPIOでもRPi.GPIOでもOKのようです。
2個のサーボをそれぞれ別スレッドで操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
import Jetson.GPIO as GPIO #import RPi.GPIO as GPIO import time import threading import readchar import os output_pin1 = 32 output_pin2 = 33 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) def p1_loop(): while flag: p1.start(2.5) print("p1 start at 2.5%") time.sleep(1) p1.start(7.25) print("p1 start at 7.25%") time.sleep(1) p1.start(12) print("p1 start at 12%") time.sleep(1) p1.start(7.25) print("p1 start at 7.25%") time.sleep(1) def p2_loop(): while flag: p2.start(2.5) print("p2 start at 2.5%") time.sleep(1) p2.start(7.25) print("p2 start at 7.25%") time.sleep(1) p2.start(12) print("p2 start at 12%") time.sleep(1) p2.start(7.25) print("p2 start at 7.25%") time.sleep(1) if __name__ == '__main__': flag = True thread_1 = threading.Thread(target=p1_loop) thread_1.start() thread_2 = threading.Thread(target=p2_loop) thread_2.start() while True: c = readchar.readkey() if c == 'q': print("You pressed q") flag = False thread_1.join() thread_2.join() p1.stop() p2.stop() GPIO.cleanup() os._exit(1) |
SG90-HVの操作例
360度連続回転、車輪の回転などに使います。
キーボードからのキー入力を取得
1 |
sudo pip3 install readchar |
fキー:前進
bキー:後退
lキー:左旋回
rキー:右旋回
sキー:停止
qキー:終了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
import Jetson.GPIO as GPIO import time import readchar import os output_pin1 = 32 output_pin2 = 33 GPIO.setmode(GPIO.BOARD) GPIO.setup(output_pin1, GPIO.OUT, initial=GPIO.HIGH) GPIO.setup(output_pin2, GPIO.OUT, initial=GPIO.HIGH) p1 = GPIO.PWM(output_pin1, 50) p2 = GPIO.PWM(output_pin2, 50) def normal_forward(): p1.start(5.8);p2.start(8.3) def normal_back(): p1.start(8.3);p2.start(5.8) def turn_left(): p1.start(5.8);p2.start(5.8) def turn_right(): p1.start(8.3);p2.start(8.3) def stop(): p1.start(0.0);p2.start(0.0) if __name__ == '__main__': while True: c = readchar.readkey() if c == 'q': print("You pressed q") p1.stop() p2.stop() GPIO.cleanup() os._exit(1) elif c == 'f': normal_forward() elif c == 'b': normal_back() elif c == 'l': turn_left() elif c == 'r': turn_right() elif c == 's': stop() |
Leave a Reply