UdonLibrary 1.0.0
機械システム研究部 C++ ライブラリ
読み取り中…
検索中…
一致する文字列を見つけられません
BNO055.hpp
[詳解]
1//
2// BNO055 9軸センサー
3//
4// Copyright (c) 2022 udonrobo
5//
6
7#pragma once
8
9#if defined(ARDUINO) && !defined(UDON_TEENSY_I2C_SLAVE_MODE)
10
11# include <Udon/Thirdparty/Adafruit_BNO055/Adafruit_BNO055.h>
12# include <Udon/Types/Euler.hpp>
14
15namespace Udon
16{
17
19 class BNO055
20 : Adafruit_BNO055
21 {
23 QuaternionDirection direction;
24
26 Quaternion offset;
27
28 Quaternion quaternion;
29
30 public:
34 BNO055(TwoWire& wire, const QuaternionDirection& direction = { true, true, true })
35 : Adafruit_BNO055(-1, 0x28, &wire)
36 , direction(direction)
37 , offset(Quaternion::Identity())
38 , quaternion(Quaternion::Identity())
39 {
40 }
41
43 struct Parameter
44 {
46 adafruit_bno055_opmode_t mode = OPERATION_MODE_NDOF;
47
49 adafruit_bno055_axis_remap_config_t remapConfig = REMAP_CONFIG_P1;
50
52 adafruit_bno055_axis_remap_sign_t remapSign = REMAP_SIGN_P1;
53
55 bool useExternalCrystal = false;
56 };
57
60 bool begin()
61 {
62 return begin(Parameter());
63 }
64
68 bool begin(const Parameter& parameter)
69 {
70 if (!Adafruit_BNO055::begin(parameter.mode))
71 {
72 return false;
73 }
74
75 setAxisRemap(parameter.remapConfig);
76 setAxisSign(parameter.remapSign);
77 setExtCrystalUse(parameter.useExternalCrystal);
78
79 return true;
80 }
81
83 void clear()
84 {
85 offset = quaternion;
86 }
87
89 void update()
90 {
91 const auto q = Adafruit_BNO055::getQuat();
92 quaternion = { q.x(), q.y(), q.z(), q.w() };
93 }
94
97 Quaternion getQuaternion() const
98 {
99 return (offset.inverse() * quaternion).directionRevision(direction); // オフセットを引き、回転方向を修正
100 }
101
104 Euler getEuler() const
105 {
106 return getQuaternion().toEuler();
107 }
108
111 double getYaw() const
112 {
113 return getQuaternion().toYaw();
114 }
115
117 void show() const
118 {
119 Show(getEuler());
120 }
121 };
122
123} // namespace Udon
124
125#endif
Definition Bit.hpp:12
void Show(Args &&... args)
区切り文字ありで出力する
Definition Show.hpp:339