Skip to content

Commit 90689ee

Browse files
committed
fix
1 parent c695dd2 commit 90689ee

File tree

4 files changed

+59
-15
lines changed

4 files changed

+59
-15
lines changed

src/Arduino_AlvikCarrier.cpp

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,12 @@ Arduino_AlvikCarrier::Arduino_AlvikCarrier(){
7575

7676
// kinematics
7777
kinematics = new Kinematics(WHEEL_TRACK_MM, WHEEL_DIAMETER_MM);
78-
kinematics_movement = 0;
78+
kinematics_movement = MOVEMENT_DISABLED;
7979
kinematics_achieved = false;
80+
previous_travel = 0.0;
81+
move_direction = 0.0;
8082
rotate_pid = new PidController(ROTATE_KP_DEFAULT, ROTATE_KI_DEFAULT, ROTATE_KD_DEFAULT, ROTATE_CONTROL_PERIOD, ROTATE_MAX_SPEED);
81-
83+
move_pid = new PidController(MOVE_KP_DEFAULT, MOTOR_KI_DEFAULT, MOVE_KD_DEFAULT, MOVE_CONTROL_PERIOD, MOVE_MAX_SPEED);
8284
}
8385

8486
int Arduino_AlvikCarrier::begin(){
@@ -148,7 +150,8 @@ void Arduino_AlvikCarrier::getVersion(uint8_t &high_byte, uint8_t &mid_byte, uin
148150

149151
int Arduino_AlvikCarrier::beginAPDS(){
150152
pinMode(APDS_LED, OUTPUT);
151-
enableIlluminator();
153+
//enableIlluminator();
154+
disableIlluminator();
152155
if (!apds9960->begin()){
153156
return ERROR_APDS;
154157
}
@@ -704,7 +707,7 @@ void Arduino_AlvikCarrier::lockingRotate(const float angle){
704707
void Arduino_AlvikCarrier::rotate(const float angle){
705708
rotate_pid->reset();
706709
rotate_pid->setReference(kinematics->getTheta()+angle);
707-
kinematics_movement=1;
710+
kinematics_movement=MOVEMENT_ROTATE;
708711
kinematics_achieved=false;
709712
}
710713

@@ -739,25 +742,42 @@ void Arduino_AlvikCarrier::lockingMove(const float distance){
739742

740743
void Arduino_AlvikCarrier::move(const float distance){
741744
move_pid->reset();
742-
//move_pid->setReference()
745+
previous_travel=kinematics->getTravel();
746+
if (distance<0){
747+
move_direction=-1.0;
748+
}
749+
else{
750+
move_direction=1.0;
751+
}
752+
move_pid->setReference(distance);
753+
kinematics_movement=MOVEMENT_MOVE;
754+
kinematics_achieved=false;
743755
}
744756

745757
void Arduino_AlvikCarrier::updateKinematics(){
746758
kinematics->inverse(motor_control_left->getRPM(), motor_control_right->getRPM());
747759
kinematics->updatePose();
748-
if (kinematics_movement!=0){
749-
if (kinematics_movement==1){
760+
if (kinematics_movement!=MOVEMENT_DISABLED){
761+
if (kinematics_movement==MOVEMENT_ROTATE){
750762
rotate_pid->update(kinematics->getTheta());
751-
drive(0,round(rotate_pid->getControlOutput()/10.0)*10);
763+
drive(0, round(rotate_pid->getControlOutput()/10.0)*10);
752764
if (abs(rotate_pid->getError())<ROTATE_THREASHOLD){
753765
kinematics_achieved=true;
754766
}
755767
}
768+
if (kinematics_movement==MOVEMENT_MOVE){
769+
move_pid->update((kinematics->getTravel()-previous_travel)*move_direction);
770+
drive(round(move_pid->getControlOutput()/10.0)*10, 0);
771+
772+
if (abs(move_pid->getError())<MOVE_THREADSHOLD){
773+
kinematics_achieved=true;
774+
}
775+
}
756776
}
757777
}
758778

759779
void Arduino_AlvikCarrier::disableKinematicsMovement(){
760-
kinematics_movement=0;
780+
kinematics_movement=MOVEMENT_DISABLED;
761781
}
762782

763783
bool Arduino_AlvikCarrier::isTargetReached(){

src/Arduino_AlvikCarrier.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,12 @@ class Arduino_AlvikCarrier{
7070

7171

7272
uint8_t kinematics_movement;
73+
bool kinematics_achieved;
74+
float previous_travel;
75+
float move_direction;
76+
7377
PidController * rotate_pid;
7478
PidController * move_pid;
75-
bool kinematics_achieved;
7679

7780

7881

src/definitions/robot_definitions.h

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@
1313
#ifndef __ROBOT_DEFINITIONS_H__
1414
#define __ROBOT_DEFINITIONS_H__
1515

16+
// Robot parameters
17+
#define WHEEL_TRACK_MM 89.0
18+
#define WHEEL_DIAMETER_MM 34.0
19+
1620
// Motor Control and mechanical parameters
1721
#define CONTROL_LIMIT 4096 // PWM resolution
1822

@@ -34,13 +38,28 @@ const float MOTOR_RATIO = MOTOR_CPR*MOTOR_GEAR_RATIO;
3438
#define POSITION_CONTROL_PERIOD 0.02
3539
#define POSITION_MAX_SPEED 30.0
3640

41+
42+
43+
// Kinematics control
3744
#define ROTATE_KP_DEFAULT 5.0
3845
#define ROTATE_KI_DEFAULT 0.0
3946
#define ROTATE_KD_DEFAULT 0.001
4047
#define ROTATE_CONTROL_PERIOD 0.02
41-
#define ROTATE_MAX_SPEED 45
48+
#define ROTATE_MAX_SPEED 45.0
4249
#define ROTATE_THREASHOLD 3
4350

51+
#define MOVE_KP_DEFAULT 5.0
52+
#define MOVE_KI_DEFAULT 0.0
53+
#define MOVE_KD_DEFAULT 0.001
54+
#define MOVE_CONTROL_PERIOD 0.02
55+
#define MOVE_MAX_SPEED 45.0
56+
#define MOVE_THREADSHOLD 3
57+
58+
#define MOVEMENT_DISABLED 0
59+
#define MOVEMENT_ROTATE 1
60+
#define MOVEMENT_MOVE 2
61+
62+
4463

4564

4665
// Sensor fusioning parameters
@@ -56,15 +75,13 @@ const float MOTION_FX_PERIOD = (1000U / MOTION_FX_FREQ);
5675
#define GBIAS_ACC_TH_SC (2.0f*0.000765f)
5776
#define GBIAS_GYRO_TH_SC (2.0f*0.002f)
5877
#define MOTION_FX_DECIMATION 1U
59-
//#define STATE_SIZE (size_t)(2432)
6078

79+
80+
// Library version
6181
#define VERSION_BYTE_HIGH 0
6282
#define VERSION_BYTE_MID 1
6383
#define VERSION_BYTE_LOW 2
6484

6585

6686

67-
#define WHEEL_TRACK_MM 89
68-
#define WHEEL_DIAMETER_MM 34
69-
7087
#endif

src/robotics/kinematics.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,10 @@ class Kinematics{
177177

178178
}
179179

180+
void resetTravel(){
181+
travel=0.0;
182+
}
183+
180184
float getX(){
181185
return m_to_mm(x);
182186
}

0 commit comments

Comments
 (0)