RaspberryPi pico wでmicro-ROSを動かす(Bluetooth編 その2)

前回までのあらすじ

RaspberryPi pico w側ソフトの通信部をカスタムとしてBluetoothシリアルで実装した

今回のテーマ

PC側で動作するエージェントの準備を行う
エージェントはWSL上で動作するが、ホストOS(Windows側)で既に構築されたシリアルプロファイルだけをWSLにアクセスさせる方法はないため、WSL用にBluetoothアダプタをもう一つ用意する
さらにデフォルトではBluetoothアダプタが有効になっていないため、カーネルの再構築が必要になる

USBIPD-WINプロジェクトをインストール

Windowsパッケージマネージャ(winget)を使ってインストールできる

winget install --interactive --exact dorssel.usbipd-win

USBIPツールとハードウェアデータベースをインストールする

sudo apt install linux-tools-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/*-generic/usbip 20

カーネルの再構築

以下のサイトを参考にした

ビルドツールのインストール

sudo apt install build-essential flex bison libssl-dev libelf-dev
sudo apt install libncurses-dev bc dwarves

現在のカーネルのバージョンを調べる

この5.15.133.1が重要な数字

カーネルソースを入手する

めちゃくちゃ時間かかるのでひたすら待つ
該当のバージョンにブランチ移動5.15.133.1は先ほどのunameコマンドで得られた数字
デフォルトのコンフィグレーションをカレントにコピー
メニューコンフィグレーションを起動
Networking support > RF switch subsystem supportの設定
Networking support > Bluetooth subsystem supportの設定
その下のBluetooth device driversの設定
Device Drivers > HID supportの設定


ESCキーを押しまくって終了画面に。
もちろん<Yes>を選択

いよいよビルド・・・

sudo make -j$(nproc)
sudo make modules_install
sudo make install -j 16
このフォルダができていれば成功
カーネルをWindows側にコピー
私はCドライブのルートにしました
エクスプローラで日付等を確認。コピーできてるな

.wslconfigの編集

Windows側のHOMEフォルダ上に.wslconfigというファイルを作成する
PowerShellでWSLを終了
再びWSLを起動し、バージョンを確認
ビルドされた日時なら成功

Bluezをインストール

sudo apt install bluez*

WSL用にBluetoothアダプタを引き渡す準備

BUSID6-2がWSLへ引き渡すBluetoothアダプタ
5-3はキーボードやマウスなど通常使用しているアダプタ
attachオプションを使ってwsl側へアタッチしておく
ControllerMode を BR/EDRモードにするデフォルトはdualらしい

Bluetoothサービスの開始

Bluetoothサービスの起動
赤いの、黄色いのは気にしない
Raspberry Pi pico wにソフトを書き込み、起動させておく
バッファローのBluetoothアダプタがWSLから見えている
PicoW Serialというデバイスが見えたのでペアリング
trustまでやっておく
一旦wslを終了する

rfcommを有効にする

sudo modprobe rfcomm
rfcommコマンドでペアリングしたデバイスをrfcomm0にバインドすると・・・
/dev/rfcomm0というデバイスファイルが生成されている。
これがBluetoothシリアルのアクセス先

Dockerでmicro-rosエージェント(シリアルモード)を起動する
デバイスは/dev/rfcomm0になる

docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --net=host microros/micro-ros-agent:rolling serial --dev /dev/rfcomm0 -v6
Raspberry Pi pico w から0x10ずつ加算された値が定期的に送信されている。

この記事が気に入ったらサポートをしてみませんか?