2022年12月27日火曜日

OrangePi5のOSをSSDにインストールする

3日連続連投!新記録!(笑)
それぐらいOrangePi5は魅力的ということで!^^;

さくっと本題。
まず、大前提としてnvmeのSSDであること!(SATAは保証しません、もしかしたらできるかも)
私はSK hynixの128GBの2230のpcie3x4を買いました。
あと、ブートローダーはSDに入るため、SSDにインストールしてもSDカードは必要である!!
  1. まず、普通にSDカードでブートして起動
  2. nvmeのSSDをフォーマットしてパーティションを認識させておく(ext4推奨)
  3. ターミナルを開き、
    sudo orangepi-config
  4. System→Install→Boot from SD - system on SATA, USB or NVMe→nvmeのデバイスを選択
  5. SDのイメージをSSDにコピーし始めるので終わるまで瞑想する
  6. 終わったら、再起動する
  7. 再起動すると、起動に失敗するので、rootのパスワードを入力(デフォはorangepi)し、/media/mmcbootをマウントし、exitするとデスクトップ環境が復活する
    mount /dev/disk/by-uuid/opi_bootのUUID /media/mmcboot
    exit
  8. デスクトップ環境でターミナルを開いて、/etc/fstabをスーパーユーザーで編集する
    1. /media/mmcbootの行のtypeをext4からvfatに変更
    2. /media/mmcbootの行のoptionsにあるcommit=600を削除する
    3. こんな感じ
  9. 保存する
  10. 再起動して、ちゃんと起動に成功したら終了
結構沼が深かった...
SD→SSDへのマイグレーションはすごい簡単にできるから、
お?いけんじゃん(^q^)
と思ったらMountに失敗する仕様とね\(^o^)/
まぁこんな感じでSSD化できればこっちのモンとね

公式サイトとかに手順が一切ないのは玄人志向だなと思いました^^;
SDとSSDでは速度も耐久性もレベチなので、SSD化できれはホビーの枠すら超えれると思います。
可能性無限大OrangePI5...

今度はNPUも使っていきたいし、
あとは、ORB-SLAMとかをステレオカメラ(ホントは3Dカメラがいいけど高価)でやれたらいいなぁ
そいえば、地味に手こずったMozcのインストール手順も記事のネタになりそうだ(・∀・)ニヤニヤ

今日はこんなところで、
ではでは。

2022年12月26日月曜日

OrangePi5の公式xfceイメージにビデオドライバーをあてる

今日はブラック★ロックシューターの誕生日らしいですよ
実はPSP版のゲームも、2012年版のアニメも、2022年版のアニメも、
昔、ニコニコ動画のアプリにあったぷちっと・ろっくしゅーたーというゲームも
ソシャゲもやってるのです
一応ファンなのかな?

さて、珍しく連投です
表題のやつ、さくっと行きます
ここを参考にしました
↑実はOrangePiのフォーラムではなく、同じくRK3588を積んだSBCのフォーラムをパクったらいけました

確認方法
glxinfo -B
↑こいつのDriverがllvmpipeのときはソフトウェアレンダリングです。
おさかなさんを見るとガクガクです...
  1. sudo apt update
  2. mali_csffw.binをダウンロードし、/lib/firmware に移動させておく
  3. sudo add-apt-repository ppa:liujianfeng1994/panfork-mesa
  4. sudo apt update ; sudo apt upgrade
以上!簡単だね!
glxinfo -B
↑こいつのDriverがMaliになってたらOK

おさかなさんを見るとヌルヌルになってるず!!
これでGPUもちゃんと使えたら怖いものなしですね!
OrangePi5つおスギィ...
まだ、RvizとかGazeboでの使い勝手を試してないのではやくやってみな
ちなみに、Rocker経由でGazeboしたのですが、Rocker上ではアクセラレータ効かなかったです...
↑やり方悪い説あり

ネイティブ汚したくないんだけどなぁ...(´Д`)ハァ…
ではでは。

2022年12月25日日曜日

OrangePi5にKVMでWindows11 (aarch64版)を入れて、GeekBench5でベンチマークしてみる

メリー㍆㌋㌉㌏㌉㌸㌾㌋㌞㌹㌅みなさま。
せいなる夜にひとり寂しく久々にブログ更新します_(:3」∠)_

さて、今月半ばにコスパの良いおもちゃを入手しました。 そう、OrangePi5です。
アリエクで8GBRAM版を1.2万円(送料込み)で買いました。
実はこいつ、半年ぐらい前から気になっていたガジェットで、
どうやらRK3588というSoCがクッソ優秀とか。
こいつを積んだSBCは実は他にもいくつか出てたのですが、
最低2万からでなかなか手を出す気になれず...

いやーまじでこれが1万ちょいはうれしい!!
表題の件をお話する前に私の環境でのうちの子のGeekBench5の結果をお伝えします。
スマホのカメラ越しでごめんなさいm(_ _)m 2504点です!!
これがどれぐらいのスコアかと言うと...
なんとスナドラ855相当なのですね!
つまり、Win11も動くぐらいの素性をもっているのです...オソロシヤ((((;゚Д゚))))ガクブル
(twitterで888相当の性能を期待っていってましたけど、実際測ってみたらこんなもんでしたわ)
というわけで本題。いってみよう!
  1. SDカードにデスクトップ版のUbuntu22.04イメージを焼く
  2. 公式が配布してるやつです(GUIがxfceのやつ)
  3. 上のやつをさして、起動
  4. ターミナルを開いて、
    docker pull yukimakura/windows_qemu_kvm_aarch64
    をする
  5.   sudo apt update
      sudo apt install python3-pip qemu-utils 
      pip3 install rocker off-your-rocker
    をする
  6. Win11のaarch64版を拾ってくる
  7. vhdxをqcow2に変換する
    qemu-img convert -O qcow2 win11.vhdx win11.qcow2
  8. 任意のフォルダを作って、そこに上で作成したqcow2をいれる
  9. UTMのサイトからゲストマシンのドライバーハッピーセットを拾って任意のフォルダにいれとく
  10. ~/.local/bin/rocker --x11 --oyr-run-arg "-v $(pwd)/任意のディレクトリ:/qcow --privileged -e OPTIONALARGS='-drive file=/qcow/spice-guest-tools-0.164.4.iso,media=cdrom,if=none,id=drivers -device usb-storage,drive=drivers' -e WINQCOWPATH=/qcow/win11.qcow2 " yukimakura/windows_qemu_kvm_aarch64
    ※今回は環境変数を通さずにrockerつかってますが、ちゃんとやりたい場合は好きに通してください
  11. これでWin11が起動するはずなので、あとはセットアップを進める
  12. このサイトを参考にオフラインセットアップする
  13. セットアップが終わったら、Administrator権限でターミナルを開いて、そこ経由でデバイスマネージャーをひらく(mmc devmgmt.msc)
  14. デバイスマネージャーからEthernetのドライバだけを当てる
    ※ディスクにあるExeで当てるとWin11が死ぬので注意
  15. GeekBenchのサイトからGeekBenchを拾ってベンチマーク!!
当方の環境ではこんな感じでした
VM環境でもこれだけ出るのすごすぎ...第五世代のラップトップi5と張り合える😲

ちなみに、yukimakura/windows_qemu_kvm_aarch64の構成は以下のようになっております
ENV周りは渡している引数でお察し下さい(いつもの)

いかがでしたか?
↑このワードつくサイトがあんまり参考にならないらしい(ついったーで見た)
まぁ参考にしないでください。備忘録なので(投げやり
↑備忘録というワードがあるサイトが参考になるらしい(ついったーで見た)

そもそもニッチすぎではありますが、
ラズパイがクッソ高騰してる今現在、OrangePi5はめっっちゃくちゃ魅力的です!!!!
すごいたのちい💖
NPUもついてるので推論とかやってみたいし、M.2PCIe端子もあるからSSDブートもしたい
あと、デフォだとGPUにドライバあたってなくってllvmpipe仕様だからGPU支援も有効化したい

...実はGPUのドライバもなんとか当てれたし、SSDブートもできてるですけどね
気が向いたら後日記事にします。

あと初ArmWin11だったのですが、amd64エミュレーションも試してみました
ギャルゲーぐらいなら全然余裕で動いちゃいましたわ...
すげぇ

では、よいクリスマスを。

2021年1月4日月曜日

JetsonNanoでPWM生成(C++にて)

あけましておめでとうございます🎉 
昨年はとんでもない年でしたね...(今年も落ち着いていないが...
 皆さんもしっかり免疫つけてウィルスに負けない体づくりをしていきましょうね!

 さて、今年お初(ほとんど更新してない)はJetsonNanoでPWM生成です。
 肝な部分としてはC++でやっている点でしょうか? 
Pythonは多いですけど、C++の記事は埋もれてるのかわかりませんが、 
日本語のブログがなかったので書いていこうかと思います。  

  1. まず、Jetsonのハードウェアな設定部分を変えないと行けないので変更します。
     「jetson pinmux pwm io tools」とかでググってください。(投げやり
    そのツール内で32、33ピンの設定を変えておいてください。(PWMにね

  2. いよいよコードの部分を触ります。
    JetsonGPIOをpull&make&installしてください。
    (README.MDに書いてあるヨ

  3. samples/simple_pwm.cppを編集して任意のPWMを生成してみます。
  4. 69行目にある
    
      GPIO::PWM p(output_pin, 50);
      
    第一引数は出力ピン(JetsonNanoは32,33番ピンのみ対応)、
    第二引数は周期(Hz)です。

    次に、70行目の
    
      p.start(50);
      
    引数に出力するduty比を0~100で入力。
    もとのソースだとdoubleになってるから0~1.0かとおもたけど違うみたい?(オシロで確認)

  5. これでコンパイル
    g++ simple_pwm.cpp -o simple_pwm -lJetsonGPIO


  6. 実行して出力されたかを確認してね★(オシロスコープやらテスターやらLEDやら
READMEによると権限周りもさわらないといけないってあったけど、 私は触らなくても行けました??(念の為やっておいたほうがいいと思います。)
まぁ、記事が少ないってことはニッチってことですかね?
私がこれをやろうと思い立った経緯としまして、
ROSのHardwareInterfaceを作ろうとして、
Pythonで媒介するノードを立てるのもなぁ...と思って
ダメ元で調べたらライブラリがあったので使ってみよー!となったわけです。
ニッチな皆様のお力に慣れたら幸いです。(笑)

PWMはマイコンで出せって?
それは言わないお約束♥
ちなみにロータリーエンコーダ付きのモーター使ってるのでstm32もついてますヽ(・ω・)/ズコー

ROS2やらなきゃ...(万年言ってる
ros2_controllerの正式版&gazeboが対応したらやるから(震え声

2020年5月11日月曜日

stm32(NUCLEO-F767ZI)でbeebotteを使ってMQTT通信する!

2020年お初の記事です。えぇ。
このブログはゆるくやるのがモットーなので(という言い訳

ということでまたまたstm32ネタでございます。
最近スマートホーム化を推進しておりまして、
既製品を買うのもいいのですが、今回は自作してみようかなといろいろ調べていました。
基本的にはIFTTTと連携するのが楽ちんそうだったのでラズパイでやろうと思ったのですが...

ラズパイ...壊れてる...OTZ

そんなわけで代替を考えていた所、そーえばstm32にはEthernet端子がついていたなと。
しかも調べてるうちにIPv6プラスでネット接続してる場合はポート開放が出来るルータが限られていて、
うちのTP-LINK A10ちゃんはポート開放に対応してないということが判明orz

そこでMQTT!!!٩(๑´3`๑)۶

毎度長い長い前置きごめんなさいね( ・´ー・`)どや

    環境

  • Cube MX ver.5.6.1
  • Atollic TrueSTUDIO® for STM32, Built on Eclipse Neon.1a. Version: 9.3.0 
  • NUCLEO-F767ZI

私のgithubのレポジトリをご参考ください。

大雑把に流れをお伝えすると
  • まずCubeMXのMiddlewareの欄にあるLWIPとFREERTOSを有効化
  • SystemCore欄にあるSYSのDebugをSerial Wireにし、Timebase SourceをTIM1あたりにしておく(ここは適当に
  • んで、GENERATE CODE!
  • 次に生成されたソースをIDEで開く
  • LWIPのdoxygenサイトに書いてある様にmain.cに追加していく
  • example_do_connect内のmqtt_client_connect()関数にbeebotteのIPアドレスを与える
  • example_do_connect内のci.client_id付近に ci.client_user = {beebotteのトークン名} を追加する
  • それぞれpublish,subscribe関数にトピック名を設定する{(beebotteの例)"test/res"}
  • (DHCPを設定している人向け)lwip.cに移動し、dhcp_start(&gnetif);の下部にある/* USER CODE BEGIN 3 */内に以下のコードを追加する。
  int mscnt =0;
  while (gnetif.ip_addr.addr==0) {
		   sys_msleep(DHCP_FINE_TIMER_MSECS);
		   dhcp_fine_tmr();
		   mscnt += DHCP_FINE_TIMER_MSECS;
		   if (mscnt >= DHCP_COARSE_TIMER_SECS*1000) {
				  dhcp_coarse_tmr();
				  mscnt = 0;
		   }
	}
  1. 有線LANケーブルをNucleoにぶっ刺して、Nucleoプログラムを書き込む
こんな感じです。
9、10番目でやってることはDHCPからIPアドレスやルート情報を取得するまで待機させています。(参考: AVR lwIP Example: How to enable a DHCP client on EVK1100)
これやらないと接続を確立できません(言われてみれば当たり前ですが、その仕様に気づかず頭を抱えました(笑)
あと私のgithubのレポジトリにあるようにdnsを用いてみるのも楽でいいと思います。


beebotteとIFTTTとGoogle Assistantを連携させればこの様にアクションを起こすことが出来ます。
 活用の幅が広がりますねぇ...フムフム
 ぜひ皆さんもお試しくださいませ。
実はDHCP問題がわからなかった頃に一度Micropythonに逃げてみたのですが、
 Micropythonで同じことをすると1分ぐらいでエラー吐いて落ちまくったり、
書き込みにくかったりと 沼沼で、諦めてC言語にしていろいろ悩み直して解決した次第でした。
 それでも定期的に応答しなくなるようなので、10分に1回ぐらいブローカーに再接続する処理を入れるといいのかと思います。  
気が向いたらMicropythonの方もブログネタにしようかと思います。 
ラズパイではなくマイコンボードでこのようなことをする最大のメリットは低消費電力である点かなと思います。 
 
そしてこの手の開発はESP32が情報量が多いし、安くていいと思います(超高速手のひら返し

2019年10月29日火曜日

playstation4 cameraをvisual studioを使わずにwindows10で使う(Python使用)

PS4カメラでSLAMとかを動かしたいと思ってメルカリで1000円でポチったので今回はそれをなるべく楽ちんにwindows10で使ってみた(備忘録)的な記事でございます。


まず、そもそもパソコンに物理的にコネクション出来るようにしなければいけません。
Aliとかebayで変換コネクタを買えるのですが、中古で1000円程度で買えるカメラなので壊しても許されるかと思って私はケーブルの端子をUSB3.0に付け替えました。

PS4カメラでは新版(CUH-ZEY2)と旧版(CUH-ZEY1)があるのですが、間違いなく動かしたい方は旧版をおすすめします。ただ、新版でも動くかもしれないです。

あと、USB3.0必須です。
USBコントローラによっては動作できないものもあるようです。(古い物では動かないものがあるらしい)

では、実際の作業をダラダラ書いていきます。
というか、コネクタの付け替えとドライバ周りについては
こちらのサイトを参考にさせていただきました。

コネクタの付け替えは他のケーブルとくっつけてる方も多かったですが、
初め、その方法でやった時コネクションロストがたまに起きたので、
コネクタで根本から配線することをおすすめしたいです。
(どちらにしろ絶縁処理はしっかりとね)

そんな感じで秋月電子で買ってきたコネクタをこんな感じでハンダ付けして…



次はドライバ周りですけど、Zdiagを開いて、
Driverをlibusb-winにして、インストールしてください。



次が参考にさせていただいた記事と違います。
まず、windowsにpythonをインストールしてください。(Windows storeのpython3でも可)
そのあとPowerShellを開いて、

pip install --pre pyusb

と入力してください。


その後、こちらをダウンロードして、解凍してください。

解凍したフォルダーのscriptディレクトリにPowerShellで移動して、

python ps4eye_init.py

を実行してください。


そうすると、PS4カメラにファームウェアがインストールされて
UVCカメラとして認識されるはずです。


お疲れ様でした!!



お気づきかと思われますが、この手法はmacでもlinux系でもpythonとpyusbがインストールできれば使えるはずです。

1000円ちょっとでハイスペックステレオカメラで遊べれるのはとっても魅力的!!(´艸`)
みなさんも挑戦されてはいかがですか?




2019年10月6日日曜日

stm32(NUCLEO-F767ZI)でUDP通信する!

stm32シリーズ第二弾ということで今回はUDP通信です。

nucleoボードの中にはEthernet端子がついていているものもあり、
お値段もピンきりではありますが、NUCLEO-F767ZIは3000円を切って購入できます。
そのくせメモリ豊富で動作周波数もなかなか高いのでとても夢広がる(?)マイコンボードです。

...ということでRTOSとLWIPもりもりで今回はお送りします!(笑)

まず毎度恒例動作環境です。

  • Windows 10 (ver 1903 build 18362.356)
  • STM32CubeMX (ver 5.3.0)
  • Atollic TrueSTUDIO® for STM32, Built on Eclipse Neon.1a.(ver 9.3.0 build id 20190212-0734)
  • 使用ボード: NUCLEO-F767ZI

まずはcubeMXでクロック周りやRTOSやLWIPなどを設定してください。
STM32でEthernetするっ!様のサイトがとっても参考になりました!
この場を借りて感謝申し上げますm(_ _)m

お次はソースコードです。
私の拙いコード(githubに繋がります)を用いてください。

このソースの肝はudp_easy_io.hとudp_easy_io.cです。
こいつらはLWIPの処理を丸めた関数群です。基本的には

  • 1.UDP_EASY_IO_init()関数でポート設定とアドレス設定をする。(初期化)
  • 2.自分のさせたい処理用(main関数に書きたい処理)に新しくRTOSでタスクを始動させる
  • 3.そのタスクの中でUDP_EASY_IO_write()関数を使って送信するなり、UDP_EASY_IO_read_char_prt()関数を使って受信するなりごにょごにょする。
といった感じで使います。
詳しくは私の拙いコードのなかにあるmain.cをご参照くださいませ。

あとはビルドして書き込んでPCとLANケーブル直挿ししてマイコン側の準備は完了!(ざっくり

今度はIPアドレス設定です。
cubeMXでDHCPに設定してarpコマンドからIPアドレス特定するとかでもいいのですが、
めんどくさい(おい)ので、今回の例では固定IPにしています。

まず、タスクバーのネットワークアイコンを右クリックして、出てきたメニューのなかにある「ネットワークとインターネットの設定を開く」をクリック

つぎに、「アダプターのオプションを変更する」をクリック
つぎに、マイコンと接続しているアダプタ以外(ここ大事)を右クリックで一覧にあるプロパティを選択

あとはネット共有をマイコンと接続してるアダプタに指定してあげるとな。

これでwindows側の設定は完了です。
コマンドプロンプトを開いてcubemxで設定したIPアドレスに向けてpingを送ってみて応答確認してください。
応答が...あるッ!!
こんどはUDPのパケットを送るツールの準備です。
Pythonとかでスクリプト書くなり好きにしてください(なげやり
私はUDP/IPテストツールを使わせていただきました。
こちらもこの場を借りて感謝申し上げますm(_ _)m

んで、メッセージを受信したり送ったりしてみます。
なお、今回の私の拙いコードではUDP通信で受信した文字列をUART経由で出力される仕様になっています。ボーレートは115200です。

んまぁこんな感じでごにょごにょすると↓の動画のようになってくれるはず??

お疲れさまでした!!



イーサネット通信は通信コストはいくらか掛かりますが、無線LAN子機を用いたりすることで容易に無線化できたり、IoTできたりするわけです。個人的に美味しい要素は

  • データをやりとりする上でデータの区切りがはっきりしている
  • 差動線通信であったりアダプタがぬけにくいため、不安要素がいくらか拭える
といったところでしょうかね。
あと今回はLWIPもですが、RTOSもstm32ではお初のテーマでした。
いろいろ調べていくうちにCMSIS2ってFreeRTOSをラッピングしてるだけだと知り、
そのままFreeRTOSのAPIを叩いちゃいました(笑)
だって情報量がFreeRTOSのほうが多いもん...(切実

こんな感じで夢が広がるマイコンボード、皆さんどうでしょう?(〆が雑