Page 1 of 2
Posted: Sun May 27, 2007 8:40 pm
by AmmarkoV
Μετά από πολύ καιρό απέκτησα το δικό μου Mindstorm
Το πήρα από Amazon 270 euro με Express delivery (σε 1 μέρα ήρθε από Αγγλία , ενώ μέσω ενός Website της DHL παρακολουθείς την πλήρη του διαδρομή! Έμεινα άφωνος από την ποιότητα των υπηρεσιών τους..

)
Τώρα λοιπόν είμαι σε φάση κατασκευής ή μάλλον κατασκευών , πάντως για οποιονδήποτε άλλο έχει το μικρόβιο αξίζει πάρα πολύ είναι πολύ εύκολο στην κατασκευή , καθότι lego , και μαζί παρέχονται UltraSonic Sensor ακρίβειας ενός μέτρου.. Light Sensor , Sound Sensor , Touch Sensor και 3 Servo Motors..
Εκτός όμως από αυτά υπάρχουν πηγές για Custom Sensors (βλέπε
εδώ κ
εδώ ) ενώ δίνεται το πλήρες Specification των Ports κάτι που σημαίνει οτι ένας γνώστης των ηλεκτρονικών μπορεί να φτιάξει και τους δικούς του όπως θέλει..
Το πρόγραμμα προγραμματισμού LabView είναι πανεύκολο για την ανάπτυξη ενός προγράμματος (έως και αντιπρακτικά εύκολο

) αλλά μετά από ψάξιμο βρήκα τον κώδικα ενός γερμανού και με 1 ξενύχτι τον έκανα Port και έφτιαξα ένα πιο πρακτικό DLL (και αισθητικά πιο καλό) που επιτρέπει τον έλεγχο του NXT Block από το PC μέσω bluetooth..
BTW η δυνατότητα αυτή για Bluetooth πιστεύω είναι και η μεγαλύτερη δύναμη του καθώς μπορείς να το ελέγχεις από κινητό (με software που δίνεται από
εδώ) και είναι τέλειο γιατί επιτρέπει την σύνδεση πολλών mindstorm μεταξύ τους για πιο πολύπλοκα ρομπότ ή από την μικρή υπολογιστική ικανότητα της συσκευής (# 32-bit ARM7 microcontroller # 256 Kbytes FLASH, 64 Kbytes RAM) μπορείς να μεταφέρεις όλο το υπολογιστικό κόστος στο PC σου και απλά να έχεις το Robotάκι σαν εντολοδόχο..
Οποιοσδήποτε θέλει το DLL μπορεί να το κατεβάσει από
εδώ
Code: Select all
PM Me αν τα χρησιμοποιήσετε για το τι κάνει το καθένα..
Τα exports είναι τα εξής..
function InitMindstormConnection(theport:byte):boolean;external 'CPPNXTMindstorm.dll' name 'InitMindstormConnection';
function CloseMindstormConnection:boolean;external 'CPPNXTMindstorm.dll' name 'CloseMindstormConnection';
function ActivateSensor(thesensor:byte):boolean; external 'CPPNXTMindstorm.dll' name 'ActivateSensor';
function DisableSensor(thesensor:byte):boolean; external 'CPPNXTMindstorm.dll' name 'DisableSensor';
function SetSensorType(thesensor,thestate:byte):integer; external 'CPPNXTMindstorm.dll' name 'SetSensorType';
function GetSensorState(thesensor:byte):integer; external 'CPPNXTMindstorm.dll' name 'GetSensorState';
function GetSensorStateNorm(thesensor:byte):integer; external 'CPPNXTMindstorm.dll' name 'GetSensorStateNorm';
function SetMotorState(themotor:byte; thestate:integer):integer; external 'CPPNXTMindstorm.dll' name 'SetMotorState';
function ActivateMotor(themotor:byte):boolean; external 'CPPNXTMindstorm.dll' name 'ActivateMotor';
function DisableMotor(themotor:byte):boolean; external 'CPPNXTMindstorm.dll' name 'DisableMotor';
procedure WaitSync(thedelay:byte); external 'CPPNXTMindstorm.dll' name 'WaitSync';
ADDED 30-5-07 Έφτιαξα ένα προγραμματάκι με την παραπάνω βιβλιοθήκη για Remote Controled Mindstorm NXT

, Υποστηρίζεται αυτόματα και Joystick , το μόνο που πρέπει να κάνει κάποιος είναι να συνδεθεί με bluetooth από το NXT στο PC και να δώσει το COM port της σύνδεσης -
Download
Posted: Sat Jun 16, 2007 4:43 pm
by AnINffected
Ammarkov είδα πρίν από μερικές μέρες το post σου και ενθουσιάστηκα με αυτά που διάβασα!
Δεν είχα σκεφτεί οί υπάρχει δυνατότητα να συνδεθούν μεταξύ τους.
Αν συνδιάσεις μάλιστα τη δυνατότητα σύνδεσης με PC με Custom Sensors φαντάσου τί κόλπα μπορείς να κάνεις...
sandra:Εντάξει, είναι προφανές οτί έχουμε πολλά να μάθουμε ακόμη.
Σίγουρα είναι μία σημαντική πρόοδος, αλλά ελπίζω η πρόοδος αυτή να μη γίνεται με λάθος προθέσεις, σε λάθος δρόμο και σε λάθος περιβάλλον (ή εποχή).
Posted: Sat Jun 16, 2007 5:50 pm
by tsilochr
σε C++ το προγραμματίζεις? Μπορείς να δώσεις πληροφορίες γενικά για την πλατφόρμα προγραμματισμού του?
Posted: Sat Jun 16, 2007 9:29 pm
by polina
Μπορείς να βρεις αν είναι συμβατό με το IEEE 1451.2 standard?
Posted: Sat Jun 16, 2007 10:46 pm
by AmmarkoV
Λοιπόν
Το Mindstorm μπορεί να συνδεθεί με υπολογιστή με Bluetooth ή USB!
Το Bluetooth καίει πιο πολύ μπαταρία αλλά το USB είναι εντελώς αντιπρακτικό για robot που κινούνται (Αν και μακρύ το καλώδιο κάποτε τελειώνει) !
Το DLL που λέω πάνω το έγραψα σε C++ αλλά ουσιαστικά οποιαδήποτε γλώσσα έχει access στο Win32API μπορεί να ανοίξει μια συσκευή COM (σαν file ουσιαστικά) και μπορεί να αρχίσει να γράφει και να λαμβάνει από την συσκευή.. Το πρωτόκολο είναι απλό σχετικά αλλά δεν ασχολήθηκα ιδιαίτερα , βασίστικα σε ενός Γερμανού.. Τώρα που το μετέτρεψα σε DLL θεωρήτικά μπορείς να γράψεις κώδικα από οποιαδήποτε Windows γλώσσα (πχ εγώ FreePascal)

ακόμα και με (
Java που είναι μπλιάξ
- link = howto για java + dll) Λειτουργόντας με το DLL ουσιαστικά το Mindstorm λειτουργεί σαν εντολοδόχος , αλλά υπάρχει και Visual πρόγραμμα στο οποίο δίνεις οπτικά το πρόγραμμα και στην συνέχεια αυτό γίνεται compile φορτώνεται στην μνήμη του Mindstorm και από εκεί και εμπρός αυτό είναι ανεξάρτητο..
Περισσότερες πληροφοριές εδώ και εδώ
Το IEEE 1451.2 (Smart Sensors κτλ) δεν νομίζω οτι υποστηρίζεται, το Mindstorm αυτό καθ`αυτό παίζει ή με Bluetooth ή USB με ένα πρωτόκολο της Lego , τα πάντα (hardware/software) είναι opensource οπότε
knock yourself out , καλό διάβασμα 
.. Τώρα βέβαια με το DLL δεν χρειάζεται καν , αλλά περι ορέξεως κολοκυθόπιτα .
Προφανώς μπορεί ένα laptop να λειτουργήσει ως hub ή bridge ή whatever και να φτιάξει κανείς ένα mini prog το οποίο να μεταφράζει σε IEEE 1451.2 καθώς να μιλάει με bluetooth , να παίρνει απαντήσεις και να ξαναμεταφράζει σε IEEE 1451.2.. Δεν είναι δύσκολο τεχνικά αυτό.. Αλλά δεν έχω ιδέα την εφαρμογή ή για ποιό λόγο να το κάνει κανείς αυτό , polina δές πιο πάνω τα exports είναι πανάπλα
Επίσης θεωρητικά γίνεται να έχεις πρόσβαση και μέσω internet στις COM πόρτες
(Εδώ πχ είναι ένα μικρό πειραματικό προγραμματάκι μου που κάνει το παραπάνω ώς
COM 2 TCP bridge) (Δηλαδή μπορείς πχ να κάνεις Telnet και να συνδεθείς στο modem ή στο Mindstorm ή σε οποιαδήποτε συσκευή σε κάποια COM port σου

)
Αυτά!

Posted: Wed Jun 20, 2007 5:57 pm
by polina
Ωραία!

Δηλαδή,αν κατάλαβα καλά νομίζεις ότι μπορεί κάποιος να φτιάξει ένα πρόγραμμα το οποίο να μεταφράζει από IEEE 1451.2 και από διάφορες γλώσσες που χρησιμοποιούν οι sensors (κάθε εταιρία έχει την δική της) σε java αρκεί να γράψει τα κατάλληλα DLL.Ο σκοπός είναι να επικοινωνούν όλοι οι sensors με ένα midleware σε java,το οποίο ήδη υπάρχει.Είναι πολύ πρόβλημα αν αυτός ο κάποιος ξέρει μόνο java(και δεν είναι και πολύ μάγος στον προγραμματισμό

);Εννοώ ,θα δυσκολευτεί πολύ με τα DLL;Aλήθεια γιατί θεωρείς την java μπλιαχ

για DLL;
Posted: Thu Jun 21, 2007 12:11 am
by AmmarkoV
Σκέψου οτι με το DLL που λέω , αφού ακολουθήσεις τις οδηγίες και το φορτώσεις , όταν θα καλείς GetSensorState(1) θα σου επιστρέφεται μια τιμή από 0 έως 255 (cm για το Ultrasonic , φωτεινότητα για το light sensor , db για το μικρόφωνο κτλ) , δηλαδή σαν μεταβλητή.. δεν χρειάζεται καν το IEEE 1451.2..
Πχ το κομμάτι κώδικα παρακάτω λειτουργεί το μοτέρ 1 στο 100% των στροφών του έως ότου ο Sensor 1 (Ultrasonic) πλησιάσει πιο κοντά από 100cm οπού και το μοτέρ σταματάει για να αποφύγει την σύγκρουση..
Code: Select all
ActivateMotor(1);
SetMotorState(1,100);
while (GetSensorState(1)>=100)
{
printf("Proxoraw\n");
}
printf("Stamatisa giati plisiasa ston toixo!\n");
DisableMotor(1);
Αν θέλεις να υπάρχει διασύνδεση και με το IEEE 1451.2 δεν σε εμποδίζει κάτι να παίρνεις αυτές τις μεταβλητές και να τις πακετάρεις σε οποιοδήποτε format είτε IEEE 1451.2 είτε οτιδήποτε..
Τα DLL είναι Dynamic Linking Libraries , δηλαδή "εκτελέσιμες" compiled βιβλιοθήκες οι οποίες μπορούν να παίξουν ανεξαρτήτως γλώσσας κτλ , για να κάνεις αυτή την δουλειά δεν είναι απαραίτητο να παίξεις με DLL.
H Java δεν είναι κατασκευασμένη για DLL , παρότι το JVM τα χρησιμοποιεί στα Windows (Άνοιξε και δες C:\Program Files\Java\jre1.6.0_01\bin πχ ) και η Java είναι μπλιάξ γιατί για οι διάφορες επιλογές της σχεδίασης της είναι επιλογές πολιτικής και όχι ανάγκαίες.. Επίσης το οτι τρέχει σε όλα τα λειτουργικά τι να το κάνω αν είναι interpreted (το
JIT είναι ημίμετρο).. κτλ κτλ κτλ χιλιοειπωμένα ..
Επίσης δεν γίνεται να γράψεις DLL με Java.. Ο javac παράγει Java bytecode όχι Windows Portable Executable bytecode ...
Posted: Thu Jun 21, 2007 12:25 am
by tsilochr
ανέβασε κανένα demo video να γουστάρουμε!
Posted: Thu Jun 21, 2007 12:28 am
by AmmarkoV
Posted: Thu Jun 21, 2007 12:46 am
by polina
OK.Thanks.Νομίζω πρέπει να τα ξαναπάρω τα πράγματα από την αρχή.Για την στιγμή η βασική ερώτηση είναι θα ήταν το ίδιο απλά τα πράγματα (για εσένα τουλάχιστον) και εάν είχαμε sensors που υποστηρίζουν άλλες τεχνολογίες;Γιατί εάν κατάλαβα καλά,στην δική σου εφαρμογή βασίστηκες στην συγκεκριμένη τεχνολογία που ήταν καλή για να γράψεις το DLL και να φτάσεις εύκολα στο σημείο να παίρνεις το δεδομένο του sensor σαν μεταβλητή.
Posted: Thu Jun 21, 2007 1:05 am
by AmmarkoV
Θα μπορούσες να φτιάξεις ένα Wrapper function πχ..
int GetSensorState_IEEE(int typ)
{
// Της παναγιάς τα μάτια ..
// ΙΕΕΕ implementations και τα λοιπά και τα λοιπά
return μια_τιμή
}
int GetSensorState_General(int typ)
{
if (typ<=3) { return GetSensorState(typ); } else
{ return GetSensorIEEE(typ-4);}
}
Καλώντας GetSensorState_General(0 έως 3) παίρνεις τις πληροφορίες για τους σένσορες 0 έως 3 , μέσω του CPPNXTMindstorm.dll Καλώντας GetSensorState_General (4 κτλ ) καλείς άλλα πράγματα από βιβλιοθήκη συμβατή με ΙΕΕΕ 1451.2 πχ..
Αλλά γιατί τέτοιο κόλημμα με το ΙΕΕΕ 1451.2 ???

Posted: Thu Jun 21, 2007 1:33 am
by polina
Γιατί είναι στις προδιαγραφές ενός middleware API για data acquisition from sensors ( του JDDAC)και θέλω να δω τι μπορεί να γίνει για την περίπτωση sensors που δεν υποστηρίζουν το ΙΕΕΕ 1451.2.Σε περίπτωση που είναι δύσκολο να γίνουν προσαρμογές στο API πρέπει να δικαιολογήσω το γιατί.
Posted: Thu Jun 21, 2007 1:41 am
by AmmarkoV
Κατάλαβα..

Σε περίπτωση που κάτι δεν είναι συμβατό λοιπόν , αρκεί να βρείς μια συμβατή βιβλιοθήκη ( ένα Side API ουσιαστικά ) , και από εκεί και εμπρός στην εφαρμογή σου να χρησιμοποιούνται και τα 2 , όπου χρειάζεται το καθένα..

Posted: Thu Jun 21, 2007 2:10 am
by polina
ΟΚ!Θα το ψάξω.
Posted: Thu Jun 21, 2007 10:21 am
by tsilochr
από το άγχος δεν μπορούσες να βρεις την usb???

Τρομερός φίλε. Στην διπλωματική μου ίσως ασχοληθώ με αισθητήρες. Καιρός να προγραμματίσουμε κάτι άλλο πέρα από db και apps
Posted: Thu Jun 21, 2007 10:39 am
by The Punisher
Moderation Message
Το έκοψα σε νέο thread γιατι έχει ενδιαφέρον, και ο προηγούμενος τίτλος δεν βοηθούσε ...
Posted: Thu Jun 21, 2007 10:46 am
by Einherjar
ο συγκεκριμένο robotακι υποστηρίζει προγραμματισμό και σε .NET. Επίσης μπορείς να παίξεις με το MS Robotics Studio που έχει modules για το NTX
Posted: Thu Jun 21, 2007 11:09 am
by tsilochr
Το βρήκα συμπτωματικά σήμερα, μπορεί να είναι και offtopic
Wall-E Teaser Trailer
Posted: Thu Jun 21, 2007 11:25 am
by SeniorCarbone
Εγώ άμα το είχα θα έφτιαχνα κινούμενο crossbow με camera
ή κάτι παρόμοιο..ελεγχόμενο κ από joystick..

τρέλαα.
να και το
crossbow
Eπίσης και
αυτή η κατασκευή μ άρεσε.
Αμαρ έχει κ ενσωματομένο color detection το NXT?
EDIT: ηλίθια ερώτηση

..τώρα το σκέφτηκα..αφού έχει light sensor.χεχε
Posted: Thu Jun 21, 2007 1:15 pm
by Einherjar
Posted: Thu Jun 21, 2007 2:02 pm
by AmmarkoV
SeniorCarbone wrote:ηλίθια ερώτηση tongue ..τώρα το σκέφτηκα..αφού έχει light sensor.χεχε
Καθόλου ηλίθια.. Όχι έχει μόνο light sensor ο οποίος επιστρέφει μια τιμή από 0 (0%) έως 255 (100%) , είναι χρήσιμος για να καταλαβαίνεις ambient φωτισμό , γραμμές αν κοιτάει στο πάτωμα κτλ κτλ ..
Πάνω στον lightsensor έχει και ένα λαμπάκι , το οποίο αν ανάψεις (δλδ βάλεις τον light sensor σε reflected mode ) μπορεί να χρησιμεύσει και για να καταλάβεις αν μια επιφάνεια είναι κοντά (όσο πιο κοντά τόσο πιο πολύ κάνει reflect..)
Πάντως μπορείς να αγοράσεις
Color Sensor αλλά είναι τσιμπημένος !
Επίσης αν βάλεις μια Webcam πάνω στο robotaki δεν τον χρειάζεσαι !

Posted: Thu Jun 21, 2007 2:21 pm
by SeniorCarbone
AmmarkoV wrote:
Επίσης αν βάλεις μια Webcam πάνω στο robotaki δεν τον χρειάζεσαι !

Σωστός!..απλά σίγουρα η ταχύτητα αναγνώρισης θα έχει μεγάλη διαφορά αν γίνεται στο Hardware
Πάντος πιστεύω θα άξιζε να είχε κάνα mindstorm ή τπτ παρόμοιο
το πανεπιστήμιο..
Φανταστείτε να εξομοιώναμε τον agent από το wumpus dungeon
στην εργασία τεχνιτής νοημοσύνης πάνω σε αυτό..Δεν θα ήταν δύσκολο,
θα μας δίνανε το κατάλληλο api και θα το κάναμε με βάση αυτό και στο
τέλος θα το τεστάραμε..θα αποκτούσε άλλο ενδιαφέρον