32bit RISC-V Linuxを作りQEMUで実行する

皆様こんにちは.18のhiraです.
僕はコンピュータ工学をやっているつもりで,最近は作成したプロセッサでLinuxを動かそうとしているらしいです.

そのため対称実験用に正しく動くものが欲しいと思い,作っているプロセッサと同じ32bit RISC-VでLinuxを動かす環境を探していました.そこでプロセッサエミュレータであるQEMUでLinuxを動かしました.

その際,64bit向けはあっても意外に32bit向けの構築方法のまとめは少なかったため,32bit環境でLinuxをソースコードからRISC-V向けにビルドしたり,それをQEMUで実行する流れをまとめました.

やっている内容はほぼリンクのブログ(1)リンクのブログ(2)の丸パクリなのですが,一部変える点があったり,補足したい点があったため記録します.

QEMU上で32bit RISC-V Linuxを動かした際のブート画面
“32bit RISC-V Linuxを作りQEMUで実行する” の続きを読む

RISC-Vにおける仮想->物理アドレス変換のまとめ

皆様こんにちは.18のhiraです.
僕はコンピュータ工学をやっているつもりなのですが,最近アドレス変換に触れ理解に苦しんだため,備忘録的にその挙動を記録します(そのため正確性はありません…).

OSが載っているような複雑なコンピュータでは,Excelやゲーム,音楽ソフトなど複数のアプリを同時に動かすことができます.この時,アプリ同士のアドレスが重ならないようにアドレスをずらす機構があります.

この変換機構は Memory Management Unit (MMU) という機構によって行われます.またこの変換方法も代表的なものがいくつかあり,今回は32bitのRISC-Vが公式に使用するSv32を題材として紹介します.

“RISC-Vにおける仮想->物理アドレス変換のまとめ” の続きを読む

【何人必要?】『三体』の人列コンピュータを設計する!ところが…

明けましておめでとうございます.18のhiraです.
僕はコンピュータ工学をやっているつもりなのですが,近年は1つのプロセッサの性能向上が限界に達しつつあり,代わりにマルチコアだったり,AIや行列計算用の専用プロセッサを組み合わせることが主流となっています.

ところが専用プロセッサは少量他品種であり,そのために複雑な回路を設計することは今まで困難でした.

ここに現れたのがGoogleが後援するOpenMPWプログラムです.これはGoogleColab上でDSLXというVerilog(回路のプログラミング)っぽい言語でコードを書くと,それが実際のカスタムプロセッサに変換され,さらに提携しているファブで製造までされるという企画です!しかも内部表現としてXORなどの論理演算の数や,その演算同士のつながりのグラフが得られます.
(設計にはこちらのOpenMPWチュートリアルを参考にしました)

チュートリアルにあった単純な加算回路

となればやりたいことは1つですね.『三体』の人海戦術の手旗信号による人列コンピュータには何人必要か.三体問題専用プロセッサを作って検証してみましょう!

この記事で作製したMATLABファイル,GoogleColabのipynbファイルはリンクのGithubにありますのでご参照ください.

(注: 以下の記事には『三体』のネタバレを含みます)

計算陣形<コンピュータ・フォーメーション>!

“【何人必要?】『三体』の人列コンピュータを設計する!ところが…” の続きを読む

モデル予測制御の数理 +制約の考慮

皆様こんにちは.18のhiraです.
モデル予測制御(MPC)はシステムの数理モデルを持っておき,ある入力 \bf{u} をシステムに与えた時の出力 \bf{y} を予測し,その予測結果が目標とする理想の出力軌道である「参照軌道」に近づくよう入力を最適化する制御です.この時安全上・物理特性などに関する制約を設けることができます.
この手法の数理的基礎と制約がどうからむかを備忘録として書いておきます.
以下の数式はこちらの書籍を参考にしました.
また一部数式がブログの他の文字とかぶって見えにくくなっていますのでご了承ください.

“モデル予測制御の数理 +制約の考慮” の続きを読む

MATLABの非線形モデル予測制御で車の簡単自動運転チュートリアル【100行でOK!】

皆様こんにちは.18のhiraです.

自動車やドローン,ロケットや工場プラントなど様々な分野での応用が期待され,MATLABでも専用パッケージが提供されているのがモデル予測制御(MPC)です.従来は線形モデルが中心でしたが,最近開発が進む非線形のモデルを用いることでより多くのシステムに適用することができます.

今回はそんな非線形MPCを用いて,カッコよく自動車の経路追従をしてみます.

(動画)

この例のMATLABコードはこちらのgithubをご覧ください.
またMATLABによる(線形)モデル予測制御の作成とチューニング,シミュレーション,Cコード化の最初の一歩となるようなチュートリアルは,ぜひ過去の記事をご覧ください.

“MATLABの非線形モデル予測制御で車の簡単自動運転チュートリアル【100行でOK!】” の続きを読む

MATLABで自作ロボットのモデル予測制御 & Cコード生成/ビルドチュートリアル

皆様こんにちは.18のhiraです.

近年,自動運転やロケットやドローン,戦闘機でも「モデル予測制御(MPC)」なる制御方法が注目されているようです.
なんでもこのMPCを使うと運動モデルさえあれば誰でも簡単に(注 “誰でも”等の範囲は要検討)複雑なロボットを好きな軌道で動かすことができるようです!

この魅力的なMPCは,なんとMATLABの「Model Predictive Control Toolbox」を使うことでほぼGUI上で手軽に作ることができます.しかも作ったコードはC/C++に変換でき,それをビルドすればRaspberry Piといったマイコン上で動かすこともできます.

今回は簡単なバネ台車モデルを使い,MATLAB上でのMPCモデル及び運動軌道の作成,さらにC/C++のコードの生成とビルド方法を紹介します.

ヘンタイ技術のカタマリSpaceXの着陸ロケットもMPCで動くとか.イーロン・マスクも目じゃねえぜ!

“MATLABで自作ロボットのモデル予測制御 & Cコード生成/ビルドチュートリアル” の続きを読む

[HCD2021] ロボット技術研究会 活動報告

こんにちは。本日はホームカミングデイ2021です!といってもコロナのせいでオンラインでの参加となります。またこの一年間新歓や工大祭といった催しが制限されており、実際に見て・触って・動かしてもらう展示会ができませんでした。

そこで本記事ではこの一年の振り返りもかねてロボット技術研究会の活動報告&作品紹介を行いたいと思います。

まさかの世界一斉オンライン。ロ技研もオンライン対応。

“[HCD2021] ロボット技術研究会 活動報告” の続きを読む

Vivado & Vitis でC言語高位合成 Hello World チュートリアル

皆様こんにちは。18のhiraです。ソナー作ったら面白そうとか言っている人ですが、そんなソナーに必要なのは「正確な時刻で処理をする」ことです。ただ、一般のCPUで普通のプログラムを動かすと、時間指定したつもりでも処理に数msのズレが生じてしまうこともあります。正確に数百kHzでサンプリングするようなソナーには不向きです。

それを解決する(と勝手に思っている)のがFPGAです。FPGAは中の回路の配線を、使用者が好き勝手につなぎ直すようなことができる特殊なデバイスです。回路を最適化することで使用者が指定した通りに動作でき、さらに大規模並列回路にすることもできます。大量・高速のデータ処理を必要とするAI学習やデータセンターにも採用されています。
しかしそれにはHDLという、レジスタ叩きやビット操作を書き連ねる、長ったらしいプログラムで書かねばならないことが大きな壁でした。

今回使用するFPGAボード「Arty Z7」

そこでFPGAをもっと活かすため、C言語プログラムをHDLに変換して開発を加速させる「高位合成」という技術が近年注目されています。今回はそんなC言語プログラムの高位合成を「Vivado」、「Vitis」という専用ツールを使って初歩の初歩を体験していきます。

“Vivado & Vitis でC言語高位合成 Hello World チュートリアル” の続きを読む

フェイズドアレイソナーを作りたい ~ MUSIC法 ~

 

こんにちは.18のhiraです.

僕は水中ロボットを製作するアクア研で活動しています.そんな水中探査では観測により地形図の作製をすること(マッピング)が目標だったりするのですが,水中では電波が急速に減衰するためレーザー測量を使うことはできません.そのため超音波ソナーを使います.しかしこの音波というものは指向性に乏しく,あらゆる方向の反射波が重なってしまいます.そこで,今回はその反射波を数理的に解析し高度なマッピングを行うソナーの信号処理について書いていきます.

天下(海中?)のJAMSTECのが測海して作製した海底地図.こんなマップを作ってみたい

“フェイズドアレイソナーを作りたい ~ MUSIC法 ~” の続きを読む