目次

はじめに
まえがき
艮電算術研究所 – ラスピコロボット開発プロジェクトについて
この本の目標と、目標にしないこと
注意書き
サポートページ
検証環境
第1章 環境構築とパーツの入手
1.1 Rustのインストール
1.2 Rustのアップデートとターゲットの追加
1.3 ビルドツールのインストール
1.4 電子パーツのお買い物リスト
第2章 Rust x Raspberry Pi Picoに慣れる
2.1 Rust x Raspberry Pi Pico開発のテンプレート
2.2 Raspberry Pi Picoの内蔵LEDを点滅させる(Lチカ)
2.3 Lチカのコード解説
第3章 シリアル通信
3.1 シリアル通信でHello, world!
3.2 数値の出力
第4章 BNO055から姿勢情報を読み取る
4.1 BNO055の概要
4.2 回路の作成
4.3 サンプルコードの実行
4.4 基本コードの実装
4.5 較正情報の保存(フラッシュメモリへのデータ書き込み)
付録A インストールに失敗 → Rustのバージョンを落としてみる
A.1 現在のバージョン確認
A.2 指定バージョンのRustを追加
A.3 指定バージョンが追加されたことを確認
A.4 defaultの変更
A.5 変更内容の確認
付録B 正確に1秒周期でLチカする
付録C シリアル通信の開始
C.1 elf2uf2-rsの処理
C.2 elf2uf2-rsに頼らずにシリアル通信を読み取る
C.3 oscillo_serialの実装
付録D 出力情報のグラフ表示
D.1 コードの書き換え
付録E BNO055の動作モード
E.1 CONFIG MODE
E.2 非Fusion Mode
E.3 Fusion Mode
付録F センサ情報による姿勢角の計算原理
F.1 加速度センサ
F.2 ジャイロセンサ
F.3 地磁気センサ
F.4 センサフュージョンによる姿勢角推定
付録G BNO055におけるオイラー角の取り扱い
G.1 著者・BNO055・各クレートにおける扱いの違い
G.2 その他BNO055のオイラー角が抱える問題点
付録H 参考文献リスト
H.1 Rustの基本
H.2 Cargo.tomlの記法
H.3 Rust用語集
H.4 Git
H.5 Rustによる組込みプログラミング
H.6 RustによるRaspberry Pi Picoプログラミング(ラスピコ)
H.7 BNO055
H.8 センサによる姿勢推定の原理
H.9 BNO055におけるオイラー角
H.10 クオータニオン
H.11 Raspberry Pi Picoのフラッシュ読み書き

はじめに

まえがき

 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

第1章 環境構築とパーツの入手

1.1 Rustのインストール

 まずはRustがなくては話が始まりません。以下の公式サイト等を参考に、Rustをインストールしてください。


 【外部リンク】Rustをインストール

 https://www.rust-lang.org/ja/tools/install


1.2 Rustのアップデートとターゲットの追加

 既知のバグを避けるため、Rustを最新の状態にします。また、Raspberry Pi Picoでの開発を可能にするために、開発ターゲットとしてthumbv6m-none-eabiを追加します。コマンドプロンプトを開き、以下のコマンドを実行してください。

リスト1.1: アップデートとターゲット追加:shell

C:\hogehoge>rustup self update
  C:\hogehoge>rustup update stable
  C:\hogehoge>rustup target add thumbv6m-none-eabi

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

 Rustで記述したプログラムを、Raspberry Pi Picoに書き込めるUF2という形式に変換するためのツールとして、elf2uf2-rsをインストールします。コマンドプロンプトを開き、以下のコマンドを実行してください。

リスト1.2: elf2uf2-rsのインストール:shell

C:\hogehoge>cargo install elf2uf2-rs –locked

 このコマンドの実行に失敗した場合は、付録A「インストールに失敗 → Rustのバージョンを落としてみる」を参照してください。


 以上でソフトウェア側の準備は完了です。

1.4 電子パーツのお買い物リスト

 続いて、ハードウェア側の準備を進めます。この本の中で最も複雑な回路は図4.1なので、これを作れるように電子パーツを買い集めます。以下、はんだ付けの設備等、一般的な電子工作に必要な道具は一通り揃っているものと想定します。

表1.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コネクタがあると便利です。

図1.1: スイッチ式USBコネクタ
試し読みはここまでです。
この続きは、製品版でお楽しみください。