Skip to content

Commit 74983de

Browse files
committed
example: position
1 parent 33023b0 commit 74983de

File tree

3 files changed

+96
-2
lines changed

3 files changed

+96
-2
lines changed

examples/position/position.ino

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
This file is part of the Arduino_AlvikCarrier library.
3+
4+
Copyright (c) 2023 Arduino SA
5+
6+
This Source Code Form is subject to the terms of the Mozilla Public
7+
License, v. 2.0. If a copy of the MPL was not distributed with this
8+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
9+
10+
*/
11+
12+
// WIP
13+
14+
#include "Arduino_AlvikCarrier.h"
15+
16+
Arduino_AlvikCarrier alvik;
17+
18+
PidController pid(1.2,0,1.0,20,50);
19+
20+
21+
unsigned long tmotor=0;
22+
unsigned long ttask=0;
23+
uint8_t task=0;
24+
float reference;
25+
float position;
26+
float error;
27+
28+
void setup() {
29+
Serial.begin(115200);
30+
alvik.begin();
31+
ttask=millis();
32+
tmotor=millis();
33+
task=0;
34+
reference=0;
35+
position=0;
36+
error=0;
37+
}
38+
39+
void loop() {
40+
if (millis()-tmotor>20){
41+
tmotor=millis();
42+
alvik.updateMotors();
43+
position=alvik.motor_control_left->getTravel()*360.0;
44+
pid.update(position);
45+
alvik.motor_control_left->setRPM(pid.getControlOutput());
46+
Serial.print(reference);
47+
Serial.print("\t");
48+
Serial.println(position);
49+
}
50+
51+
if (millis()-ttask>5000){
52+
ttask=millis();
53+
switch (task){
54+
case 0:
55+
reference=90;
56+
break;
57+
case 1:
58+
reference=0;
59+
break;
60+
case 2:
61+
reference=-90;
62+
break;
63+
case 3:
64+
reference=0;
65+
break;
66+
}
67+
pid.setReference(reference);
68+
task++;
69+
if (task>3){
70+
task=0;
71+
}
72+
}
73+
74+
}

src/Arduino_AlvikCarrier.cpp

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ Arduino_AlvikCarrier::Arduino_AlvikCarrier(){
6666

6767
// kinematics
6868
kinematics = new Kinematics(WHEEL_TRACK_MM,WHEEL_DIAMETER_MM);
69+
kinematics_movement=0;
6970

7071
}
7172

@@ -603,6 +604,13 @@ void Arduino_AlvikCarrier::errorLed(const int error_code){
603604
/* Kinematics */
604605
/******************************************************************************************************/
605606

607+
608+
609+
610+
611+
612+
613+
606614
void Arduino_AlvikCarrier::drive(const float linear, const float angular){
607615
kinematics->forward(linear, angular);
608616
setRpm(kinematics->getLeftVelocity(),kinematics->getRightVelocity());
@@ -620,7 +628,6 @@ void Arduino_AlvikCarrier::rotate(const float angle){
620628
kinematics->inverse(motor_control_left->getRPM(),motor_control_right->getRPM());
621629
kinematics->updatePose();
622630
error=final_angle-kinematics->getTheta();
623-
Serial.println(error);
624631
}
625632
if (angle>0){
626633
drive(0,40);
@@ -649,7 +656,6 @@ void Arduino_AlvikCarrier::move(const float distance){
649656
kinematics->inverse(motor_control_left->getRPM(),motor_control_right->getRPM());
650657
kinematics->updatePose();
651658
error=final_travel-kinematics->getTravel();
652-
Serial.println(kinematics->getTravel());
653659
}
654660
if (distance>0){
655661
drive(40,0);
@@ -663,3 +669,13 @@ void Arduino_AlvikCarrier::move(const float distance){
663669
motor_control_right->brake();
664670
}
665671

672+
673+
674+
675+
void Arduino_AlvikCarrier::updateKinematics(){
676+
kinematics->inverse(motor_control_left->getRPM(),motor_control_right->getRPM());
677+
kinematics->updatePose();
678+
if (kinematics_movement!=0){
679+
// do controls
680+
}
681+
}

src/Arduino_AlvikCarrier.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ class Arduino_AlvikCarrier{
6969
uint8_t version_low;
7070

7171

72+
uint8_t kinematics_movement;
73+
74+
7275

7376
public:
7477
Kinematics * kinematics;
@@ -195,6 +198,7 @@ class Arduino_AlvikCarrier{
195198

196199

197200
// Kinematics
201+
void updateKinematics();
198202
void drive(const float linear, const float angular); // set mm/s and deg/s of the robot
199203

200204
void move(const float distance); // move of distance millimeters

0 commit comments

Comments
 (0)