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

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


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