roboforum.ru

Технический форум по робототехнике.

OR Hexapod Control (Qt + GCC + SSC32)

Re: OR Hexapod Control (Qt + C + SSC32)

Duhas » 29 мар 2011, 22:17

имхается мне что только добавляя сравнение мин-а и макс-а в условие...

Re: OR Hexapod Control (Qt + C + SSC32)

setar » 29 мар 2011, 22:22

думаю должна быть функция возвращающая сначала максимум из пары (массива может быть), затем минимум из пары

Re: OR Hexapod Control (Qt + C + SSC32)

Duhas » 29 мар 2011, 22:25

что то подсказывает что это 100% дольше по выполнению.. чем иф(задание больше мин и мин больше макс или задание больше макс и макс больше мин)

Re: OR Hexapod Control (Qt + C + SSC32)

setar » 29 мар 2011, 22:42

ок, пока сделаю так,
если будут еще идеи - пишите.
спасибо :)

Добавлено спустя 11 минут 31 секунду:
похоже ?
Код: Выделить всёРазвернуть
if (servo_max_pwm[i]>servo_min_pwm[i]) {
   if (servo_pwm[i]>servo_max_pwm[i]) servo_pwm[i]=servo_max_pwm[i];
   if (servo_pwm[i]<servo_min_pwm[i]) servo_pwm[i]=servo_min_pwm[i];
} else {
   if (servo_pwm[i]>servo_min_pwm[i]) servo_pwm[i]=servo_min_pwm[i];
   if (servo_pwm[i]<servo_max_pwm[i]) servo_pwm[i]=servo_max_pwm[i];
}

Re: OR Hexapod Control (Qt + C + SSC32)

Duhas » 29 мар 2011, 23:09

ну да, только я правда предлагал прям в условие.. но наверно если компилятор умный - то все равно.. а если туповат, то так быстрее )

Re: OR Hexapod Control (Qt + C + SSC32)

setar » 31 мар 2011, 00:53

добавил контроль горизонта тела (пока ручной)

Re: OR Hexapod Control (Qt + C + SSC32)

Виталий » 01 апр 2011, 12:18

Код: Выделить всёРазвернуть
servo_pwm[i] = Math.Min(servo_pwm[i], servo_max_pwm[i]);
servo_pwm[i] = Math.Max(servo_pwm[i], servo_min_pwm[i]);


Тогда servo_pwm[i] будет в диапазоне servo_min_pwm[i]..servo_max_pwm[i].

Но лучше просто сразу функцию определить:
Код: Выделить всёРазвернуть
int Bound(int v, int min, int max)
{
   return Math.Max(Math.Min(v, max), min);
}


Как-то так...

Re: OR Hexapod Control (Qt + C + SSC32)

setar » 01 апр 2011, 12:19

красиво, так и сделаю.
спасибо

Re: OR Hexapod Control (Qt + C + SSC32)

boez » 01 апр 2011, 13:03

Стоп, а разве это работает в ситуации когда max<min?

Re: OR Hexapod Control (Qt + C + SSC32)

Виталий » 01 апр 2011, 14:46

Не работает, но это идеологически неверная ситуация...
Можно вот так...
Код: Выделить всёРазвернуть
int Bound(int v, int a, int b)
{
   return Math.Max(Math.Min(v, Math.Max(a, b)), Math.Min(a, b));
}

Re: OR Hexapod Control (Qt + C + SSC32)

setar » 01 апр 2011, 14:55

это идеологически нужно, min и max это углы, они могут быть достигнуты при большом PWM или маленьком PWM

Re: OR Hexapod Control (Qt + C + SSC32)

Strijar » 01 апр 2011, 15:17

Виталий писал(а):
Код: Выделить всёРазвернуть
int Bound(int v, int a, int b)
{
   return Math.Max(Math.Min(v, Math.Max(a, b)), Math.Min(a, b));
}


Жэсть... может все-ж при установке min и max один раз проверять на min < max, чем делать это при каждом шевелении суставом?

Re: OR Hexapod Control (Qt + C + SSC32)

Виталий » 01 апр 2011, 16:31

Да, жесть. Потому что min всегда меньше max.

это идеологически нужно, min и max это углы, они могут быть достигнуты при большом PWM или маленьком PWM

Ну так проверяй угол, а не ШИМ...

Re: OR Hexapod Control (Qt + C + SSC32)

setar » 01 апр 2011, 16:36

вариант в принципе...

Re: OR Hexapod Control (Qt + C + SSC32)

wizard256 » 12 апр 2011, 06:01

Здравствуйте! Программер из меня никакой но я нашёл в инете вот ето http://www.lynxmotion.net/viewtopic.php?t=4397 может кто разберётся?


cron
Rambler\'s Top100 Mail.ru counter