Profielwerkstuk auto-aim turret
-
hey, ik wilde voor mijn profielwerkstuk iets
met robotica doen, en ik had een lijst opgezet van 3
ideeën:
1: een robot die een zwarte lijn op de grond volgt (had ik gezien bij open dag delft)
2: een robot die een traject kan afleggen, waarbij hij objecten kan vermijden en terug zijn traject volgen.
3: (moeilijkst) een robot die (met behulp van een camera) een object identificeert, markeert, en volgt met een laser pointer.is de derde optie mogelijk? en hoe moeilijk zou het worden?
-
He Jonathan,
Onlangs ben ik wat vergelijkbaars als je laatste vraag tegengekomen. Het verschil is alleen dat het de laser volgt (dus die moet je zelf richten) maar volgens mij ziet dat er indrukwekkend uit als je er een turret omheen maakt.
Natuurlijk kan je dan nog niet richten op iets wat geheel buiten het gezichtsveld van de camera zit, maar je zou dat kunnen aanpassen door bijvoorbeeld het turret standaard te laten ronddraaien, dan komt de laserstip vanzelf in het gezichtsveld.
Wat betreft de andere twee opties: die zijn absoluut realiseerbaar. De eerste heb zelf ook ooit moeten bouwen! De manier van de TU is wel een beetje ingewikkeld, dus je kan beter een concept van internet afplukken, denk ik. Met een lichtsensor en een klein programmeerbaar processorbordje ben je dan al een heel eind op weg!
Succes en mocht je vragen hebben, laat het maar weten!
-
he, sorry voor de late reply. maar Ik heb een aangepaste versie gemaakt:
in plaats van een turret die een bewegend object in 3 dimensionale ruimte volgt nemen we een onafhankelijke camera/webcam die naast de turret (waar de laser op gemonteerd staat) staat.
het object wordt een kleurmagneetje op een (wit) magneetbord.
de bedoeling is dat de camera het magneetbord geheel in zicht heeft,
het kleurmagneetje en de huidige positie van de laser identificeerd, en dan op een virtueel assenstelsel van het bord plaatst en zo (met behulp van verschil tussen coordinaten van laser en object, en dan if-then-statements) ervoor zorgt dat de laser naar het object toegedraaid wordt. -
Ha Jonathan,
Klinkt als een mooi plan! Als je nog vragen hebt, hoor ik het wel! Succes.
-
dit is al oud. heb het al verandert en ben al best ver:
ik laat een camera op een pan&tilt system (een geschutskoepel die werkt met 2 servomotoren) zetten , en laat hem met behulp van een pixel brightness analyzation program het lichtste punt in beeld markeren, en er coordinaten van halen. En het is me al gelukt om de servomotors in hexadecimalen aan te sturen. beide programmas zijn geprogrammeerd in visual C# (vergelijkbaar met C/C++ en java) , maar ook heel ingewikkeld. heeft iemand hier ervaring met programmeren in C/C#/C++? (of java) . want dan zou ik zijn/haar hulp kunnen gebruiken met het begrijpen en in verband brengen van beide programma's.bij deze post heb ik de zip file van het webcamprogramma inbegrepen. je kan hem openen in visual C# download solution:
bij de volgende post zit het programma waarmee je de servomotoren kan aansturen.
ik heb 2 hs-422 servomotoren
en een USB-servocontroller unit voor het aansturen.normaal zit er sturingssoftware bij die controller, maar aangezien het programma compatible met het webcamprogramma moet zijn. gebruikt ik serialport terminal, waarbij je hexadecimalen moet gebruiken om hem aan te sturen.
als iemand kan helpen, dan graag.
groeten, Jonathan
-
He Jonathan,
Je bent er druk mee bezig, erg indrukwekkend. Ik heb flink wat programmeer ervaring, maar zoals je misschien begrijpt, heb ik een iets concretere vraag nodig. Als je me een specifiek probleem kan uitleggen, kan ik je wellicht helpen!
Even bij het begin beginnen:
- De webcam kan het juiste punt al herkennen en daar de coordinaten van ophalen.
- De servomotoren kan je al aansturen om naar links of naar recht te laten draaien en naar boven of naar beneden.
- Het probleem zit 'm dus in het feit dat je de motoren nog niet kan laten aansturen door (n.a.v. de analyse uit) het webcam-programma.
- De oplossing moet zorgen voor een schakel tussen beide programma's die ervoor zorgt dat de koepel wordt aangestuurd door de analyse van het webcam-programma.
Klopt deze analyse? Is dit het probleem?
-
kijk: het programma voor de webcam die de hoogste lichtbron via pixels vindt bevat wel de coordinaten in het programma zelf, maar weergeeft die niet op de applicatie zelf en doet er niks mee. het programma is ontworpen om te werken met een stepper motor. dus niet met een servomotor. Hier is meer uitleg. (ga naar download solution voor de applicatie zelf)
daarnaast heb je serialport die ook in C# is geprogrammeerd, en de servomotos in hexadecimalen via de usb controller unit aanstuurt. daarvoor moet je in hexadecimalen de command: ! S C <port/channel> <ramp speed> <lowbyte> <highbyte> <CR>
waarbij
(middel staat voor middelste stand: servomotoren kunnen geen 360 graden rond draaien, maar 180 graden. in de middelstand staan ze dus op 90 graden, oftewel ze kunnen in totaal 90 graden links, en 90 graden rechts draaien)21 53 43 00 0F 02 02 0D: middel -45 C
21 53 43 00 0F 02 03 0D : middel
21 53 43 00 0F 02 04 0D: middel +45 C
het idee is dus dat we via de webcamapplicatie de serialport kunnen aansturen. of in ieder geval een manier vinden om de servomotors aan te sturen met de webcamapplicatie. ik weet niet hoe goed jij bent met
programmeren met usb ports. maar het idee is dat de camera de laser volgt. oftewel we nemen een het middelpunt van de camera als coordinaat, en vergelijken die met met de coordinaat van de hoogste lichtsource. met behulp daarvan zouden we met if-then statements kunnen bepalen welke richting hij op moet. op het einde zou het net zo moeten werken als de originele app.groetjes, Jonathan
-
He Jonathan!
Kan je de aansturing in het programma dat je hebt gedownload niet aanpassen in de hexadecimalen die de servomotor nodig heeft? Want normaal gesproken (bij de steppermoter) stuurt ie toch ook een seriele poort aan? Dan heb je geen tweede programma meer nodig om dat te doen en (belangrijker!) hoeft je ze niet met elkaar te laten communiceren.
Als je weet in welk van die bestanden in dat zipje bij die 'downloadsolution ' de code staat voor de aansturing van de stepper, wil ik er ook wel even naar kijken voor je.Je zal sowieso het webcamprogramma moeten aanpassen; ofwel om een ander instance/programma aan te roepen (bijvoorbeeld het programma 'draai naar rechts', uitgevoerd door jouw 'Serialport') ofwel om direct de servo aan te laten sturen (lijkt mij makkelijker, maar dan moet je misschien nog wel pulslengtes die de servo nodig heeft gaan instellen. Dat gaat misschien makkelijker in 'Serialport').
Als je het webcamprogramma niet zou aanpassen, zou je de USB uitgang die normaal gesproken voor de stepper wordt gebruikt moeten uitlezen, vervolgens dat signaal omzetten met andere hardware in een goed signaal voor de servo's (lijkt me een heel slecht plan!).
Kan je het stuk code vinden waarmee het programma de stepmotor aanstuurt?