Автор Тема: Хексапод Тори  (Прочетена 63160 пъти)

westony

  • Заклет Роботостроител
  • *****
  • Публикации: 237
    • Профил
    • http://westony.blogspot.com
Хексапод Тори
« Отговор #75 -: Март 31, 2011, 12:06:49 am »
Ами има нещо вярно в това, но наистина ще ме изнерви познавам се много добре и наистина ще ме изнерви... :D
Технически Университет - София , ФА, III курс.
Мартин, 21 години
   Ако е лесно няма да е интересно!

Един не по-различен блог
Google+

Dimitar Kurtev

  • Вече знае какво е робот!
  • *****
  • Публикации: 62
    • Профил
Хексапод Тори
« Отговор #76 -: Май 06, 2011, 05:13:28 pm »
Здравейте. Отдавна не съм писал, но през това време чаках нови серво мотори и около 1 месец разучавах инверсна кинематика, използваща хомогенни матрици за изчисление на ъглите. Отне ми доста време, за да разбера как се борави с тези матрици и после да изчисля ъглите, но в крайна сметка резултатът е налице- много по стабилна работа без проблеми от тригонометричните функции както и много по- лесна промяна на позицията на краката и тялото. Сервотата са доста по-здрави-махнах ластиците, но не са толкова точни. Както и да е ето клип- http://www.youtube.com/watch?v=yFbeZ9rzFeg

emil74

  • Зомбиран Роботостроител
  • *****
  • Публикации: 227
    • Профил
    • http://www.maystorio.com
Хексапод Тори
« Отговор #77 -: Май 06, 2011, 06:09:14 pm »
Стабилно и контролирано движение! Отлично, според мен. Няма ли начин да махнеш тези кабели? Загрозяват дизайна и впечатлението от робота, като цяло.

Dimitar Kurtev

  • Вече знае какво е робот!
  • *****
  • Публикации: 62
    • Профил
Хексапод Тори
« Отговор #78 -: Май 06, 2011, 06:13:48 pm »
Трябва да купя зарядно и акумулаторче и ще ги махна. :)

sv_shady

  • Administrator
  • *****
  • Публикации: 636
    • Профил
Хексапод Тори
« Отговор #79 -: Май 06, 2011, 06:29:53 pm »
Доста добре се държи :) Иначе най-добре ще е да сложиш една литиево полимерна батерия, а не обикновен оловен акумулатор.
Imagination is the only limit.......

Светлин Пенков
София / Рединг, Великобритания

nmanchovski

  • Вече знае какво е робот!
  • *****
  • Публикации: 44
    • Профил
Хексапод Тори
« Отговор #80 -: Юли 02, 2011, 06:22:05 pm »
Здравей Димитър,

Запалих се да построя и аз един Хексапод (може би като основа на моят робот), но все още чета за кинематичната инверсия и трансформации. Мислиш ли да споделиш тази част от кода или поне литературата която си използвал?

Благодаря,
Николай.
Николай Манчовски, София

Dimitar Kurtev

  • Вече знае какво е робот!
  • *****
  • Публикации: 62
    • Профил
Хексапод Тори
« Отговор #81 -: Юли 02, 2011, 07:21:40 pm »
Здрасти Николай,

Да ти давам кода е безсмислено тъй като представлява 10-15 реда изчисления, които както ги гледам в момента са ми тъмна Индия. Но все пак за да видиш резултата от смятанията ето:
public void TransformCoord(Leg leg,out double XTrans,out double YTrans,out double ZTrans)
        {
            double SinX = Math.Sin(m_currentPitchAngle);
            double SinY = Math.Sin(m_currentTiltAngle);
            double SinZ = Math.Sin(leg.Rotate?m_currentRotateAngle:0);
            double SinJ = Math.Sin(leg.MAngleFromBodyCenter);
            double CosX = Math.Cos(m_currentPitchAngle);
            double CosY = Math.Cos(m_currentTiltAngle);
            double CosZ = Math.Cos(leg.Rotate?m_currentRotateAngle:0);
            double CosJ = Math.Cos(leg.MAngleFromBodyCenter);
            int offx = leg.Offset ? m_currentXoffset.Value : 0;
            int offy = leg.Offset ? m_currentYoffset.Value : 0;
            int offz = m_currentZoffset.Value;

            double a = CosY * SinJ * SinX - CosJ * SinY;
            double a1 = SinJ * (CosX * CosZ + CosZ * SinX * SinY) + CosJ * CosY * SinZ;
            double a2 = CosJ * CosY * CosZ + SinJ * (CosZ * SinX * SinY - CosX * SinZ);

            double b = CosJ * CosY * SinX + SinJ * SinY;
            double b1 = CosJ * (CosX * CosZ + CosZ * SinX * SinY) - CosY * SinJ * SinZ;
            double b2 = -CosY * CosZ * SinJ + CosJ * (CosZ * SinX * SinY - CosX * SinZ);

            double c = offx + leg.MDecX1 * CosY * CosZ + leg.MDecY1 * (CosZ * SinX * SinY - CosX * SinZ);
            double c1 = -offz - leg.MDecY1 * CosY * SinX + leg.MDecX1 * SinY;
            double c2 = offy + leg.MDecY1 * (CosX * CosZ + CosZ * SinX * SinY) + leg.MDecX1 * CosY * SinZ;
            double c3 = -CosZ * SinX + CosX * CosZ * SinY;
            double c4 = CosX * CosZ * SinY + SinX * SinZ;

            XTrans = a * (leg.CurrentZ + c1) + a1 * (leg.CurrentY - c2) + a2 * (leg.CurrentX - c);
            YTrans = b * (leg.CurrentZ + c1) + b1 * (leg.CurrentY - c2) + b2 * (leg.CurrentX - c);
            ZTrans = CosX * CosY * (leg.CurrentZ + c1) + c3 * (leg.CurrentY - c2) + c4 * (leg.CurrentX - c);
        }

        public void CalculateAngles()
        {
            double X;
            double Y;
            double Z;
            double K;
           
            //transform body coordinates to leg coordinates
            BodyMovement.Instance().TransformCoord(mCurrentLeg,out X,out Y,out Z);
           
            //get coxa angle
            Leg.CoxaAngle = Atan2(Y, X);
            K = Leg.MCoxaLenght - X * Cos(Leg.CoxaAngle) - Y * Sin(Leg.CoxaAngle);

            //get tibia angle
            double CosTibia = (Math.Pow(K,2) +Math.Pow(Z,2) - Math.Pow(Leg.MFemurLenght,2) -Math.Pow(Leg.MTibiaLenght,2))/(2*Leg.MFemurLenght*Leg.MTibiaLenght);
            Leg.TibiaAngle = Atan2(Sqrt(1 - Math.Pow(CosTibia, 2)), CosTibia);

            //get femur angle
            double f1 = Leg.MFemurLenght + Leg.MTibiaLenght * Cos(Leg.TibiaAngle);
            double f2 = -Leg.MTibiaLenght * Sin(Leg.TibiaAngle);
            Leg.FemurAngle = Atan2(f1,f2) - Atan2(Sqrt(Math.Pow(f1, 2) + Math.Pow(f2, 2) - Math.Pow(Z, 2)),Z);
        }


Това са двете най- важни функции за изчисленията: Първата трансформира координатите на върха на крака зададени първоначално с точка от координатната система на тялото(с начална точка центъра на тялото) в точка от координатната система на дадения крак(с начална точка лежаща на оста на кокса сервото). Втората функция спрямо тази точка изчислява ъглите на крака.

Наистина е трудно да се намери добро обяснение за изчисляването на трансформациите и от там ъглите. За мен най- полезни бяха следните неща:

http://www.youtube.com/watch?v=0yD3uBshJB0 - това е лекция от станфордския университет, гледах ги до към part 6 - по нататък почва да се говори за ускорения и тн., което мен не ме интересуваше в случая. Също така на сайта им има лекциите и упражненията от този курс.

http://www.intechopen.com/source/pdfs/379/InTech-Robot_kinematics_forward_and_inverse_kinematics.pdf - след като изгледах по няколко пъти лекциите това най- много ми помогна тъй като има няколко реални примера.

Като стъпки какво трябва да се направи, за да изразиш инверсната кинематика на робота си:
1) описваш кракът на робота с помощта на D-H(Denavit-Hartenberg) параметри
2) с тяхна помощ намираш трансформиращите матрици
3) извършваш различни трансформации, за да можеш да изразиш ъглите на връзките(сервотата).

Ако си по- наясно с матриците и трансформациите мисля, че ще ти по- лесно. Аз никога не съм си обяснявал за какво по дяволите са ми тези матрици въпреки бакалавърската ми степен, но ето че се наложи и наистина става много елегантно :)

Почети и гледай лекциите; ако ти е необходима помощ пиши тук и ще се опитам да помогна.

ПС. Другият вариант(първоначалната ми имплементация) е чисто геометрично решение, но това решение ще ти създаде много проблеми в бъдеще заради грешки в изчисленията и тригонометрични граници.

Dimitar Kurtev

  • Вече знае какво е робот!
  • *****
  • Публикации: 62
    • Профил
Хексапод Тори
« Отговор #82 -: Юли 02, 2011, 07:28:31 pm »
И .... айде ... правете такива хлебарки и други подобни и да си спретнем Mech Warfere като в Щатите и Япония.... да се постреляме малко :) http://www.youtube.com/watch?v=rIfK5JFTftc

nmanchovski

  • Вече знае какво е робот!
  • *****
  • Публикации: 44
    • Профил
Хексапод Тори
« Отговор #83 -: Юли 02, 2011, 07:53:54 pm »
Мерси много. Дори това ще ми е от полза. И аз намерих няколко теоретични пдф-а и Стандродските лекции ама и аз не мислех, че някога ще ми потрябват матрици и е трудно :).
Разглеждам и вероятността да опитам с някой генетичен алгоритъм като functional approximation + някоя друга за дообработка, но и за това още чета.
Николай Манчовски, София

westony

  • Заклет Роботостроител
  • *****
  • Публикации: 237
    • Профил
    • http://westony.blogspot.com
Хексапод Тори
« Отговор #84 -: Юли 02, 2011, 08:10:00 pm »
Цитат на: "nmanchovski"
Мерси много. Дори това ще ми е от полза. И аз намерих няколко теоретични пдф-а и Стандродските лекции ама и аз не мислех, че някога ще ми потрябват матрици и е трудно :).
Разглеждам и вероятността да опитам с някой генетичен алгоритъм като functional approximation + някоя друга за дообработка, но и за това още чета.


Ако намериш инфо за генетичните алгоритми постни тук някой друг линк :)
Технически Университет - София , ФА, III курс.
Мартин, 21 години
   Ако е лесно няма да е интересно!

Един не по-различен блог
Google+

nmanchovski

  • Вече знае какво е робот!
  • *****
  • Публикации: 44
    • Профил
Хексапод Тори
« Отговор #85 -: Юли 02, 2011, 08:15:10 pm »
Ето нещо което намерих днес за основа...
http://freespace.virgin.net/hugo.elias/models/m_ik2.htm
Николай Манчовски, София

Dimitar Kurtev

  • Вече знае какво е робот!
  • *****
  • Публикации: 62
    • Профил
Хексапод Тори
« Отговор #86 -: Юли 05, 2011, 07:34:51 pm »
Искахте батерия .. ето ви батерия ;) (LiPo 3500mAh) http://www.youtube.com/watch?v=1IYAoP8BsaA

Dimitar Kurtev

  • Вече знае какво е робот!
  • *****
  • Публикации: 62
    • Профил
Хексапод Тори
« Отговор #87 -: Октомври 02, 2011, 11:27:48 am »
Идва време за дипломната работа за магистратурата. Смятам да upgrade-на Тори по този повод. Ето някои от нещата, които възнамерявам да направя:
-сензори за допир на краката - странични и на "стъпалата"
-имплементиране на инверсната кинематика върху самият робот (не на лаптопа както е в момента), използвайки Fez Mini.
-управление на робота от всякакви устройства с Android OS
-пренос на изображение по bluetooth-a в реално време (размерът на изображението ще е минимален) с помощта на LinkSprite JPEG Color Camera TTL Interface

За сега оправям механичната част от робота - ето идеята ми за странични сензори на краката : http://www.youtube.com/watch?v=clIbvYFrl1g

Някакви предложения как да направя сензор за допир на стъпалата?

westony

  • Заклет Роботостроител
  • *****
  • Публикации: 237
    • Профил
    • http://westony.blogspot.com
Хексапод Тори
« Отговор #88 -: Октомври 04, 2011, 12:14:38 am »
Имаше едно време едни pressure button/натискаш го с два пръста и то прави връзката с проводниците/ , колкото по-силно го натискаш толкова по-добра връзка правиш ... съответно можеш да го използваш но точно не се сещам как се казваше точно... :(

Друго като идея ми идва само чрез код.... но това ще стане доста по-сложно защото ще трябва да изследваш как местенето на "крачето" влияе на основата... ако започва да я повдига значи се е престарал и трябва да върне ако пък не влияе значи не е близо до желаната цел...
Както имаш уравнения за намирането на точното местоположение на крака, така можеш и да изследваш как това местоположение влияе на основата и другите крака от математическа гледна точка... ако пречи следва това и това, ако не дава никакъв резултат прави това и това ... и тн :))) С програмиране има мн начини по които можеш да го направиш, щото има голямо поле на изява и на идея :) Докато ако трябва да го направиш с някаква механика хем ще ти излезе по-скъпо хем пък и трябва да го измислиш...

Успех и като имаш резултати пиши :)
Технически Университет - София , ФА, III курс.
Мартин, 21 години
   Ако е лесно няма да е интересно!

Един не по-различен блог
Google+

westony

  • Заклет Роботостроител
  • *****
  • Публикации: 237
    • Профил
    • http://westony.blogspot.com
Хексапод Тори
« Отговор #89 -: Ноември 16, 2011, 11:24:00 pm »
Намерих някое друго обяснение, за уравненията, но си трябват знания по математика, механика и мехатроника:

https://docs.google.com/open?id=0B3hDTknDHqyGYTRlYjhiMTgtYjA0YS00ZDE2LWI1ZmEtZDVkNGM5OWFlYjlm

Още го разгадавам целия, че има някои неясни нещица...
Технически Университет - София , ФА, III курс.
Мартин, 21 години
   Ако е лесно няма да е интересно!

Един не по-различен блог
Google+