From 4fa1434052dd603cec70f0edfeeca8f47905fbfe Mon Sep 17 00:00:00 2001 From: haller Date: Mon, 2 May 2005 19:02:10 +0000 Subject: Ajout des paramètres d'asserv eSat et dSample Ajout d'une vietesse linéaire et rotation --- 2005/i/robert/src/asserv/asserv.cc | 49 +++++++++++++++++++++++---------- 2005/i/robert/src/asserv/asserv.hh | 9 ++++-- 2005/i/robert/src/asserv/test_asserv.cc | 14 +++++++++- 3 files changed, 55 insertions(+), 17 deletions(-) (limited to '2005/i/robert') diff --git a/2005/i/robert/src/asserv/asserv.cc b/2005/i/robert/src/asserv/asserv.cc index fea281a..3288ac6 100644 --- a/2005/i/robert/src/asserv/asserv.cc +++ b/2005/i/robert/src/asserv/asserv.cc @@ -50,18 +50,20 @@ void Asserv::reset(void) setKp(kp_); setKi(ki_); setKd(kd_); + setESat(eSat_); setSpeedIntMax(speedIntMax_); + setDSample(dSample_); setAccel(accel_); - setMaxSpeed(maxSpeed_); + setMaxSpeed(maxSLin_, maxSRot_); setUseTazFSM(useTazFSM_); - //setInvPwm(leftInvPwm_, rightInvPwm_); - //statCounter(pCounter_); - //statPosition(pPosition_); - //statMotor(pMotor_); - //statPwm(pPwm_); - //statTiming(pTiming_); - //statInPort(pStatInPort_); - //statSharp(pStatInPort_); + setInvPwm(leftInvPwm_, rightInvPwm_); + statCounter(pCounter_); + statPosition(pPosition_); + statMotor(pMotor_); + statPwm(pPwm_); + statTiming(pTiming_); + statInPort(pStatInPort_); + statSharp(pStatInPort_); } /// Essaie de purger la liste d'émission et indique si elle est vide. @@ -281,12 +283,25 @@ void Asserv::setKd(double Kd) proto_.send('p',"bw", 'd', static_cast(Kd * 256)); } +void Asserv::setESat(int eSat) +{ + eSat_ = eSat; + // Envoie à l'AVR + proto_.send('p', "bw", 'E', eSat); +} + void Asserv::setSpeedIntMax(int maxInt) { speedIntMax_ = maxInt; proto_.send('p', "bW", 'I', maxInt); } +void Asserv::setDSample (int dSample) +{ + dSample_ = dSample; + proto_.send('p', "bb", 's', dSample); +} + void Asserv::setAccel(int accel) { accel_ = accel_; @@ -301,13 +316,16 @@ double Asserv::getAccel(void) return mmPpas_ / (sPperiod_ * sPperiod_) / accel_; // XXX Vérifier ca } -void Asserv::setMaxSpeed(int maxSpeed) +/// Règle les vitesses maximum(lineaire et rotation) +void Asserv::setMaxSpeed(int maxSLin, int maxSRot) { - maxSpeed_ = maxSpeed; + maxSLin_ = maxSLin; + maxSRot_ = maxSRot; // Conversion mm->ppp - int p = mms2ppp(maxSpeed); + int p = mms2ppp(maxSLin); + int r = radTo256(maxSRot); // Envoie à l'AVR - proto_.send('p',"bb", 'm', p); + proto_.send('p',"bbb", 'm', p, r); } void Asserv::setUseTazFSM(bool use) @@ -413,8 +431,11 @@ void Asserv::loadConfig(const Config & config) kp_ = config.get("asserv.kp"); ki_ = config.get("asserv.ki"); kd_ = config.get("asserv.kd"); + eSat_ = config.get("asserv.eSat"); speedIntMax_ = config.get("asserv.speedIntMax"); - maxSpeed_ = config.get("asserv.maxSpeed"); + dSample_ = config.get("asserv.dSample"); + maxSLin_ = config.get("asserv.maxSLin"); + maxSRot_ = config.get("asserv.maxSRot"); useTazFSM_ = config.get("asserv.useTazFSM"); mmPpas_ = config.get("asserv.mmPpas"); sPperiod_ = config.get("asserv.sPperiod"); diff --git a/2005/i/robert/src/asserv/asserv.hh b/2005/i/robert/src/asserv/asserv.hh index 246ef5c..b322e0b 100644 --- a/2005/i/robert/src/asserv/asserv.hh +++ b/2005/i/robert/src/asserv/asserv.hh @@ -69,8 +69,11 @@ class Asserv : public NonCopyable, public Proto::Receiver double kp_; double ki_; double kd_; + int eSat_; int speedIntMax_; - int maxSpeed_; //unité AVR + int dSample_; + int maxSLin_;//unité AVR + int maxSRot_; bool leftInvPwm_, rightInvPwm_; bool useTazFSM_; // Stat @@ -126,10 +129,12 @@ class Asserv : public NonCopyable, public Proto::Receiver void setKp (double kp); void setKi (double ki); void setKd (double kd); + void setESat (int eSat); void setSpeedIntMax (int maxInt); + void setDSample(int dSample); void setAccel (int accel); double getAccel (void); - void setMaxSpeed(int maxSpeed); + void setMaxSpeed(int maxSLin, int maxSRot); void setUseTazFSM(bool use); void setInvPwm(bool leftInvPwm, bool rightInvPwm); //@} diff --git a/2005/i/robert/src/asserv/test_asserv.cc b/2005/i/robert/src/asserv/test_asserv.cc index 56483b6..ce3307a 100644 --- a/2005/i/robert/src/asserv/test_asserv.cc +++ b/2005/i/robert/src/asserv/test_asserv.cc @@ -276,11 +276,21 @@ main (int argc, char **argv) throw std::runtime_error("syntax error"); asserv.setKd(strtod(argv[i], 0)); break; + case 'E': + if(++i > argc) + throw std::runtime_error("syntax error"); + asserv.setESat(strtol(argv[i], 0, 10)); + break; case 'I': if(++i > argc) throw std::runtime_error("syntax error"); asserv.setSpeedIntMax(strtol(argv[i], 0, 10)); break; + case 's': + if(++i > argc) + throw std::runtime_error("syntax error"); + asserv.setDSample(strtol(argv[i], 0, 10)); + break; case 'A': if(++i > argc) throw std::runtime_error("syntax error"); @@ -289,7 +299,9 @@ main (int argc, char **argv) case 'm': if(++i > argc) throw std::runtime_error("syntax error"); - asserv.setMaxSpeed(strtol(argv[i], 0, 10)); + asserv.setMaxSpeed(strtol(argv[i], 0, 10), + strtol(argv[i + 1], 0, 10)); + i++; break; case 'W': if (++i + 1 > argc) -- cgit v1.2.3