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>
15
16namespace Udon
17{
18
20 class BNO055
21 : Adafruit_BNO055
22 {
24 QuaternionDirection direction;
25
27 Quaternion offset;
28
30 Quaternion quaternion;
31
33 Vec3 gyro;
34
35 public:
39 BNO055(TwoWire& wire, const QuaternionDirection& direction = { true, true, true })
40 : Adafruit_BNO055(-1, 0x28, &wire)
41 , direction(direction)
42 , offset(Quaternion::Identity())
43 , quaternion(Quaternion::Identity())
44 , gyro()
45 {
46 }
47
49 struct Parameter
50 {
52 adafruit_bno055_opmode_t mode = OPERATION_MODE_NDOF;
53
55 adafruit_bno055_axis_remap_config_t remapConfig = REMAP_CONFIG_P1;
56
58 adafruit_bno055_axis_remap_sign_t remapSign = REMAP_SIGN_P1;
59
61 bool useExternalCrystal = false;
62 };
63
66 bool begin()
67 {
68 return begin(Parameter());
69 }
70
74 bool begin(const Parameter& parameter)
75 {
76 if (!Adafruit_BNO055::begin(parameter.mode))
77 {
78 return false;
79 }
80
81 setAxisRemap(parameter.remapConfig);
82 setAxisSign(parameter.remapSign);
83 setExtCrystalUse(parameter.useExternalCrystal);
84
85 return true;
86 }
87
91 void setMode(adafruit_bno055_opmode_t mode)
92 {
93 Adafruit_BNO055::setMode(mode);
94 }
95
98 adafruit_bno055_opmode_t getMode()
99 {
100 return Adafruit_BNO055::getMode();
101 }
102
104 void clear()
105 {
106 offset = quaternion;
107 }
108
110 void update()
111 {
112 const auto q = Adafruit_BNO055::getQuat();
113 quaternion = { q.x(), q.y(), q.z(), q.w() };
114
115 const auto g = Adafruit_BNO055::getVector(Adafruit_BNO055::VECTOR_GYROSCOPE);
116 gyro = { g.x(), g.y(), g.z() };
117 }
118
121 Quaternion getQuaternion() const
122 {
123 return (offset.inverse() * quaternion).directionRevision(direction); // オフセットを引き、回転方向を修正
124 }
125
128 Euler getEuler() const
129 {
130 return getQuaternion().toEuler();
131 }
132
135 double getYaw() const
136 {
137 return getQuaternion().toYaw();
138 }
139
142 Vec3 getGyro() const
143 {
144 return gyro;
145 }
146
148 void show() const
149 {
150 Show(getEuler());
151 }
152 };
153
154} // namespace Udon
155
156#endif
Definition Bit.hpp:12
void Show(Args &&... args)
区切り文字ありで出力する
Definition Show.hpp:339
Vec3 Vec3
Definition Vector3D.hpp:20