2013. október 5., szombat

Simulink Embedded coder C/C++ code generation for STM32F4-Discovery

In this tutorial I'll describe how to generate code for an embedded ARM processor.

Our goal is:

Generate C code and call the simulink function from the main software.
I'm using Matlab 2013a x64 and Eclipse Juno, both in Windows 7 x64 environment.
My system is not modified in any major way.

1) Creating the Simulink model

This should be easy for you, if you are already trying to use the automated C/C++ coder. Generate whatever you want. This is my very simple system, a state machine:
2) Configuring the model

Open Model Configuration Parameters (Ctrl+E)
Your model must be (I'm not sure about this, but creating variable-step and continuously solved simulink models is just one more stick in your ass) discrete, with a fixed step solver.
There is at least a million ways to generate C code from simulink, this is I've used:
 In the "Hardware Implementation" submenu change "Device Vendor" to "ARM Compatible" and the "Device type" to "ARM Cortex".
In the "Code Generation" submenu change the "System target file" to ert.tlc (This will invoke the embedded coder).
In the "Report" sub-submenu you shoult tick "Create code generation report" because that's always good, but it's not necessary.
In the "Interface" sub-submenu change the "Code Rerplacement Library" to GCC ARM Cortex-M3.

3) Generate the code

Right click on the subsystem you want to build. C/C++ code --> Build Subsystem
Be careful to generate only the controller, not the whole model. Remember, you only need the code for the subsystem that controls the environment you've simulated in MATLAB.
4) Create the Eclipse console project.

Create an empty ARM Cross Traget Application project with Sourcery code compiler (How to do this? I'll do a tutorial on this later, in the meantime google it or learn to speak Hungarian and read it here).
Add a folder where you'll put the source files. Copy and paste the files generated by Simulink here. Build. Be happy.

5) Flash the built system to your STM32F4-Discovery card.

It doesn't work for me yet, but the other 4 steps are confirmed as working. Of course you'll have to add a few lines to the ert_main.c (don't change anything in the rest of them).

2013. október 1., kedd

STM32F4-Discovery

Ahhoz képest, hogy két héttel ezelőtt azon izgultam, amikor jön már meg a BeagleBone, máris van egy másik fejlesztőkitem is, melyet a RobonAUT-hoz kaptunk, az STM32F4-Discovery lapka.

Valamint megkaptuk a Desert truggynkat is, ezt most nem én hoztam haza, így csak ilyen képet tudok csatolni:

Egy Brushless motor hajtja a hátsó kerekeket, a felfüggesztések nagyon igényesnek tűnnek. Azt a tippet kaptuk, hogy iktassuk ki őket, de fájna a szívem ha ezt tennénk.

2013. szeptember 29., vasárnap

Hyperion

Elkezdtem olvasni a Hyperiont, amit Szárnyó vett Cuppa kishíján lejáró könyvutalványaiból.
Nem volt rossz döntés erre a könyvre bízni az Ábrahámhegyig tartó út unalmának elûzését, A megmentõ c. Frei Tamás könyv után üdítõ, hogy értelmes karakterkidolgozásokkal találkozok, akikrõl elhiszem, hogy valóban létezhetnek.

Sajnos A megmentõben az egyetlen szereplõ akivel azonosulni tudtam az a Zarko nevû félig orosz, félig szerb bérgyilkos-állat volt, de zsörtölõdõ-bosszankodó tökéletlen személyisége viszont mégis szerethetõvé tette. Vagy csak én is beteg vagyok kicsit.

2013. szeptember 24., kedd

Building BeagleBone Black Cross compiler environment. UPDATED TOOLCHAIN LINKS


Ok, I'll write this post in English, so it might be helpful to someone else having the same problems.
So what I'm trying to do here is to use Eclipse in Ubuntu to develop C/C++ software for my BeagleBone Black. The goal is to have Eclipse to Cross Compile and upload the software, and then debug remotely, from Eclipse.
You might want to ask, why did you make another tutorial, there are loads of them on the internet. Well, because this works. I've followed 4(!) separate tutorials, but since I'm a linux-noob, something always went wrong.
Michael Leonard has a fairly well written article about building the cross compiler environment, but it has several errors. The end result is a "Segmentation fault" error. And that's that.
Also, I have discovered the post of Garagelab about building the environment, but nothing about the remote execution. This one works though, but not quite as I wanted. After following the steps carefully I ended up giving over the ownership of my "Downloads" folder to the root. Don't ask how, I'm a linux noob, remember?
My good news is this though: If you are a noob as well, but you follow what I write here, you'll see that reassuring "Hello Beagle" (or whatever makes you happy) line on the bottom of your virtual console.
Anyone reading this, please feel free to comment below.
So let's dig into it!

1)

First step is to install Eclipse. Some tutorial-writers skip certain steps, because they seem to be obvious, but that causes a lot of problems to the students sometimes.
So install Eclipse C/C++ edition using the Ubuntu software manager. It should be very simple.
sudo apt-get install eclipse eclipse-cdt g++ gcc
This will also make sure thet our system has c/c++ compiler ready.
So now we can develop C/C++ applications for our desktop system.

UPDATE:
For whatever mysterious reason the Angstrom Distribution has deleted the toolchains from its website.
It can still be accessed through this link:
http://web.archive.org/web/20130823131954/http://www.angstrom-distribution.org/toolchains/

Moreover, I have downloaded the whole bunch and stored it in multiple cloud services, so it's always available.
I published the downloaded files here:
 

2)

Next, you need to download the proper cross-compilers. VERY IMPORTANT! I don't know, whether I had segmentation fault errors because of my 64bit OS or not, but download the proper package from here: http://www.angstrom-distribution.org/toolchains/For me, angstrom-2011.03-x86_64-linux-armv7a-linux-gnueabi-toolchain-qte-4.6.3.tar.bz2 worked fine. x86_64 because of my OS, armv7a because the Cortex M8 in the BeagleBone Black is ARMv7-A chip.After you have downloaded it, don't extract it right there for god's sake, because it contains root-owned directories. Instead, create a directory named "angstrom" and open the package with your Archive manager. You need to extract the /./usr/local/angstrom/arm folder wherever you want, then copy it to the angstrom folder you have just created.



3)

Start eclipse. Install (Help->Install new software) Remote System Explorer (select indigo update site, then search for remote, then select Remote System Explorer End-User Runtime)



4)

Good, now create a C or C++ project. I had problems with C++, but now I think it would work as well. But I'll show the C++ version here, because the C version works already, and I wonder if this will as well or not.So File->New->C++ project. Select Hello world project, then just accept and ignore everything else, we'll change them later.



5) Configure cross compiler environment:

Right click on your project in the Project explorer, then select properties. C/C++ Build -> Settings.Here we need to specify the compilers. Remember where you've copied the Angstrom compilers? Now is the time to find them. Locate the angstrom folder, and then replace/add the following (don't change anything else):



CrossGCC compiler: /home/fodi/Documents/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc
Includes: /home/fodi/Documents/angstrom/arm/include
CrossG++ compiler: /home/fodi/Documents/angstrom/arm/bin/arm-angstrom-linux-gnueabi-g++
Includes: /home/fodi/Documents/angstrom/arm/include
CrossG++ Linker: /home/fodi/Documents/angstrom/arm/bin/arm-angstrom-linux-gnueabi-g++
Libraries -> Library search path panel: /home/fodi/Documents/angstrom/arm/lib
CrossGCC Assembler: /home/fodi/Documents/angstrom/arm/bin/arm-angstrom-linux-gnueabi-as
Apply and close. At this point you should be able to build the project without errors:

6) Set up remote connection:Open your remote systems explorer (Window -> show view -> other... -> Remote Systems).



Right click in that window, New->Connection. Select Linux, then Next.



Set the Host to the address of your Beaglebone Black (192.168.7.2 for everyone)Give your connection a name -> NEXT -> select ssh.files -> NEXT -> select processes.shell.linux -> NEXT -> ssh.shells -> NEXT -> ssh.terminals -> Finish.



Now right click on your connection and select "connect". Log in as root.



7) Executing remotely:

Ok, we're almost there. Select the connection you have just created.Don't change the C/C++ Application part, it should say Debug/Whateverproject on your side, leave it like that. However, fill out the Remote Absolute File Path like I have, and the Commands to execute before application editbox as well. This former is required to give execution rights to your program. Now hit run and it should work.



8) Debugging

If you have any problems, you should refer to the other tutorial I have linked. I made this work based on those, so all the information is there, if I could do it you can as well.

Have fun!

2013. szeptember 23., hétfő

My New Beagle

Tegnap este végre a kezeim közé kaparinthattam a rendelt BeagleBone Black-et. Sürgősen ki kell próbálni, hogy működik-e HDMI-ről, mert ez egy ismert probléma, de eddig megfelelőnek tűnik.


A fejlesztési ciklus reményeim szerint ma délutánra összeáll a következő menetrend szerint:

Eclipse CrossCompile (CC) ===> BeagleBone Black (BBB) ütemező keretrendszer (Shell) remote debug lehetőségekkel.
MATLAB ===> ARM generált C kód (RobonAUT-hoz)
CPython ===> BBB - - - > HLI (BMESHIP)
Shell - - - > CMATLAB / CPython

Ezt kellene összelőni ma délután fél 4-ig, hogy még oda is érjek a RobonAUT konzultációra...

Szerencsére találtam egy értelmes leírást, ami alapján egész jól lehet haladni:
http://www.michaelhleonard.com/cross-compile-for-beaglebone-black/

2013. szeptember 4., szerda

Félévkezdés

Na, kibuliztam magam augusztusban, szóval akár fel is lehet pörgetni az eseményeket:

A tervezett témakiírásom Önlab 2-re a következő:

"Autonóm felszíni oceanográf fejlesztése (II):
A tengeri mérések elvégzése általában idő és költségigényes feladat, pedig nagy hatással lehetnek a kutatás térségére. A feladat egy autonóm GPS vezérlésű felszíni kutatóhajó tervezése és építése, mely előre kijelölt térségben képes önállóan navigálni és méréseket végezni.
Féléves feladatok:
A hajó alacsony szintű vezérlésének implementálása (motorvezérlés, kommunikáció, MIMO irány és sebességszabályozás). A hajó dinamikus modelljének meghatározása, hajótest elkészítése. Elektronika elkészítése, működés tesztelése. A rendszer kombinálása az előző féléves eredményekkel (pályatervezés, navigáció). Vitorlázó-üzem energetikai és megvalósíthatósági vizsgálata, széltől függő pályatervezés, vezérlés."


Egy idő után csak leesett, hogy a vízen egy vitorla segítségével lehet a legtovább mozgásban maradni, a vitorlakezeléshez szükséges szervomotorok energiaellátását pedig napelem is biztosítani tudja. Persze lesznek kiegészítő motorok is (NQD-757).

http://www.ensta-bretagne.eu/images/contenu//actualite/VAIMOS.jpg

A másik pozitív hozománya a vitorlázásnak, hogy nem vethetik a szememre, csak egy távirányítós hajót építek, hanem lesz valami kutatás-szaga is a dolognak. Egyébként már számos ilyen design létezik, erre szakosodott versenyeket is kiírtak, ami tök jó. Már csak egy életképes koncepció kell. El is kezdtem olvasni a XY-tól a Vitorlázás c. könyvet, a Műszaki Könyvkiadótól. Mintha direkt nekem írták volna azt a könyvet, alaposan bemutat mindent de nem virágnyelven, hanem nyomásgradiensekkel.

Azért nem telt teljesen haszontalanul augusztus, kitaláltam egy módszert a hajótest legyártására: Térben kijelölt pontokat megfelelően paraméterezett Dealuney háromszögeléses módszerrel háromszögekre bontunk. Ezeket kivágjuk egyesével rétegelt lemezből, majd a megfelelő oldalakat epoxyval összeragasztjuk, felépítve az eredeti térbeli modellt. Ahogy egy jó barátom jellemezte az ötletet:
"Szegény ember 3D nyomtatója"
Még várom a konzulensem reakcióját a témakiírásra és a vitorlázós ötletre. Remélem zöld utat kapok.

2013. augusztus 2., péntek

Boat Drive

RLC-vel való beszélgetés után azt a javaslatot kaptam, hogy vágjam ki a kukába az egész Stirling-motor ötletet, leginkább azért, mert van egy még olcsóbb megoldás: e-biciklik utángyártott akkumulátorai.

Ki is néztem egy típust, de előbb a hajó hajtását kell megálmodnom és utána akkumulátort illesztenem hozzá.
Ezt az oldalt meg is említem itt gyorsan:
http://www.modelpowerboat.com/content.php?128-drive-train

Egész értelmesen vannak itt összefoglalva a dolgok, így egy olyan kezdő mint én is megérti talán.

Tehát az első szükséges elem:

A hajótest kialakítása. Igen, meg kellene már csinálni azt a két rohadt ama-t. Ma veszek is epokitet hozzá. A cél, hogy egy hullámtörő él mögött azért lapos felület legyen, így magasabb sebességnél könnyedén felül a vízre, de a hullámok sem dobálják (remélhetőleg).
http://kiwitricopter.blogspot.hu/2012/10/single-nqd-jet-yellow-boat-parts-list.html

Update @13-09-2013: Már egy ideje megjöttek a tényleges Jet-Drive-ok, de most összeszedtem magam és készítettem fényképeket róluk, íme az NQD-757:





2013. július 28., vasárnap

Hajógyártás

Pár nappal ezelõtt az Obi-ban végre felfedeztem a megfelelõ elemeket a hajó vázszerkezetének és felépítményének legyártásához: beton-acél összekötõ lemezek. Ilyen-olyan összecsavarozható masszív, rozsdamentes lemezek a legkülönfélébb méretekben.

Kép

A következõ napokban a két ama hajótest formáját és legyártásának módját kellene megálmodni, rajzolni az egészrõl egy skiccet és megvenni a szerkezeti elemeket.

Kép

Buzi Conrad még mindig nem volt képes beszerezni a BeagleBoardomat, de azzal is haladni kellene, vészesen közeleg szeptember!

2013. július 12., péntek

Elsõ sikeres lockpick

Vasárnap sikeresen kinyitottam életem elsõ zárját két darab mini csavarhúzóval. Az új albérletben az én asztalomban van egy zárható fiók, melyhez nem járt kulcs és természetesen zárva volt :) Elõször nem is hittem a sikerben, mivel a legkisebb csavarhúzóm rake-nek (a kígyó alakú szöszmösz amivel ténylegesen benyúlunk a zárba) túl vastag volt, és mindig csak a legkülsõ pint lehetett baszkurálni. Viszont maga a zár üdítõen primitív volt, enyhe forgatónyomaték már lockolta a pineket a megfelelõ helyen. Nem vagyok biztos benne, hogy bármilyen geometriai kombinációra szükség van a nyitáshoz, egyszerûen felnyomkodtam õket és úgy maradtak, a harmadik után fordult a zár.
Tanulság: megfelelõ eszközzel és szaktudással kicsit kevesebb mint egy másodperc alatt nyitható egy ilyen átlagos irodai desk-lock. Megérte kifejleszteni és legyártani...

2013. június 18., kedd

BMESHIP fejlesztési irányok

Tegnap este (hajnalban) lefekvés előtt sok gondolat kavargott a fejemben, hogy merre lehetne továbbindulni amint meglesz a fránya Terek II (nagyon remélhetőleg).

Térkép 3D-sítése, HLI szerkezetátalakítás (egy hajó indításához tényleg csak a Ship objectet kelljen meghívni a megfelelő paramélterekkel), hajók közti kommunikáció (pályafoglalás), multi-agent útvonaltervezés (Pl. ant-colony, particle swarm optimization).

2013. május 28., kedd

Motor

Ez a bejegyzés a hajóról és motorjáról szól, a Stirling-motor építési tapasztalatokhoz a "Stirling" kulcsszóra keress.

A hajó meghajtását Stirling-motorra bíznám, vagy legalábbis a pufferakkumulátorok töltését. Lássuk miért:

A norvég és dán tengeralattjárók kizárólag stirling-motor meghajtásúak, ezért talán nem annyira hamvába halt ez az ötlet.

Egy stirling motor megépítése lényegesen olcsóbb, mint egy akkumulátoros energiatárolás kiépítése. Ráadásul sokkal hosszabb üzemidõt eredményez.

A tengert kihasználva a Motor-körfolyamat hatásfokát nagymértékben növelhetjük a hideg oldal erõteljes vízhûtésével.

Veszélyei:

A Stirling motor külsõégésû motor. Meghibásodás esetén meggyulladhat az egész hajó.

A motor csúcsteljesítménye relatíve alacsony. Intelligens fogyasztóvezérlésre van szükség ilyen jellegû meghajtásnál, vagy pufferelt energiafogyasztásra.

A motor az Alfa-stirling elrendezést követné, és dupla kialakítású lenne.
Elõnye, hogy sokféle elrendezést követhet, így a melegoldali dugattyúk a "vaka"-ban, míg a hidegoldali dugattyúk az oldal-hajótestekben helyezhetõek el. Így a két motor teljesítménye és a súlyelosztás is kiegyenlítettebb.
Hátránya, hogy két légmentes dugattyúra van szükség motoronként, ezért a motor belsõ ellenállása valamivel magasabb.

2013. május 27., hétfő

A hajótest

Az energiaforrás, vezérlõszoftver, gps/rádió vevõ és a hajótest kritikus részei a designnak. Minden olyan eleme a rendszernek, mely meghibásodása esetén a hajó képtelen elérni a partot (ahol állunk) kritikus. Ezek között nem állítható fel prioritássorrend, hibátlanságuk ÉS kapcsolatban áll a vízrebocsájthatóság feltételében.
Mivel azonban az idõ és költségkeret szûkös, a hajótest határozza meg a többi elem korlátait, nem pedig fordítva, ahogy logikus lenne.
Emellett a hajótest megbízhatósága különösen kritikus, hiszen a meghibásodása esetén nem csak mentés szükséges, hanem teljes újjáépítés.
Ezért, és hajódinamikai okokból a hajótest Trimaran elrendezést követ.

Earthrace Trimaran - inspiráció.

Bármely hajótest meghibásodàsa esetén a másik kettõ képes a hajó vízfelszínen tartására, valamint az egyik ama levásásakor is a felszínen marad a hajó.
A trimaran hajótest meglehetõsen stabil, így magasabbra kerülhetnek a felépítmények.
A lényegesen nagyobb szélesség/hoszzúság arány miatt fordulékony hajót kapunk, míg az egyenes irányú közegellenállás nem nõ jelentõsen.
A trimaran hátrányaiként tartják számon az orrabukás veszélyét, a nehéz kikötõi manõverezést és alacsony helykihasználást. Az elõbbi feltétel csupán vitorláshajók esetében érvényes, az utóbbiak csak nagyméretû, ember szállítására alkalmas hajók esetében áll fenn. Így egyértelmûen jó megoldásnak tekinthetjük a háromtestes kialakítást.

BMESHIP.01

A BMESHIP.01 célja egy - mûszaki értelemben - egyszerû és megbízható távirányítható és/vagy autonóm vezérlésû hajó megvalósítása.

A projektet saját zsebbõl finanszírozom, így nagy hangsúlyt kapott a prototípus költséghatékonysága is. Megjegyzendõ, hogy ami prototípus esetében olcsó megoldás, tömeggyártás esetén kimondottan drága és rossz megoldás lehet. Mint például a python alapú vezérlés, könnyû és gyors fejleszteni, de ha nem módosul rendszeresen a program, felesleges.

Azért használom a hajó kifejezést, mert az elsô változat csupán GPS és iránytû szenzorokkal lesz felszerelve.

AAU hajó

Egyelõre fantázianeveket használok, hogy elrejtsem ennek a blognak a létezését, hogy elkerüljem a kiröhögéseket, ha nem lesz belõle semmi :)
A címben említett projekthez legelõször meg kell köszönnöm RLC, NØ, FJ és TM segítségét, pontosabban én segítettem nekik, és rengeteget tanultam tõlük Aalborgban. Remélem õk is tõlem valamennyit. A BMESHIP ötlete hozzájuk köthetõ, valamint több kisebb megoldásé is, pl a Stirling motor, a Python használata.
Röviden leírva a 0-ról hoztunk össze fél év alatt egy mûködõképes, teljesen autonóm vezérlésû robothajót. Hadd beszéljenek helyettem a teszteredmények:

Videók

A BMESHIP projekt célja hasonló, de nem egy összetákolt hajó létrehozása, hanem egy átgondolt, megbízható autonóm kutató-platformé.

2013. április 18., csütörtök

Mi a célom ezzel?

Elsődlegesen saját magam motiválására hoztam létre, és hogy dokumentáljam a gondolatmenetemet, feljegyzéseket készítsek, ha éppen eszembe jut valami. Ahogy halad előre a projekt különböző döntéseket fogok itt megvitatni magammal, és érvelni mellettük, mert leírva sokkal értelmesebb, mint csak fejben pörgetni a dolgokat.

Ez nem hivatalos dokumentáció. Csupán informális megfontolások erről-arról, különböző megoldások gyűjteménye. Állapotkövetés, stb. Minél gyorsabban és egyszerűbben.

Majd idővel belejövök...

Emellett néhány többé-kevésbé kapcsolódó projekt is megtalálható lesz itt, archiválás szempontjából, ezek részletesel leírva, dokumentálva. Nem tudom, mennyire leszek hû az eredeti elképzelésemhez, talán ez lesz az elsõ és utolsó bejegyzés is, de próbálkozok...