Real time android és CAD

 ( moravas | 2013. január 15., kedd - 7:41 )

Sziasztok,

Mivel a C++ áll közel a szívemhezm, így itt indítanám el ezt a forumot, aminek a tartalma nem teljesen csak erről szól, viszont nem tudom, hova írhatnék, ahol találóbb. két dolog iránt érdeklődnék:

Az egyik, hogy létezik-e androidra olyan jellegű realtime kernel patch, mint ami már van Linuxra. Szeretnék ismerkedni az androiddal is, de kellene legalább egy olyan szintű realtime működés, mint amit egy linux tud realtime kernel pach-el.

A másik dolog, hogy jelenleg C++-ben programozok sokat (mellette C#-ot is elég jól ismerem) Qt-val, és az érdekelne, hogy milyen megoldásokat használnak a rendesebb CAD programok vizualizálni az elkészült mounkadarabok összeuillesztését, működését vagy mozgását: framework-ok, számítási módszerek, stb. Most kezdeném a szakdogámat, és egy részét az képezné, hogy 6 szabadságfokú humanoid robotkar mozgását kellene megjeleníteni: azaz a képernyőre kirajzolni a teljes robotkart és annak "alkatrészeit" megmozgatni.

Előre is köszi
Moravas

Szerk:

Köszönöm az ötleteket, utánnajártam, és elég konstruktívnak bizonyolutk, így valamilyen blenderes megoldás mellett tettem le jelenleg a voksomat. Az lenne a kérdésem, hogy tud-e valaki ajánlani olyan blenderes tutorial-t, ami konkrétan valamilyen robotkar, vagy ahhoz hasonló dolog elkészítését mutatja be? Mivel ismertettem, hogy mi a cél, így beláthatóan idő szűkében vagyok, és szeretnék eredményorientáltan dolgozni.
A gépészek álltal használt CAD programokat némi fogalmi szinten ismerem, így pl már kerestem ilyen kényeszereket a blenderben, amivel lehetne két testet egymás felületéhez illeszteni, de nem találtam.

Előre is köszi a segítséget.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Huh,
nem tudom, hogy akad-e itt annyira programozo aki ilyen dolgokban segiteni tud. Jo magam programozok, de beagyazott rendszereket... a robotkar mozgatasig meg ertem :) Szerintem ekte CAD frameworkot nem talalsz (foleg ingyen) amit javasolnek az az opengl. Viszont nem tudom mennyi idod van meg ra, mert az opengl legalabb olyan mint ujra megtanulni a c++ alapokat... meg mint tudjuk sose lehet azt mondani, hogy valaki megtanulta a c++ -t :D Viszont opengl-vel csoda dolgokat lehet vizualizalni... :) Persze kerdes, hogy milyen szintre akarod emelni a dolgot, ha "kocka" abrak is jok, akkor csak qt-ben keresel egy paint objectet (nem tudom mi a neve qt-ben), amire lehet rajzolgatni, es megcsinalod az osszes alkatreszt az adott elemekbol, mint kor, teglalap ...stb. De mondjuk mind ket megoldasnal arra kell torekedned, hogy egy - egy alkatresz egy - egy osztaly legyen, aztan a tobbi mar jonni fog idovel :) Nagy faba vagtad azt a fejszet :)

Azt nem tudom, hogy az Android-nak van-e real time képessége. Szerintem nézz szét costum ram-ok között, biztosan csinált már valaki ilyet.

Gondolom a robotkart 3D-ben kellene megjeleníteni. Ha nem elég egy "videó/szimuláció" hanem interaktív kell legyen, akkor nincs más lehetőség, mint az OpenGl (legalább is én nem ismerek másikat).

Ha elég az egyszerű megjelenítés akkor vannak 3D programok (pl. Blender) erre a feladatra. De ha nem vagy benne jártas, akkor ez se egyszerűbb, mint az OpenGl.
---
arch linux user

Android RT kernel: Azért kell RT kernel, mert ezzel fogod irányítani a robotkart? Milyen interfészen keresztül fog menni az irányítás? Az USB-n például nem nagyon lehet RT dolgot csinálni (IMHO).

3d vizualizáció: én is Blendert javasolnék. Én nem értek hozzá, de a csapatunkból valaki megcsinálta egy hasonló robotnak a 3D modelljét, és össze is kötöttük, hogy úgy mozogjon, ahogy a valódi. Tehát nem lehetetlen. Jól is nézett ki :-).

Az OpenGL egy nagyon alacsony szintű 3D rajzoló API, csak akkor érdemes foglalkozni vele, ha konkrétan érdekel a 3d grafika, vagy varázsolni akarsz vele.

Ahogy fentebb is írtam, csak akkor foglalkoznék OpenGl-el ha az interaktivitás fontos. De akkor is kellenek 3D-objektumok, amiket én elkészíttetnék valakivel (ez megint lehet Blender) magát az objektum mozgatást pedig OpenGl-ben csinálnám. De szerintem ez már egy kicsit túlmutat egy diploma keretein, főleg ha szenzor adatokkal is kell dolgozni. (Cáfoljatok meg ha tévednék.)

iPhonról RC-jeladóval már láttam robotot irányítani, bár ott visszajelzés nem volt.
---
arch linux user

Persze, egyetértünk OpenGL témakörben, csak azért akartam én is leírni, mert a csapatunkkal pont csináltunk robot vezérlést Blenderrel összekötve.

A Blender ha jól emlékszem Python alapon szkriptelhető is, és külső programból lehet real-time vezérelni a megjelenítés paramétereit. Vagy fordítva, egérrel mozgatni az objektumokat, és a paraméterekkel real-time mozgatni robotot. Ezért mondom, hogy még interaktivitáshoz is használható a Blender.

Ezzel együtt mivel én programozó vagyok, OpenGL-hez értek, Blenderhez meg nem. Ezért valószínű, hogy egyszemélyes projektben Java+OpenGL kombóval esnék neki, de másnak nem feltétlenül ez a legoptimálisabb :-).

Ezt mondjuk nem tudtam, hogy Blender ilyet is tud. Azt hittem azzal csak modellezni lehet, de nem is vagyok nagy szakértő benne. Nekem gyorsabb ha leprogramozom, meg persze komoly munkáknál van grafikus aki megcsinálja.
---
arch linux user

Az USB lehetove teszi az RT kommunikaciot (pl.: RT USB host stack). Az mar mas kerdes, hogy van e Linux -ra RT USB stack. Ennek kapasbol alapfeltetele, hogy a kernel maga legyen RT.

Nem ertem, ez ket kerdes, vagy egy? :) Azaz androidra akarsz egy alkalmazast, ami vezerel valamit, meg mellette ki is rajzolja azt ami tortenik? Ha igen, akkor milyen hw-en futna ez? (legalabbis gondolom, hogy nem telefonrol akarsz barmit rovid valaszidokkel [aka: real-time] vezerleni, hanem valami custom hw-rol).

Csak kotozkodes keppen:
a Real Time nem rovid valaszidot jelent, hanem pontosan meghatarozhatot.

Soft vagy hard real-time...

Hard = ha a határidő lejárta után érkezik a válasz, akkor az rendszerhiba

Soft = a határidő lejárta után a válasz hasznossága az idő függvényében degradálódik, pl. A/V lejátszásnál

Igazábol az lenne az elképezlés, hogy egy cubieboard nevű hw-re tennék fel androidot (ha tud realtime működést, hogy közben androidul is lehessen tanulni. Ha nem tud realtime dolgozni, akkor majd később tanulunk androidot.)
A board, mint vezérlőegység lenne egy kvázi robotkarnak a vezérlőközpontja. Mivel villamosmérnök vagyok elsősorban, így tudom, mit jelent a hw fejlesztés és volt is benne részem(sok sok sok pénzt), amit szeretnék elkerülni. A board készen van, fel kell programozni.
Az egyes csuklóknak kiadott vezérlőjeleket visszacsatolnám vagy a boardon futtatva egy másik process-el vagy egy másik board-al. Ezeket a vezérlőjeleket dolgozná fel a PC és jelenítené meg: pl OpenGL-ben. Ez szimpi, mivel ha jól tudom, akkor van hozzá Qt támogatás.
Célszerűen csinálok majd valami másik alkalmazást, amin keresztül a "robotkar" paraméterezhető...
A kvázi csuklókhoz vezető csatlakozást valamilyen CAN busz jellegű megoldásra biztam volna, de ez nincs, van helyette SPI, meg akkor valamilyen átalakító...

Nagyjából kifejtve ez lenne a célalkalmazás. Persze vannak még részletek, amik nem kidolgozottak, de...

Üdv:
Moravas

Arra vigyázz, hogy ha ez diplomamunka lenne, akkor ne akarj túl nagyot markolni, mert sosem fogod befejezni. Próbáld meg a feladatot szétszedni legalább 2-3 részre,
hogy abból egy rész is önállóan megállja a helyét, mert egyedül robot programozás + android + rt rendszer + opengl + modellezés + kutyafüle iszonyat nagy meló.
Inkább legyen kevesebb, de reálisan megvalósítható, ha jól emlékszem, kb. fél év volt egy diplomamunkára, szóval csak ésszel. Sok sikert.

Még egy dolog: próbálj meg minél magasabb szintű nyelven programozni, lényegesen gyorsabban fogsz haladni. Mint írtad, c#-ban tudsz programozni, szóval ha van
lehetőséged, használd inkább azt.

Es ugy emlekszem, letezik OpenGL.Net.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal

Attól, hogy .Net az OpenGL még mindig nagyon low-level...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

RT részhez nem tudok hozzászólni, de a robotkarhoz használhatsz Qt-t QML3D-vel, ami ilyeneket tud viszonylag könnyen: http://www.youtube.com/watch?v=g_cf-7uoK5o

De magát a modellt úgyis valami 3D szerkesztőben fogod létrehozni, és ha az blender, akkor már maradhatsz ott: http://www.youtube.com/watch?v=mHZBFZSklqk
A Blendernek van egy game engine része ami pythonból (is?) vezérelhető, abban szoktak ilyeneket összedobni...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

huh, ertem a lelkesedest az android irant, de egy robot karnal, en minnel egyszerubb gyorsabb megoldast keresnek, az android tipikusan enduser-re van optimalizalva millijo csillijo gui elemmel... en tuti kihagynam... erre igazabol valami izmosabb beagyazott rendszert tennek... de persze izlesek es pofonok.
Viszont ha bitang stabil es egyszeru vezerlot csinalsz marad idod a csini guira... Persze ez csak egy otlet, de egy gyarban ahol minden perc leallas milliokat jelenthet, nem biztos, hogy az android a jo valasztas... mivel indokolnad a diploma munkaban ? A megakartam tanulni az androidot is nem pont eleg indok egy diploma vedesnel... szerintem.

Valójában azért teljesen felesleges androidot használni, mert csak egy csomó időt elvesz a lényeges munkából a hackelés (androidos széthegesztett linux kernelre RT patch-et
rakni.. hát, nem tűnik egy túl jó ötletnek) amikor simán felrakhatna egy RT linuxot, vagy más RTOS-t, azt kalap-kabát.

A diploma védés miatt izgulnék a legkevesebbet, amikor én védtem, akkor benn volt a tanszékvezető, a témavezetőm, meg egy harmadik fickó, akinek fogalma nem volt az egész témáról, talán még a kérdéseket is megkaptam, amire válaszolni kellett, szóval ez legyen a legkisebb gond...

Tudom milyen a vedes manapsag, az enyem se volt komoly, de mondjuk "bosszantott" is rendesen, mert becsulettel bele raktam a projectembe 1 evet, oszt olyan hulye kerdesek voltak, hogy miert hasznaltam ezt meg azt az alkalmazast... persze nem banom, hogy "nem szivattak meg" de kicsit csalodas volt... :P Velem egyutt 10-en voltunk aznap 9 / 5 es egy negyes...

+1 arra, hogy felesleges az Android.

Sőt még azt is megkockáztatom, hogy a Cubieboard is az. Tapasztalatból mondom (beagleboard.org -gal játszottunk), hogy ezeken tipikusan elmegy néhány nap (sőt akár hét) azzal, hogy egyáltalán összelövöd a Linuxot meg a hardvert. Mi azt hittük, hogy valami rettenetesen szofisztikált dolgot teszünk a beagleboardra, és nagyon kell a robotra. Aztán a végén nem működött rendesen, és csak a súlyt növelte :-). Egyszerűbb megoldás lett végül, ami elment egy mikrovezérlőn.

Az ilyen ARM alapú cuccokon ha a hardverközelibb kimeneteket akarod használni, akkor szintillesztőt is kell általában fabrikálnod az ARM lap és a mikrovezérlő közé. Ez HW fejlesztés ugye. (A Beagleboardon legalábbis a processzor lábai közvetlenül vannak kivezetve. 1.5V-os, max 0,7 mA terhelhetőségű lábak ezek halvány emlékeim szerint.)

Robotkar izületeinek a mozgatásához simán elég valami egyszerű mikrokontroller (Arduino?). Ha több kell belőle, közéjük lehet serial busz alapú kommunikációt tenni (sokkal egyszerűbb programozi mint bármi mást).

Milyen gyors lesz a robotkar mozgása? Milyen gyorsan kell inputot visszacsatolni tudni? Mert valószínű, hogy a vezérlő PC-re pedig nem kell valódi real-time os. Elegendő, ha van egy közös óra a mikrokontrollerek között szinkronizálva. A parancsokat pedig kb tizedmásodperccel előre kell küldeni úgy, hogy időbélyeg van rajta amikor végre kell hajtani. Így a vezérlő nem kell, hogy túl szigorú időzítési követelményeket tudjon, a kar csuklópontjai mégis egyszerre fognak mozdulni.

Amúgy mi mozgatja a robotkar csuklópontjait? Valami hobbi szervónál jobb megoldás érdekelne :-).

Hello,

nem tom, mennyire olvastad el az elejétől kezdve, de nem lesz robotkar fizikailag. Azért lesz egy szimuláció PC-n OpenGL, Blender, vagy más, az itt felvetett hasznos alkalmazások közül, hogy ne kelljen hw-t fejleszteni. Ezért lesz vmi monitorozó visszacsatolás is, ami fogadja a jeleke,t ami ugye egy motorvezérlőnek menne, ha lenne ilyen, majd továbbítja a PC-nek.
Mára odafejlődött a tervezés, hogy felírom majd a fogadó == csuklókban lévő 3 vagy 4 körös szabályozás egyenleteit, és azt a fogadó process számolja ki, és csak úgy adja tovább. Ezzel elvileg elérem azt is, hogy a mozgás is közelíteni fog egy valóságos csuklódinamikához...

Üdv: moravas

A cubieboard-ra lehet nem Androidos Linuxot is rakni.
Sima ARM-os (RT) Linux kernellel egyszerűbb lehet az élet. Cserébe nem tudod az Androidos alkalmazásokat futtatni, de szerintem az nem fog neked kelleni.

Annyira nem vagyok otthon Blenderben, CAD-ban meg pláne, de szerintem ilyesmit Blenderben csak csontozással tudsz elérni.

Illetve van valami CAD-os blender fork, de az a nagy 2.5-ös ráncfelvarrás előtti, így lehet, hogy kényelmetlenebb...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Ha saját programon belül akarod megcsinálni: (nem használtam ezeket, csak nézegettem)
- VTK bár ez lehet kicsit ágyúval verébre
- OSG ennek van ilyesmi mintaprogramja is osgrobot néven. (Kép.)
- MRPT mintha ez is tudott volna hasonlót, de most nem találok példát

Írtad, hogy Qt-t használsz, ha jól tudom az 5.0-ásnak nem része, de egyszerűen letölthető hozzá a Qt3D (ezt sem használtam).

Külső programra esetleg a V-REP?

A Blender szerintem nem erre való, az inkább egy rajzoló program, mint CAD. Ha sikerül összehozni vele, nagyon kíváncsi lennék, a mikéntjére.

Subscribo.

Fuszenecker_Róbert