Rust言語は堅牢性・高速性・並列性を誇る言語として、現在、高いパフォーマンスが求められるプログラムの開発のために世界中で使用されています。そして筆者は、Rustは上記の3点に加え、コード資産の管理が非常に優れている点が、今後も世界で重宝されていく理由になると考えています。具体的には、Rustのライブラリ(クレート)は一括してcrates.ioで管理され、バージョン情報も厳密に保存されます。従来のプログラミング言語環境では、せっかく作ったライブラリが行方不明になることは日常茶飯事で、コードを人類の遺産として残すのは困難なことでした。しかしRustの登場によりこの問題は解決され、今日書いたコードが明日以降にも活用されていくことが保証されるようになりました。これが、近年のソフトウェア開発環境における大きな変化です。一方、ハードウェア開発環境にも嬉しい進歩がありました。英国のRaspberry Pi財団設計のRP2040チップを搭載した、Raspberry Pi Picoボードの発売です。数百円で買えるこの小さなマイコンボードの中には、GPIO(01入出力)・ADC(アナログ入出力)・SPI・I2C・UARTという基本的な機能の他、Programmable Input/Output(PIO)という、任意の機能をもつ入出力を設計できる機構を備えています。そして安価かつ小型であるということは、個人開発の規模でも多くの設計や実験を行い、高度な機能を持ったメカを作ることができるということです。このRaspberry Pi Picoを動かす言語として、Rustコミュニティもrp2040_hal等のクレートを作り、名乗りを上げました。著者はこの、RustとRaspberry Pi Picoの組み合わせによる開発を「ラスピコ(Rust x Pico)」と名付け、Rustの活用や電子工作の入門として推奨しています。Rustによる組み込み開発、ならびに「ラスピコ」の活動は、まだ始まったばかりです。しかし、Rust環境のコード資産管理技術を背景に、これから着実に歴史を積み重ねていくことができます。あなたの「ラスピコ」ライフの端緒として、この本がお役に立てたら幸いです。
艮電算術研究所は著者が所属するサークルならびにWebサイト(https://ushitora.net)であり、電子計算機を用いた高度な計算技術(電算術)を用いて社会の発展に寄与することを目標としています。従来は現象の解析をメインに活動してきたのですが、電算術が社会に影響を与えるには、コンピュータの中だけでなく、三次元の現実の社会と物質的な相互作用を起こすことが必要であると思い至り、それを実現するための方法として、RustとRaspberry Pi Picoを使ったロボット開発プロジェクトを始動しました。本書はその第1回の進捗報告として、ロボットやドローンの姿勢制御に不可欠なIMU(慣性計測ユニット)の取り扱いについて、手法やTIPSを紹介したいと思います。
タイトルの通り、この本ではRaspberry Pi PicoとIMU(慣性計測ユニット)を使用した回路を作成し、Rustでソフトウェアを記述して、姿勢情報を取得・表示することを目指します。したがって、説明の都合で必要とならない限り、本書では以下の内容を詳しくは扱いません。
・Rustによるプログラミングの基本
・Rustによる組込みプログラミングの総論
・Gitの使い方
また、本書ではIMUとしてBNO055を使用します。このモジュールには姿勢推定の方法が標準で備わっているため、以下のような内容も詳しくは扱いません。
・加速度・ジャイロセンサフュージョンによる姿勢推定の計算
・(拡張)カルマンフィルタ
これらの内容については、巻末の付録H「参考文献リスト」にまとめた文献を参照してください。
以上より、本書の目標は以下の3点です。
・RustでRaspberry Pi Picoを動かす
・RustでRaspberry Pi Picoを操作し、情報を表示する
・RustとRaspberry Pi PicoでIMUを適切に設定し、姿勢情報を取得・表示する
これらは2~4章の内容と対応しています。
・本書で紹介した企業名・商品名等は、一般に各企業の商標または登録商標です。本書では、一般的な商標マークの記載を省略しました。
・本書の内容によって利用者に不利益や損害が生じる場合であっても、著者並びに発行元は一切責任を負いません。
・著作権者や発行元の許可なく、本書の内容の一部およびすべてを複製、転載または配布、印刷など、第三者の利用に供することを禁止します。
本書で用いるサンプルコードはすべて、著者のGithubリポジトリ
【外部リンク】rp_bno055サンプルコードリポジトリ
https://github.com/doraneko94/rp_bno055
に公開されていますので、適宜参照してください。
本書で記述するコードの動作確認について、著者は以下の環境で動作確認を行いました。
・OS:Windows 11 Home
・Rust:rustc 1.65.0
まずはRustがなくては話が始まりません。以下の公式サイト等を参考に、Rustをインストールしてください。
【外部リンク】Rustをインストール
https://www.rust-lang.org/ja/tools/install
既知のバグを避けるため、Rustを最新の状態にします。また、Raspberry Pi Picoでの開発を可能にするために、開発ターゲットとしてthumbv6m-none-eabiを追加します。コマンドプロンプトを開き、以下のコマンドを実行してください。
C:\hogehoge>rustup self update
C:\hogehoge>rustup update stable
C:\hogehoge>rustup target add thumbv6m-none-eabi
Rustで記述したプログラムを、Raspberry Pi Picoに書き込めるUF2という形式に変換するためのツールとして、elf2uf2-rsをインストールします。コマンドプロンプトを開き、以下のコマンドを実行してください。
C:\hogehoge>cargo install elf2uf2-rs –locked
このコマンドの実行に失敗した場合は、付録A「インストールに失敗 → Rustのバージョンを落としてみる」を参照してください。
以上でソフトウェア側の準備は完了です。
続いて、ハードウェア側の準備を進めます。この本の中で最も複雑な回路は図4.1なので、これを作れるように電子パーツを買い集めます。以下、はんだ付けの設備等、一般的な電子工作に必要な道具は一通り揃っているものと想定します。
商品名 | 個数 | 大体の価格 |
Raspberry Pi Pico | 1 | 770円 |
BNO055使用 9軸センサーフュージョンモジュールキット | 1 | 2450円 |
カーボン抵抗 3.3kΩ | 2 | 100本で100円 |
ジャンパワイヤ | 6 | 10本200円 |
ブレッドボード | 1 | 400円 |
細ピンヘッダ 1×20 | 2 | 60円 |
USBケーブル(micro B) | 1 | 150円 |
積層セラミックコンデンサ 0.1μF(なくても良い) | 1 | 30円 |
上記のパーツはすべて秋月電子通商で揃えることができます。また、工作を通してUSBケーブルを何度も抜き差しすることになるため、下図のようなON-OFFスイッチ式USBコネクタがあると便利です。