本記事について
本記事は、【SPIKE-RTでロボコンに出よう!!】シリーズ #1 開発環境を作ろう の 『Step 3. 転送方法の構築』を補足する記事です。
2023年12月6日、usbipd-winの新しいバージョン「4.0.0」がリリースされました。
これに伴い、コマンドの変更等が発生したため、本記事にて改めて説明することとします。
USBIPD-WIN プロジェクトをインストールする
このソフトは、Windowsに接続されたUSBデバイスを、WSLにも認識させるために必要なツールです。
デフォルトでは、PCに接続されたUSBデバイスは、自動的にはWSLに接続されません。
これを、USB/IPという仕組みを用いて、WSLにも接続できるように設定を行います。
まず、下記のリンクからインストーラをダウンロードします。
ダウンロードするのはusbipd-win_4.0.0.msi
です。
ダウンロード出来たら、インストーラを実行します。
すると以下のような画面が表示されるので、「Install」ボタンを押しましょう。
インストールが完了すると以下のような画面に変わるので、「Close」ボタンを押してウィンドウを閉じましょう。
バージョンの確認
インストールが完了したら、Powershellにてusbipd
と入力して、バージョンを確認しましょう。
以下のように表示されればOKです。
> usbipd
usbipd-win 4.0.0
Description:
Shares locally connected USB devices to other machines, including Hyper-V guests and WSL 2.
Usage:
usbipd [command] [options]
Options:
--version Show version information
-?, -h, --help Show help and usage information
Commands:
attach Attach a USB device to a client
bind Bind device
detach Detach a USB device from a client
license Display license information
list List USB devices
server Run the server on the console
state Output state in JSON
unbind Unbind device
HUBブロックの接続
では、PCにSPIKE Prime HUBブロックを接続します。
この時、特殊な方法でPCと接続する必要があるため、その手順を説明します。
まず、HUBブロックの上面にある、Bluetoothアイコンが印字された丸いボタンを押します。
このボタンを押し続けた状態で、USBケーブルによりHUBブロックをPCと接続します。
接続した直後、Bluetoothボタンの淵が紫色に点灯します。
この状態のままさらに5秒程押し続けると、消灯⇒赤⇒緑⇒青の順に光り始めます。
これで、HUBブロックを「DFUモード」でPCと接続することができました。
DFUモードはファームウェア(元となるソフト、OSのようなもの)を書き換えるためのモードです。
SPIKE-RTは現時点でダイナミックローディング(ファームウェア内に複数のプログラムを入れる方式)には対応しておらず、スタンドアローン(1ファームウェアにつき1プログラム方式)となるので、毎度OSごと書き換えているようなイメージです。
USBデバイスの確認
HUBブロックをDFUモードで接続出来たら、WSLを有効化したときと同じ手順でPowershellを管理者権限で起動し、WSLに接続可能なUSBデバイスを確認します。
> usbipd list
実行すると、以下のように表示されます。
(USBの接続状況によって異なるため、以下は一例に過ぎません。)
> usbipd list
BUSID VID:PID DEVICE STATE
2-1 0694:0008 LEGO Technic Large Hub in DFU Mode Not shared
2-2 0781:5571 USB 大容量記憶装置 Not shared
2-5 27c6:538d Goodix fingerprint Not shared
2-6 0c45:671b Integrated Webcam Not shared
2-10 0cf3:e007 Qualcomm QCA61x4A Bluetooth Not shared
ここで、LEGO Technic Large Hub in DFU Mode
がHUBブロックを指しているので、これの一番左のBUSID
を控えておきます。
今回の場合、2-1
となります。
Prime HubをWSL2にバインド(共有)
以下のコマンドにより、Windows側からWSL側に、USBデバイスをバインド(共有)します。
--busid
の後は、先ほど控えたBUSID
を指定します。
> usbipd bind --busid 2-1
このコマンドを入力後、もう一度usbipd list
を入力すると、一番右側のSTATE
の部分がshared
に代わります。
> usbipd list
BUSID VID:PID DEVICE STATE
2-1 0694:0008 LEGO Technic Large Hub in DFU Mode shared
2-2 0781:5571 USB 大容量記憶装置 Not shared
2-5 27c6:538d Goodix fingerprint Not shared
2-6 0c45:671b Integrated Webcam Not shared
2-10 0cf3:e007 Qualcomm QCA61x4A Bluetooth Not shared
Prime HubをWSL2にアタッチ(接続)
以下のコマンドにより、Windows側からWSL側に、USBデバイスをアタッチ(接続)します。
--busid
の後は、先ほど控えたBUSID
を指定します。
> usbipd attach --wsl --busid 2-1
このコマンドにより、HUBブロックをWSLに接続することが出来るのですが、このコマンドは一回限りのアタッチになります。
これを、USBを外して再度接続しなおしても、自動的にWSLにアタッチされるようにするには、以下のように--auto-attach
オプションを付加します。
> usbipd attach --wsl --busid 2-1 --auto-attach
これにより、ロボットを動かすために一時的にUSBを取り外しても、USBを接続しなおせば自動的にWSLにアタッチされます。
接続解除
接続を解除する場合は以下のコマンドで解除することができます。
> usbipd detach --wsl --busid 2-1
> usbipd unbind --wsl --busid 2-1
これにより、接続解除⇒共有解除を行えます。
補足終了
以上がアップデートに伴う補足となります。
以降は、『PyUSBの導入』の部分から、環境構築を再開してください。
参考記事