Changement d'angle avec une vitesse angulaire fonctionnelle.
This commit is contained in:
parent
6d80d913fd
commit
4b59f76e46
10
IO.hpp
10
IO.hpp
|
@ -17,9 +17,9 @@
|
||||||
#define DANCING_ACTION_DELTA_ANGLE 2
|
#define DANCING_ACTION_DELTA_ANGLE 2
|
||||||
|
|
||||||
#define GAIN_KD 50
|
#define GAIN_KD 50
|
||||||
#define ANGULAR_SPEED 10 // °/s
|
#define ANGULAR_SPEED 120 // °/s
|
||||||
|
|
||||||
using std::abs;
|
using std::abs, std::signbit;
|
||||||
|
|
||||||
enum class Axes {
|
enum class Axes {
|
||||||
X,
|
X,
|
||||||
|
@ -125,15 +125,15 @@ class IO {
|
||||||
{
|
{
|
||||||
static unsigned long prev_time {millis()};
|
static unsigned long prev_time {millis()};
|
||||||
float err_dir = dir - m_dir;
|
float err_dir = dir - m_dir;
|
||||||
float angular_displacement = angular_speed * static_cast<float>(millis() / 1000 - prev_time / 1000);
|
float angular_displacement = angular_speed * static_cast<float>(millis() - prev_time) / 1000.0f;
|
||||||
|
|
||||||
if(abs(err_dir) < angular_displacement)
|
if(abs(err_dir) < abs(angular_displacement))
|
||||||
{
|
{
|
||||||
m_dir = dir;
|
m_dir = dir;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_dir += angular_displacement * (err_dir < 0) ? -1 : 1;
|
m_dir += angular_displacement * ((!signbit(err_dir)) * 2 - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
prev_time = millis();
|
prev_time = millis();
|
||||||
|
|
Loading…
Reference in New Issue