From 3bdf24157fa93b3c1e749bc981a215bc21891770 Mon Sep 17 00:00:00 2001 From: Sergi Hernandez Juan <shernand@iri.upc.edu> Date: Tue, 8 Jun 2021 19:04:05 +0200 Subject: [PATCH] Added a function to set the units of the sensor (accelerations and angular speeds). --- include/bno055_imu_driver.h | 1 + src/bno055_imu_driver.cpp | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/bno055_imu_driver.h b/include/bno055_imu_driver.h index a68d952..4ed36ab 100644 --- a/include/bno055_imu_driver.h +++ b/include/bno055_imu_driver.h @@ -83,6 +83,7 @@ class CBNO055IMUDriver void get_remap_axis(std::vector<char> &new_x,std::vector<char> &new_y,std::vector<char> &new_z); void set_data_rate(double rate_hz); double get_data_rate(void); + void set_sensor_units(bool degrees_s,bool m_s_s); std::string get_new_data_event_id(void); /* accelerometer functions */ std::vector<double> get_raw_accelerometer(void); diff --git a/src/bno055_imu_driver.cpp b/src/bno055_imu_driver.cpp index 0fc0e58..0705885 100644 --- a/src/bno055_imu_driver.cpp +++ b/src/bno055_imu_driver.cpp @@ -524,6 +524,43 @@ void CBNO055IMUDriver::get_sensor_units(void) } } +void CBNO055IMUDriver::set_sensor_units(bool degrees_s,bool m_s_s) +{ + unsigned char units=0x00; + + try{ + if(m_s_s) + { + units&=0xFE; + this->accel_config.units=accel_linear; + } + else + { + units|=0x01; + this->accel_config.units=accel_gravity; + } + if(degrees_s) + { + units&=0xF9; + this->gyro_config.units=gyro_deg; + this->euler_units=euler_deg; + } + else + { + units|=0x06; + this->gyro_config.units=gyro_rad; + this->euler_units=euler_rad; + } + this->imu_access.enter(); + this->change_register_page(0x00); + this->write_registers(0x3B,1,&units); + this->imu_access.exit(); + }catch(CException &e){ + this->imu_access.exit(); + throw; + } +} + void CBNO055IMUDriver::get_sensor_configs(void) { unsigned char configs[4]; -- GitLab