Skip to content

Commit 771bfb8

Browse files
committed
added shaking PoC by isShaking() method
1 parent 1dc4029 commit 771bfb8

File tree

2 files changed

+45
-0
lines changed

2 files changed

+45
-0
lines changed

src/Arduino_AlvikCarrier.cpp

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,10 @@ Arduino_AlvikCarrier::Arduino_AlvikCarrier(){
6767
ipKnobs = &iKnobs;
6868
imu_delta_time = MOTION_FX_ENGINE_DELTATIME;
6969
sample_to_discard = 0;
70+
is_shaking = 0;
71+
first_wakeup = true;
72+
shake_time = 0;
73+
shake_counter = 0;
7074

7175
// version
7276
version_high = VERSION_BYTE_HIGH;
@@ -619,6 +623,9 @@ int Arduino_AlvikCarrier::beginImu(){
619623
imu->Set_G_FS(2000);
620624
imu->Enable_X();
621625
imu->Enable_G();
626+
imu->Enable_Wake_Up_Detection(LSM6DSO_INT1_PIN);
627+
imu->Set_Wake_Up_Threshold(1);
628+
imu->Set_Wake_Up_Duration(3);
622629

623630
delay(10);
624631

@@ -664,6 +671,33 @@ void Arduino_AlvikCarrier::updateImu(){
664671
sample_to_discard++;
665672
}
666673

674+
imu->Get_X_Event_Status(&imu_status);
675+
676+
if (imu_status.WakeUpStatus &&
677+
(motor_control_left->getRPM()<1 && motor_control_left->getRPM()>-1) &&
678+
(motor_control_right->getRPM()<1 && motor_control_right->getRPM()>-1)){
679+
if (first_wakeup){
680+
shake_time = millis();
681+
first_wakeup = false;
682+
shake_counter = 0;
683+
}
684+
shake_counter++;
685+
}
686+
687+
if (millis()-shake_time>500){
688+
if (shake_counter>10){
689+
is_shaking = true;
690+
shake_counter = 0;
691+
shake_time_sig = millis();
692+
}
693+
}
694+
if (is_shaking && (millis()-shake_time_sig>1000)){
695+
is_shaking = false;
696+
}
697+
698+
699+
700+
667701
}
668702

669703
float Arduino_AlvikCarrier::getAccelerationX(){
@@ -702,6 +736,10 @@ float Arduino_AlvikCarrier::getYaw(){
702736
return 360.0-filter_data.rotation[0];
703737
}
704738

739+
bool Arduino_AlvikCarrier::isShaking(){
740+
return is_shaking;
741+
}
742+
705743

706744

707745
/******************************************************************************************************/

src/Arduino_AlvikCarrier.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ class Arduino_AlvikCarrier{
5656
LSM6DSOSensor * imu;
5757
int32_t accelerometer[3];
5858
int32_t gyroscope[3];
59+
LSM6DSO_Event_Status_t imu_status;
60+
5961

6062
float imu_delta_time;
6163
MFX_knobs_t iKnobs;
@@ -64,6 +66,10 @@ class Arduino_AlvikCarrier{
6466
MFX_input_t imu_data;
6567
MFX_output_t filter_data;
6668
uint16_t sample_to_discard;
69+
bool is_shaking;
70+
bool first_wakeup;
71+
unsigned long shake_time, shake_time_sig;
72+
uint16_t shake_counter;
6773

6874
uint8_t version_high;
6975
uint8_t version_mid;
@@ -220,6 +226,7 @@ class Arduino_AlvikCarrier{
220226
float getRoll(); // get robot roll
221227
float getPitch(); // get robot pitch
222228
float getYaw(); // get robot yaw
229+
bool isShaking(); // get true if robot is shaking
223230

224231
void errorLed(const int error_code); // error routine, locks on code blinking led
225232

0 commit comments

Comments
 (0)