Skip to content

Commit 42f019f

Browse files
committed
update kinematics, check units
1 parent 48ee1f6 commit 42f019f

File tree

3 files changed

+31
-18
lines changed

3 files changed

+31
-18
lines changed

src/Arduino_AlvikCarrier.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -622,39 +622,44 @@ void Arduino_AlvikCarrier::rotate(const float angle){
622622
error=final_angle-kinematics->getTheta();
623623
Serial.println(error);
624624
}
625-
if (error>0){
626-
drive(0,60);
625+
if (angle>0){
626+
drive(0,40);
627627
}else{
628-
drive(0,-60);
628+
drive(0,-40);
629629
}
630630
}
631631
drive(0,0);
632632
updateMotors();
633+
motor_control_left->brake();
634+
motor_control_right->brake();
633635
}
634636

635-
/*
637+
638+
636639
void Arduino_AlvikCarrier::move(const float distance){
637-
float initial_distance=kinematics->get();
638-
float final_distance=distance+initial_distance;
639-
float error=distance;
640+
float initial_travel=1000.0*kinematics->getTravel();
641+
float final_travel=abs(distance)+initial_travel;
642+
float error=abs(distance);
640643
unsigned long t=millis();
641-
while(abs(error)>2){
644+
645+
while(error>2){
642646
if (millis()-t>20){
643647
t=millis();
644648
updateMotors();
645649
kinematics->inverse(motor_control_left->getRPM(),motor_control_right->getRPM());
646650
kinematics->updatePose();
647-
error=final_distance-kinematics->getTheta();
648-
Serial.println(error);
651+
error=final_travel-1000.0*kinematics->getTravel();
652+
Serial.println(kinematics->getTravel());
649653
}
650-
if (error>0){
654+
if (distance>0){
651655
drive(40,0);
652656
}else{
653657
drive(-40,0);
654658
}
655659
}
656660
drive(0,0);
657661
updateMotors();
658-
*/
662+
motor_control_left->brake();
663+
motor_control_right->brake();
659664
}
660665

src/Arduino_AlvikCarrier.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,8 @@ class Arduino_AlvikCarrier{
197197
// Kinematics
198198
void drive(const float linear, const float angular); // set mm/s and deg/s of the robot
199199

200-
void rotate(const float angle); // set degrees
200+
void move(const float distance); // move of distance millimeters
201+
void rotate(const float angle); // rotate of angle degrees
201202

202203

203204

src/robotics/kinematics.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#define __KINEMATICS_H__
1414

1515
#include "Arduino.h"
16+
#include "../definitions/robot_definitions.h"
1617

1718
class Kinematics{
1819
private:
@@ -35,6 +36,8 @@ class Kinematics{
3536
float delta_x, delta_y;
3637
float travel;
3738

39+
float control_period;
40+
3841

3942
float mm_to_m(const float mm){
4043
return mm*0.001;
@@ -70,7 +73,7 @@ class Kinematics{
7073

7174

7275
public:
73-
Kinematics(const float _wheel_track, const float _wheel_diameter){
76+
Kinematics(const float _wheel_track, const float _wheel_diameter, const float _control_period=MOTOR_CONTROL_PERIOD){
7477
w=0.0;
7578
left_velocity=0.0;
7679
right_velocity=0.0;
@@ -94,6 +97,8 @@ class Kinematics{
9497
delta_right=0.0;
9598
delta_travel=0.0;
9699
travel=0.0;
100+
101+
control_period=_control_period*0.001; // convert ms to s
97102
}
98103

99104
void forward(const float linear, const float angular){
@@ -148,12 +153,14 @@ class Kinematics{
148153
*/
149154

150155
void updatePose(){
151-
delta_theta=angular_velocity*0.02;
152-
delta_x=linear_velocity*cos(theta)*0.02;
153-
delta_y=linear_velocity*sin(theta)*0.02;
156+
delta_theta=angular_velocity*control_period;
157+
delta_x=linear_velocity*cos(theta)*control_period;
158+
delta_y=linear_velocity*sin(theta)*control_period;
159+
delta_travel=sqrt(delta_x*delta_x+delta_y*delta_y);
154160
x+=delta_x;
155161
y+=delta_y;
156162
theta+=delta_theta;
163+
travel+=delta_travel;
157164
}
158165

159166
void resetPose(const float initial_x=0.0, const float initial_y=0.0, const float initial_theta=0.0){
@@ -183,7 +190,7 @@ class Kinematics{
183190
}
184191

185192
float getTravel(){
186-
return travel;
193+
return m_to_mm(travel);
187194
}
188195

189196
float getDeltaX(){

0 commit comments

Comments
 (0)