1010
1111// these functions taken from
1212// https://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git/tree/lib/smbus.c
13- __s32 i2c_smbus_access (int file, char read_write, __u8 command, int size,
13+ static __s32 i2c_smbus_access (int file, char read_write, __u8 command, int size,
1414 union i2c_smbus_data* data)
1515{
1616 struct i2c_smbus_ioctl_data args;
@@ -27,7 +27,7 @@ __s32 i2c_smbus_access(int file, char read_write, __u8 command, int size,
2727 return err;
2828}
2929
30- __s32 i2c_smbus_read_byte_data (int file, __u8 command)
30+ static __s32 i2c_smbus_read_byte_data (int file, __u8 command)
3131{
3232 union i2c_smbus_data data;
3333 int err;
@@ -39,7 +39,7 @@ __s32 i2c_smbus_read_byte_data(int file, __u8 command)
3939 return 0x0FF & data.byte ;
4040}
4141
42- __s32 i2c_smbus_write_byte_data (int file, __u8 command, __u8 value)
42+ static __s32 i2c_smbus_write_byte_data (int file, __u8 command, __u8 value)
4343{
4444 union i2c_smbus_data data;
4545 data.byte = value;
@@ -114,6 +114,7 @@ ImuService::ImuService() : initialized_(false)
114114 usleep (50000 );
115115 }
116116
117+ // TODO: More robust calibration
117118 if (valid_samples > 0 )
118119 {
119120 degrees_error_ = sum / valid_samples;
@@ -133,13 +134,15 @@ std::optional<ImuData> ImuService::poll(){
133134 std::optional<AngularAcceleration> angular_acceleration = pollAngularAcceleration (angular_velocity);
134135 std::optional<Eigen::Vector2d> imu_linear_acceleration = pollLinearAcceleration ();
135136
136- if (!angular_velocity.has_value () || !angular_acceleration.has_value () || !imu_linear_acceleration.has_value ()){
137- return std::nullopt ;
137+ if (angular_velocity.has_value () || angular_acceleration.has_value () || imu_linear_acceleration.has_value ()){
138+ std::optional<Eigen::Vector2d> linear_acceleration = transformLinearAcceleration (angular_velocity.value (), angular_acceleration.value (), imu_linear_acceleration.value ());
139+ }
140+ else {
141+ std::optional<Eigen::Vector2d> linear_acceleration = std::nullopt ;
138142 }
139143
140- Eigen::Vector2d linear_acceleration = transformLinearAcceleration (angular_velocity.value (), angular_acceleration.value (), imu_linear_acceleration.value ();
141144
142- return ImuData{angular_velocity. value () , angular_acceleration. value () , linear_acceleration};
145+ return ImuData{angular_velocity, angular_acceleration, linear_acceleration};
143146
144147}
145148std::optional<int16_t > ImuService::readAndCombineByteData (uint8_t ls_reg, uint8_t ms_reg)
@@ -190,7 +193,7 @@ std::optional<AngularAcceleration> ImuService::pollAngularAcceleration(std::opti
190193
191194 if (!prev_angular_velocity_.has_value ()){
192195 prev_angular_velocity_ = pollAngularVelocity ();
193- prev_time_ = std::chrono::steady_clock::now ();;
196+ prev_time_ = std::chrono::steady_clock::now ();
194197 return std::nullopt ;
195198 }
196199
@@ -236,8 +239,6 @@ std::optional<Eigen::Vector2d> ImuService::pollLinearAcceleration()
236239 * ACCELEROMETER_FULL_SCALE_G
237240 * ACCELERATION_DUE_TO_GRAVITY_METERS_PER_SECOND_SQUARED;
238241
239- // Transform using equations
240-
241242 return Eigen::Vector2d (a_x, a_y);
242243}
243244
0 commit comments