Skip to content

バイナリフォーマットでデータ送信します#5

Open
mmaakkyyii wants to merge 9 commits into
mainfrom
feature/binary_format
Open

バイナリフォーマットでデータ送信します#5
mmaakkyyii wants to merge 9 commits into
mainfrom
feature/binary_format

Conversation

@mmaakkyyii

Copy link
Copy Markdown

What does this implement/fix?

Does this close any currently open issues?

#4

How has this been tested?

実機動作確認済みです

Any other comments?

Checklists

@mmaakkyyii mmaakkyyii requested a review from chama1176 June 19, 2026 01:26
@chama1176

Copy link
Copy Markdown
Collaborator

@mmaakkyyii
概ね良いと思います
フォーマッターがかかっているようですが、これはどの設定ファイルでかけてますか

@mmaakkyyii

Copy link
Copy Markdown
Author

手元のvscodeで開いたとき勝手に成形されてそうでした。何か直した方がいいでしょうか?

@chama1176

chama1176 commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

arduinoのデフォルトでフォーマットしてもらえますか?

https://docs.arduino.cc/software/ide-v2/tutorials/ide-v2-customize-auto-formatter/

@chama1176 chama1176 closed this Jun 19, 2026
@chama1176 chama1176 reopened this Jun 19, 2026
@mmaakkyyii

Copy link
Copy Markdown
Author

auto formatかけました

@chama1176 chama1176 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ありがとうございます
良さそうです

@chama1176

Copy link
Copy Markdown
Collaborator

@mmaakkyyii
追加ですみません
バイナリの出力形式がREADMEにほしいです

Comment on lines +480 to +485
const unsigned char accScale[4] = { 0x04, 0x00, 0x00, 0x00 };
result = writeDMPmems(ACC_SCALE, 4, &accScale[0]);
if (result > worstResult)
worstResult = result; // Write accScale to ACC_SCALE DMP register
// In order to output hardware unit data as configured FSR write 0x00040000 when FSR is 4g
const unsigned char accScale2[4] = {0x00, 0x04, 0x00, 0x00};
result = writeDMPmems(ACC_SCALE2, 4, &accScale2[0]); if (result > worstResult) worstResult = result; // Write accScale2 to ACC_SCALE2 DMP register
const unsigned char accScale2[4] = { 0x00, 0x04, 0x00, 0x00 };

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

myFSS.a = gpm16;に変更してたのでこちらの加速度スケールのパラメータも変更が必要そうです

@hatakeyamayuta

Copy link
Copy Markdown

ファームウェア修正前後でIMUを縦に傾けた状態から水平にする動きをして姿勢をみましたが
改善されていることが確認できました。

修正前
Screencast from 2026年06月25日 13時55分43秒.webm
修正後
Screencast from 2026年06月25日 13時53分18秒.webm

@mmaakkyyii

Copy link
Copy Markdown
Author

今確認中なんですが、加速度のレンジおかしくなってますね
linear_accelerationの値がでかすぎる

@hatakeyamayuta

hatakeyamayuta commented Jun 25, 2026

Copy link
Copy Markdown

加速度の値が大きい問題は手元でも確認できました
試しにIMUの設定を4gに戻してROS側の変換式も4gのスケールに修正したら正常な値出てますね

変更箇所
parser.cpp

constexpr double kAccelScale = 9.8 / 8192.0;  // ±4g: 1g = 8192 LSB

@hatakeyamayuta

Copy link
Copy Markdown

4g

IMG_4091.mov

@mmaakkyyii

Copy link
Copy Markdown
Author

@mmaakkyyii

Copy link
Copy Markdown
Author

内部変数を整数型で扱うためにスケールしてそれを元に戻すためにACC_Scale2は逆数をとる必要あるみたいでした。
ros側で正しく重力加速度が見えることを確認しました

if ((myICM.status == ICM_20948_Stat_Ok) || (myICM.status == ICM_20948_Stat_FIFOMoreDataAvail)) // Was valid data available?
{
if ((data.header & DMP_header_bitmap_Quat6) > 0)// && (data.header & DMP_header_bitmap_Gyro) > 0)
if ((data.header & DMP_header_bitmap_Quat6) > 0) // && (data.header & DMP_header_bitmap_Gyro) > 0)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

静止状態で一定時間データをみてましたが定期的にノイズが入ってました。
おそらく、フレームにGyroやAccelがない状態で送ってしまうのが原因でGyroとAccelをフィルターするとノイズが消えました

Image
Suggested change
if ((data.header & DMP_header_bitmap_Quat6) > 0) // && (data.header & DMP_header_bitmap_Gyro) > 0)
if (
((data.header & DMP_header_bitmap_Quat6) > 0) &&
((data.header & DMP_header_bitmap_Gyro) > 0) &&
((data.header & DMP_header_bitmap_Accel) > 0))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants