Всем привет! Ребята ну помогите в таком деле - надо средствами ардуино высчитать угол "А" в градусах по имеющимся x и у. Это всё для сервопривода. И вообще очень интересует опыт тригонометрических расчетов .
sin(A)=x/y; - вычисляем синус угла по гипотенузе и прилежазему катету.
A=arcsin(sin(A)); - переводим синус угла в радианы.
A=(A*180)/Pi; - получаем градусы.
Вся формула выглядит так:
A=(arcsin(x/y)*180)/Pi;
Как заменить арксинус для того чтобы arduino посчитал - я не знаю.
UPD. Эх... если бы мне все эти тригонометрические функции в школе показывали на тех же сервоприводах, уверен что заучил бы их на отлично. А так оно для меня так и осталось абстрактным понятием.
))) Спасибо парни. Я знаю тригонометрию. Тогда конкретизирую вопрос, в моем представлении по крайней мере. Так как наши Atmel`ы не дружат с float, то у меня одна мысль - это таблицы. Точнее выбор из промежутков. Может есть какие-то примеры БЫСТРОГО кода выборки из таблицы(массива) интервалов. Может быть кто-то пользовался библиотеками какими-либо для этого. Моё работает медленно и оное громоздко. Вот и ищу что-то оптимальнее моего. Не всегда ж сервы от АЦП гнут. Или там в цикле)))) google & yandex не помогли. Если что пропустил - прошу тыкнуть носом.
))) Спасибо парни. Я знаю тригонометрию. Тогда конкретизирую вопрос, в моем представлении по крайней мере. Так как наши Atmel`ы не дружат с float, то у меня одна мысль - это таблицы. Точнее выбор из промежутков. Может есть какие-то примеры БЫСТРОГО кода выборки из таблицы(массива) интервалов. Может быть кто-то пользовался библиотеками какими-либо для этого. Моё работает медленно и оное громоздко. Вот и ищу что-то оптимальнее моего. Не всегда ж сервы от АЦП гнут. Или там в цикле)))) google & yandex не помогли. Если что пропустил - прошу тыкнуть носом.
Было бы неплохо написать это сразу(т.к. в этом случае я бы не показал свои навыки незнания тригонометрии и исключительной невнимательности :) ).
Я понял свою ошибку. Начну с начала. Есть лапа из четырех суставов. Мне надо высчитать углы поворота 5 серв. Долго высчитывается всё это. Надо делать отдельно серво-контроллер, ведь есть же ещё другие комманды в потоке.
Пересмотрел огромное количество различных жутей на 2-6-8 и более лап. В каждой по 2-3 сервы. И оно всё довольно быстро двигается. Там же как-то считается.
по ссылке лапы проще, меньше серв. пример на картинке и на примере многоногов - чтобы лапа отошла от корпуса на Y=20 см надо найти угол А или В. Длина колена X - известна
1 серва пусть будет плечо. 2 серва - локоть. чтобы протянуть руку на 80 см от себя, надо согнуть руку и в плече, и в локте. на определенные градусы в плече и локте. вот мне и нужны эти углы))
У меня не получались как то арктангенс. Углы треугольника обычно измеряются в градусах (x°). 1 градус равен \( \frac{1}{360} \) длины окружности с центром в точке начала угла. Также используется минута x′, равная \( \frac{1}{60} \) градуса, и секунда x″, равная \( \frac{1}{60} \) минуты. В тригонометрии, однако, используется также радиан. 1 радиан примерно равен 57º17′45″. Длина дуги, которую высекает угол в α радиан, равна αR, где R - радиус окружности.
Я так понял у Вас проблема с этой таблицей. Cos(0) = 1, Cos(1) =0,999847695 ........... Cos(359) = 0,999847695, Cos(360) = 1. И так вбиваете всю таблицу, может Вам и не надо все 360 градусов , а только те углы на какие поворачивается плече, а если получается между целыми градусами то есть минуты, то округляйте до целого числа градуса. Так же с sin, tg, ctg и т. д. если они Вам нужны.
Да нет ни у кого проблем. Здесь разговор велся как расчитать движение лап механических тараканов на сервах. Но народ затупил и кинулся в расчеты. Но если бы народ влючил голову и просто сделал точно такую лапу, а лучше таракана но с лапами где вместо серв были переменные резисторы, то задачу решили еще быстрее. Причем еще отработали кучу походок передвижения.
Всем привет! Ребята ну помогите в таком деле - надо средствами ардуино высчитать угол "А" в градусах по имеющимся x и у. Это всё для сервопривода. И вообще очень интересует опыт тригонометрических расчетов .
Косинус - отношение прилежащего катета к гипотенузе. Это Вы получите цифру от 0 до 1 но не градусы, а что бы перевести в градусы нужна таблица перевода в градусы. В ардуино такой библиотеки нет что бы в всяких соотношениях катетов и гепотенуз выдовало сразу градусы. Остается только в ручную набирать таблицу и прикручивать к Вашим расчетам.
sin(A)=x/y; - вычисляем синус угла по гипотенузе и прилежазему катету.
A=arcsin(sin(A)); - переводим синус угла в радианы.
A=(A*180)/Pi; - получаем градусы.
Вся формула выглядит так:
A=(arcsin(x/y)*180)/Pi;
Как заменить арксинус для того чтобы arduino посчитал - я не знаю.
UPD. Эх... если бы мне все эти тригонометрические функции в школе показывали на тех же сервоприводах, уверен что заучил бы их на отлично. А так оно для меня так и осталось абстрактным понятием.
sin(A)=x/y; - вычисляем синус угла по гипотенузе и прилежазему катету.
Для данного рисунка Sin(A)=sqrt(y*y-x*x-y*y)/x
Ибо синусом угла называется отношение противолежащего катета к гипотенузе
Как заменить арксинус для того чтобы arduino посчитал - я не знаю.
Ряд Тейлора ей в зубы
или нагляднее так (из пикиведии):
Для данного рисунка Sin(A)=sqrt(y*y-x*x-y*y)/x
Ибо синусом угла называется отношение противолежащего катета к гипотенузе
Опять я всё напутал. Думал о косинусе, а написал про синус.
A=(arccos(x/y)*180)/Pi;
Sin(A)=sqrt(y*y-x*x-y*y)/x -> y^2-x^2-y^2 =-x^2+y^2-y^2=-x^2 - это как?
Или там должна быть третья сторона?
Если так, то у нас только две :(
Для данного рисунка Sin(A)=sqrt(y*y-x*x-y*y)/x
Ибо синусом угла называется отношение противолежащего катета к гипотенузе
Опять я всё напутал. Думал о косинусе, а написал про синус.
A=(arccos(x/y)*180)/Pi;
Sin(A)=sqrt(y*y-x*x-y*y)/x -> y^2-x^2-y^2 =-x^2+y^2-y^2=-x^2 - это как?
Или там должна быть третья сторона?
Если так, то у нас только две :(
Тогда уж
A=(arccos(y/x)*180)/Pi;
(делим на гипотенузу, а не на катет)
Тогда уж
A=(arccos(y/x)*180)/Pi;
(делим на гипотенузу, а не на катет)
Верно! :)
Sin(A)=sqrt(y*y-x*x-y*y)/x -> y^2-x^2-y^2 =-x^2+y^2-y^2=-x^2 - это как?
Или там должна быть третья сторона?
Если так, то у нас только две :(
))) Спасибо парни. Я знаю тригонометрию. Тогда конкретизирую вопрос, в моем представлении по крайней мере. Так как наши Atmel`ы не дружат с float, то у меня одна мысль - это таблицы. Точнее выбор из промежутков. Может есть какие-то примеры БЫСТРОГО кода выборки из таблицы(массива) интервалов. Может быть кто-то пользовался библиотеками какими-либо для этого. Моё работает медленно и оное громоздко. Вот и ищу что-то оптимальнее моего. Не всегда ж сервы от АЦП гнут. Или там в цикле)))) google & yandex не помогли. Если что пропустил - прошу тыкнуть носом.
))) Спасибо парни. Я знаю тригонометрию. Тогда конкретизирую вопрос, в моем представлении по крайней мере. Так как наши Atmel`ы не дружат с float, то у меня одна мысль - это таблицы. Точнее выбор из промежутков. Может есть какие-то примеры БЫСТРОГО кода выборки из таблицы(массива) интервалов. Может быть кто-то пользовался библиотеками какими-либо для этого. Моё работает медленно и оное громоздко. Вот и ищу что-то оптимальнее моего. Не всегда ж сервы от АЦП гнут. Или там в цикле)))) google & yandex не помогли. Если что пропустил - прошу тыкнуть носом.
Было бы неплохо написать это сразу(т.к. в этом случае я бы не показал свои навыки незнания тригонометрии и исключительной невнимательности :) ).
В чём выражается недружелюбность с float?
:))) тригометрию только вики сейчас и помнит.
Я понял свою ошибку. Начну с начала. Есть лапа из четырех суставов. Мне надо высчитать углы поворота 5 серв. Долго высчитывается всё это. Надо делать отдельно серво-контроллер, ведь есть же ещё другие комманды в потоке.
Пересмотрел огромное количество различных жутей на 2-6-8 и более лап. В каждой по 2-3 сервы. И оно всё довольно быстро двигается. Там же как-то считается.
Можно ссылочку для того чтобы представить что это такое?
http://blog.oscarliang.net/arduino-hexapod-robot/ вот смотрел только-что.
по ссылке лапы проще, меньше серв. пример на картинке и на примере многоногов - чтобы лапа отошла от корпуса на Y=20 см надо найти угол А или В. Длина колена X - известна
Всёравно я не пойму...
МК формирует значение угла и отсылает его серве, которая его понимает и выгибается под заданный угол.
Почему напрямую не брать это значение?
UPD. Я понял что и нужно сформировать эти углы, но всё равно мне не понятна конструкция :)
Про генерацию синуса и не только, может пригодится:
http://we.easyelectronics.ru/MrYuran/avtogeneraciya-koda-ili-uletnye-shablony-v-si.html
http://we.easyelectronics.ru/Soft/generaciya-sinusa.html
http://we.easyelectronics.ru/amaora/esche-po-povodu-generacii-sinusov.html
1 серва пусть будет плечо. 2 серва - локоть. чтобы протянуть руку на 80 см от себя, надо согнуть руку и в плече, и в локте. на определенные градусы в плече и локте. вот мне и нужны эти углы))
смотри что нарыл http://tmm-umk.bmstu.ru/lectures/lect_20.htm
копай в эту сторону
У меня не получались как то арктангенс. Углы треугольника обычно измеряются в градусах (x°). 1 градус равен \( \frac{1}{360} \) длины окружности с центром в точке начала угла. Также используется минута x′, равная \( \frac{1}{60} \) градуса, и секунда x″, равная \( \frac{1}{60} \) минуты. В тригонометрии, однако, используется также радиан. 1 радиан примерно равен 57º17′45″. Длина дуги, которую высекает угол в α радиан, равна αR, где R - радиус окружности.
Грета, твой ответ в этой ветке запоздал на 6 лет
Я так понял у Вас проблема с этой таблицей. Cos(0) = 1, Cos(1) =0,999847695 ........... Cos(359) = 0,999847695, Cos(360) = 1. И так вбиваете всю таблицу, может Вам и не надо все 360 градусов , а только те углы на какие поворачивается плече, а если получается между целыми градусами то есть минуты, то округляйте до целого числа градуса. Так же с sin, tg, ctg и т. д. если они Вам нужны.
Да нет ни у кого проблем. Здесь разговор велся как расчитать движение лап механических тараканов на сервах. Но народ затупил и кинулся в расчеты. Но если бы народ влючил голову и просто сделал точно такую лапу, а лучше таракана но с лапами где вместо серв были переменные резисторы, то задачу решили еще быстрее. Причем еще отработали кучу походок передвижения.
ПС: прошло 7 лет и проект даже не начился ;))
Всем привет! Ребята ну помогите в таком деле - надо средствами ардуино высчитать угол "А" в градусах по имеющимся x и у. Это всё для сервопривода. И вообще очень интересует опыт тригонометрических расчетов .
В кои-то веки соглашусь с Квоном: точно крутить сервы без обратной связи - все равно, что вслепую жонглировать.