はじめに
こんにちは!この記事では、Jetson NanoというミニコンピューターをRoomba 980に接続し、操作する方法を詳しくご紹介します。プログラミングで掃除機ロボットを動かすなんて、ワクワクしますよね。難しそうに思えるかもしれませんが、一緒に頑張れば誰でもできるようになります!
必要な機材
まずは、必要な機材を確認しましょう:
- Jetson Nano
- Roomba 980
- USB-MicroUSBケーブル
- Jetson Nano用電源ケーブル
- モニター、キーボード、マウス(初期設定用)
- ネットワーク環境(有線LANまたはWi-Fi)
Jetson Nanoの準備
Jetson Nanoは小型のコンピューターです。使用前にOSをインストールする必要があります:
- NVIDIAの公式サイトからJetson Nano Developer Kit SDカードイメージをダウンロード
- イメージをSDカードに書き込む(Etcher等のツールを使用)
- SDカードをJetson Nanoに挿入し、電源を入れる
- 画面の指示に従ってセットアップを完了
- ネットワークに接続し、IPアドレスをメモしておく
SSH接続の設定
Jetson Nanoをヘッドレス(モニターなし)で操作するために、SSH接続を設定します。この過程には、SSH鍵の作成、Jetson Nanoの設定、制御用PCの設定が含まれます。
SSH鍵の作成
-
制御用PCで端末(ターミナル)を開きます。
-
以下のコマンドを実行してSSH鍵を生成します:
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_for_jet
-
パスフレーズの入力を求められますが、セキュリティを重視する場合を除き、空白のままEnterを押して進めます。
-
これにより、
~/.ssh/id_rsa_for_jet
(秘密鍵)と~/.ssh/id_rsa_for_jet.pub
(公開鍵)が作成されます。
Jetson Nanoの設定
-
Jetson Nanoに直接アクセスできる状態で、端末を開きます。
-
SSHを有効にします:
sudo systemctl enable ssh sudo systemctl start ssh
-
制御用PCで作成した公開鍵をJetson Nanoに追加します:
mkdir -p ~/.ssh chmod 700 ~/.ssh
-
制御用PCからJetson Nanoに公開鍵をコピーします。制御用PCで以下のコマンドを実行:
scp ~/.ssh/id_rsa_for_jet.pub maki@maki-jetson:~/.ssh/authorized_keys
(
maki
とmaki-jetson
は適宜あなたのユーザー名とJetson NanoのIPアドレスに置き換えてください) -
Jetson Nanoで、コピーした鍵の権限を設定します:
chmod 600 ~/.ssh/authorized_keys
制御用PCの設定
-
制御用PCの
~/.ssh/config
ファイルに以下の設定を追加します:Host maki-jetson HostName maki-jetson User maki IdentityFile "~/.ssh/id_rsa_for_jet"
HostName
はJetson NanoのIPアドレスまたはホスト名User
はJetson Nanoのユーザー名IdentityFile
は先ほど作成した秘密鍵のパス
-
SSH接続をテストします:
ssh maki-jetson
これで、パスワード入力なしでJetson Nanoに安全に接続できるようになりました。
Roomba 980との接続
次に、Roomba 980とJetson Nanoを接続します:
- Roomba 980の清掃ボタン付近にあるMicroUSBポートを探す
- USB-MicroUSBケーブルでRoombaとJetson Nanoを接続
- SSHでJetson Nanoに接続し、端末を開く
Roomba980到着!!!
ちゃんと「MicroUSBポート」を発見!これは勝ったか?? https://t.co/6tqWgeZ0av pic.twitter.com/wbummMAoPq— Maki@Sunwood AI Labs. (@hAru_mAki_ch) July 2, 2024
デバイスの確認と詳細情報の取得
接続後、デバイスが正しく認識されているか確認します:
- 端末で以下のコマンドを実行:
ls -l /dev/ttyACM*
maki@maki-jetson2:~$ ls -l /dev/ttyACM*
crw-rw---- 1 maki maki 166, 0 7月 2 20:48 /dev/ttyACM0
/dev/ttyACM0
のような表示が出れば接続成功です。
- デバイスの詳細情報を取得するには、次のコマンドを使用:
udevadm info -a -n /dev/ttyACM0
looking at parent device '/devices/70090000.xusb/usb1/1-3/1-3.1':
KERNELS=="1-3.1"
SUBSYSTEMS=="usb"
DRIVERS=="usb"
ATTRS{authorized}=="1"
ATTRS{avoid_reset_quirk}=="0"
ATTRS{bConfigurationValue}=="1"
ATTRS{bDeviceClass}=="02"
ATTRS{bDeviceProtocol}=="00"
ATTRS{bDeviceSubClass}=="00"
ATTRS{bMaxPacketSize0}=="64"
ATTRS{bMaxPower}=="100mA"
ATTRS{bNumConfigurations}=="1"
ATTRS{bNumInterfaces}==" 2"
ATTRS{bcdDevice}=="0200"
ATTRS{bmAttributes}=="c0"
ATTRS{busnum}=="1"
ATTRS{configuration}==""
ATTRS{devnum}=="10"
ATTRS{devpath}=="3.1"
ATTRS{idProduct}=="0002"
ATTRS{idVendor}=="27a6"
ATTRS{ltm_capable}=="no"
ATTRS{manufacturer}=="iRobot Corporation"
ATTRS{maxchild}=="0"
ATTRS{product}=="iRobot Roomba"
ATTRS{quirks}=="0x0"
ATTRS{removable}=="unknown"
ATTRS{serial}=="4900574A3533"
ATTRS{speed}=="12"
ATTRS{urbnum}=="124"
ATTRS{version}==" 2.00"
このコマンドは、接続されたRoombaの詳細情報を表示します。主な情報は以下の通りです:
- デバイス:
/dev/ttyACM0
- サブシステム:
tty
- ドライバ:
cdc_acm
- 製造元:
iRobot Corporation
- 製品:
iRobot Roomba
- シリアル番号:
4900574A3533
- ベンダーID:
27a6
- プロダクトID:
0002
この情報は、デバイスの識別やトラブルシューティングに役立ちます。
権限の設定
Jetson NanoがRoombaと通信できるように、権限を設定する必要があります:
- 端末で以下のコマンドを実行:
sudo chown $USER:$USER /dev/ttyACM0
- 権限が変更されたか確認:
ls -l /dev/ttyACM0
ユーザー名とグループ名が自分のものになっていれば成功です。
Pythonでの操作
Pythonを使ってRoombaを制御します。まず、必要なライブラリをインストールしましょう:
pip3 install pyserial
次に、roomba_control.py
というファイルを作成し、以下の内容を書き込みます:
import serial
import time
# Roombaとの接続を開始
ser = serial.Serial('/dev/ttyACM0', 115200)
# Roombaを起動
ser.write(b'\x80') # START command
time.sleep(0.1)
# 安全モードに設定
ser.write(b'\x83') # SAFE mode
time.sleep(0.1)
# コマンドを送信
command = bytes([0x8B, 0xFF, 0x00, 0xFF])
ser.write(command)
time.sleep(1) # 1秒間動作
# 接続を終了
ser.close()
Roomba980をPCから操作できた!
(超シンプルなコマンドです、LEDが消えるだけですが、、、) https://t.co/FGFjNBTDI8 pic.twitter.com/TuOUDQLICt— Maki@Sunwood AI Labs. (@hAru_mAki_ch) July 2, 2024
トラブルシューティング
問題が発生した場合の対処方法:
-
「Permission denied」エラーが出る場合:
- 権限の設定を再確認
sudo chmod 666 /dev/ttyACM0
コマンドを試す
-
Roombaが反応しない場合:
- ケーブルの接続を確認
- Roombaのバッテリー残量を確認
-
デバイスが認識されない場合:
udevadm info -a -n /dev/ttyACM0
コマンドでデバイス情報を確認- USBケーブルや接続ポートを変更してみる
発展的な使い方
基本操作ができるようになったら、次のステップに挑戦してみましょう:
-
センサー情報の取得:Roombaの各種センサーから情報を読み取り、障害物回避などの機能を実装
-
自動掃除プログラム:特定のパターンで動くよう命令を組み合わせ、自動掃除プログラムを作成
-
カメラとの連携:Jetson Nanoにカメラを接続し、画像認識と組み合わせた高度な動作を実現
まとめ
Jetson NanoでRoomba 980を操作する方法について詳しく解説しました。SSH接続の設定により、リモートからの操作も可能になりました。最初は難しく感じるかもしれませんが、一歩ずつ進めていけば必ず成功します!
ロボットを自分でプログラミングして動かすのは、とてもエキサイティングな体験です。ぜひいろいろな動きを試してみてください。失敗を恐れずに、何度もチャレンジすることが大切です。
これからもロボットプログラミングの世界を楽しんでいってくださいね。頑張ってください!
コメント