2023年6月9日金曜日

[備忘録]r2rの購読処理コールバックで重い処理を書くと"error TrySendError { kind: Full }"が出る話

この投稿では別に表題の具体的な対策を述べるつもりはありません。
ただ、身に起こったことを共有するだけです。

シチュエーションとしてはカメラノードから30hzぐらいで画像データがpubされているのを
r2rのros2アプリで購読しそのコールバック内でそこそこ重たい処理をブロッキングして実行しているわけです。

どうも、そうすると購読スレッドが止まってしまい(まぁそうだよな)、

  1. error TrySendError { kind: Full }

が出力されていそう。

まぁなんで処理を逃がすか、非同期にするか(で対策できると思っているんだけど、実際はわからん)を工夫せなだめっぽい。

まだ非同期処理周りはRust勉強中はわけでキビシー(´・ω:;.:...
がんばるしかねぇな

2023年6月6日火曜日

[備忘録]r2rをコンテナ環境下のROS2環境にてvscodeでデバック実行する

結論から言うと、あんまりスッキリしない解決策。 (有識者の方、ご意見ください...m(_ _)m)

  1. まず、事前にROS2環境のコンテナを起動し、その中で、ROS環境変数を.bashrcに追記し、apt経由でrust-allパッケージをいれとく
  2. vscodeを開き、コンテナをアタッチする。
  3. Rustのプロジェクトを作り、それをvscodeでOpenしとく
  4. .vscodeディレクトリ下のtasks.jsonとlaunch.jsonを以下のように設定する
    (rollingの部分はROSのディストリビューション次第、にんいのあぷりけーしょん名のところにアプリケーション名を入れる)
    tasks.json
    1. {
    2. "version": "2.0.0",
    3. "tasks": [
    4. {
    5. "label": "Build single Rust file",
    6. "type": "shell",
    7. "linux":{
    8. "command": "source /opt/ros/rolling/setup.bash && cargo build --profile dev"
    9. },
    10. "group": "build",
    11. "presentation": {
    12. "reveal": "always"
    13. }
    14. }
    15. ]
    16. }

launch.json

  1. {
  2. // Use IntelliSense to learn about possible attributes.
  3. // Hover to view descriptions of existing attributes.
  4. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  5. "version": "0.2.0",
  6. "configurations": [
  7. {
  8. "type": "lldb",
  9. "request": "launch",
  10. "name": "Debug Run",
  11. "sourceLanguages": [
  12. "rust"
  13. ],
  14. // "terminal": "console",
  15. "preLaunchTask": "Build single Rust file",
  16. "program": "${workspaceRoot}/target/debug/にんいのあぷりけーしょん名",
  17. "args": [],
  18. "cwd": "${workspaceFolder}",
  19. "env": {
  20. "LD_LIBRARY_PATH":"/opt/ros/rolling/opt/rviz_ogre_vendor/lib:/opt/ros/rolling/lib"
  21. }
  22. }
  23. ]
  24. }
  1. F5を押してデバック実行

さて、実は前回の記事からブログの記事をMarkdownで執筆できるようにカイゼンしました。
MDくっそ楽ですね...
Bloggerも標準で対応してくれればいいのになぁ...
では ノシ

2023年6月3日土曜日

[備忘録]RustのVecの要素を変更する

Rust勉強なう
Vec型の要素を変えるのにどうすればいいんだ??
ってなって調べたらあっけなかった。

  1. impl hoge{
  2. fn fugaMethod(&self){
  3. let mut retData = vec![0 as u8; 100];
  4. retData[10] = 10; //ここがみそ
  5. }
  6. }

まじかこれでいいのか...
...ほんとにこれでいいのか???

つづく(かも?)

参考:How can I change fields of elements in vectors? - StackOverflow

2023年2月21日火曜日

[備忘録]macのTimeMachineでError 16でバックアップしなくなったときの対処(wdcloud)

みなさんこんにちは
MacのTimeMachine、便利ですよね
便利でおしゃなんですけど、よくコケるヽ(・ω・)/ズコー

今回はError 16がでて死んでました
んで、多分?原因がわかった?ので備忘録。

macOS 12.6.3
WDCoud Version 5.25.132
です。

  1. WDCloudにSSHでログイン
  2. cd /mnt/HD/HD_a2/TimeMachineBackup
  3. cd じぶんのmacのなまえ.sparsebundle
  4. rm lock

自分はこれで治りました。


頼む...もっと安定稼働してくれ...😫😫😫😫😫😫😫😫 

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. ターミナルを開き、
    1. 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するとデスクトップ環境が復活する
    1. mount /dev/disk/by-uuid/opi_bootUUID /media/mmcboot
    2. 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のフォーラムをパクったらいけました

確認方法
  1. glxinfo -B
↑こいつのDriverがllvmpipeのときはソフトウェアレンダリングです。
おさかなさんを見るとガクガクです...
    1. sudo apt update
  1. mali_csffw.binをダウンロードし、/lib/firmware に移動させておく
    1. sudo add-apt-repository ppa:liujianfeng1994/panfork-mesa
    1. sudo apt update ; sudo apt upgrade
以上!簡単だね!
  1. 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. ターミナルを開いて、
    1. docker pull yukimakura/windows_qemu_kvm_aarch64
    をする
    1. sudo apt update
    2. sudo apt install python3-pip qemu-utils
    3. pip3 install rocker off-your-rocker
    をする
  5. Win11のaarch64版を拾ってくる
  6. vhdxをqcow2に変換する
    1. qemu-img convert -O qcow2 win11.vhdx win11.qcow2
  7. 任意のフォルダを作って、そこに上で作成したqcow2をいれる
  8. UTMのサイトからゲストマシンのドライバーハッピーセットを拾って任意のフォルダにいれとく
    1. ~/.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つかってますが、ちゃんとやりたい場合は好きに通してください
  9. これでWin11が起動するはずなので、あとはセットアップを進める
  10. このサイトを参考にオフラインセットアップする
  11. セットアップが終わったら、Administrator権限でターミナルを開いて、そこ経由でデバイスマネージャーをひらく(mmc devmgmt.msc)
  12. デバイスマネージャーからEthernetのドライバだけを当てる
    ※ディスクにあるExeで当てるとWin11が死ぬので注意
  13. GeekBenchのサイトからGeekBenchを拾ってベンチマーク!!
当方の環境ではこんな感じでした
VM環境でもこれだけ出るのすごすぎ...第五世代のラップトップi5と張り合える😲

ちなみに、yukimakura/windows_qemu_kvm_aarch64の構成は以下のようになっております
ENV周りは渡している引数でお察し下さい(いつもの)
from ubuntu:22.04
RUN apt update
RUN apt install -y ebtables dnsmasq qemu qemu-efi-aarch64 ipxe-qemu qemu-system-arm qemu-system-common samba
ENV VMRAM=5G
ENV VMCPUCORE=8
ENV WINQCOWPATH=/qcow/win11Arm64.qcow2
ENV SHAREDIR=/qcow
ENV OPTIONALARGS="-drive file=spice-guest-tools-0.164.4.iso,media=cdrom,if=none,id=drivers -device usb-storage,drive=drivers"
CMD qemu-system-aarch64 \
-monitor stdio \
-M virt,accel=kvm \
-smp $VMCPUCORE \
-m $VMRAM \
-drive file=/usr/share/AAVMF/AAVMF_CODE.fd,format=raw,if=pflash \
-device ramfb \
-device qemu-xhci \
-device usb-kbd \
-device usb-tablet \
-device intel-hda \
-device hda-duplex \
-drive file=$WINQCOWPATH,format=qcow2,if=none,id=boot \
-device nvme,drive=boot,serial=boot \
-boot c -cpu host \
-nic user,smb=$SHAREDIR \
$OPTIONALARGS

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

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

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

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

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