Alternativ positionsbestemmelse af togene

Lidt baggrundshistorie (ok ok, ævl) der kan springes over uden at man går glip af det helt store:

Der er sket lidt siden sidste blog post. Jeg har efterhånden fået trukket ledninger til alle de installerede skinner (manger stadig sidespor, men det haster ikke). Motorerne til sporskifterne er også forbundet, og jeg er så småt ved at definere banen på computeren så den kan styres. Men det er nu ikke det denne blog handler om - det vender jeg forhåbentlig tilbage til senere. Denne blog post er om et lille "side eksperiment" der måske kan bruges - måske ikke.

Da jeg vil lade min computer styre hoveddelen af banen, kommer man jo ikke udenom at det hjælper at computeren ved hvor togene er. Jeg fandt hurtigt ud af at der er mange muligheder - alle med deres problemer. Jeg udelukkede hurtigt at have deciderede detektorer i skinnernes kredsløb - det giver for meget arbejde med at trække strøm, og er ikke præcis nok hvis jeg vil have mit projekt med automatisk afkobling til at virke (i hvert fald ikke uden en masse segmenter der ville gøre det total kaotisk at lave).

Løsningen fra GamesOnTrack ligner præcis det jeg gerne vil have... men (som der altid er) det kræver en ultralydssender med en diameter på 10-12mm. Mit mindste lokomotiv er 4cm lang, så den er ikke sådan lige at skjule. Derudover vil jeg gerne detektere mere end bare lokomotiverne (gerne de enkelt vogne), og jeg har ikke brug for diverse medfølgende programmer der gør det hele let at bruge for folk der ikke er programmører... af den simple grund at jeg ER programmør - og så er det lettere at programmere istedet for at slås med én eller anden brugerflade nogen har bikset sammen for at skjule de detaljer der gør det lettere at skrive et program.

Så jeg besluttede mig egentlig for det simpleste af alt: Magnetkontakter. Som man kan se i en tidligere blogpost, virker det fint til at foretage meget af styringen. Det hele er dog lettere at programmere når man kører "godt til" og bruger nødstopsfunktionen istedet for at bremse pænt. Men ude på det synlige område skal der jo helst være et roligt stop.

Let nok tænker jeg så. En controller med konstant bremselængde, sæt den til f. eks. 20cm. Smid en magnet kontakt 20cm før togene skal standse ved signaler/eller station. Så snart computeren får signal fra kontakten, send fart 0 og så er den ged barberet. Troede jeg. Men det er åbenbart ikke simpelt at få en dekoder der har styr på den slags. Jeg tror ikke de indbyggede dekodere fra fabrikanten kan (men hvordan finder man ud af det?), og den dekoder pusheren først fik indbygget kan i hvert fald ikke. Så han måtte skifte til en ny dekoder - en ESU. Fint. Så læser jeg manualen, og i modsætning til den dekoder jeg havde læst en manual for da jeg besluttede at dette skulle virke, så kan den kun aktivere konstant bremselængde i forbindelse med et bremsesignal i sporet. Det kunne man naturligvis også lave, men så skal der igen trækkes rigtig mange ledninger, og der skal styres relæer og skidt for at aktivere bremsesporerne.

Planen var nu at forsøge at styre nedbremsningen selv ved hjælp af timere så computeren ved hvor lang tid efter kontakten er aktiveret den skal bremse. Hvis det ikke giver for meget variation så er det måske godt nok, og jeg kan bruge alle dekodere. Virker det ikke så må dekoderen skiftes.

Men så var det jeg kom til at diskutere en alternativ løsning med en kammerat:

Positionsbestemmelse med en Microsoft Kinect

Kinect "installation"

Mange kender den sikkert i forbindelse med XBox - men man kan også få en version der kan tilsluttes en almindelig computer. Ud over et almindeligt video kamera er den udstyret med en afstandssensor. Den virker lidt som et kamera, men istedet for at få farven på hver enkelt punkt på billedet, får man istedet afstanden i mm fra sensoren.

Sensoren har begrænset synsfelt, og kan ikke detektere noget der er mindre en 40cm væk, så jeg måtte ryde rodehylderne over banen så jeg fik plads til denne opsætning, hvor den peger direkte ned på et damplokomotiv med blandt andet en tankvogn og en fladvogn - og ved siden af det mindste jeg har brug for at detektere - en Köf. Og hvis tapen der holder sensoren fast til bogstøtten ikke holder, så må man håbe det sker mens kameraet optager - det er jo ikke hver dag man ser 1500 kroners elektronik smadre ned i 2500 kroners modeltog. Inden nogen (min mor) bliver for forarget - ledningen kan ikke komme igennem sprækken mellem banen og væggen - så sensoren kan ikke falde mere en omkring 20cm... tror jeg nok.

Efter lidt programmering når jeg frem til følgende visualisering af de data jeg får fra sensoren:
Kinect dybdesensor input 

De rødlige felter er hvor sensoren ikke kan detektere afstanden. Ud over at sensoren bliver forvirret over sin egen ledning øverst i billedet, og et bordben og andet godt forneden, så sker det kun ved et sporskifte (for mange skinner tæt på hinanden) og lige omkring toget. Det grønne område er hvor afstanden er lavere end det jeg har sat som minimum, og det "sygeligt lyseblå" område er hvor der er større afstand. Sensoren kan godt detektere ud over det mørkeblå felt her, jeg har bare afgrænset visualiseringen af det så det er lettere at se toget.

Kigger man efter, vil man se at fladvognen er lidt mørkere end resten, da den naturligvis er en anelse længere fra sensoren. Lokomotivet og tankvognens runde form kan også ses - de er en anelse smallere end de firkantede vogne.

Man kunne naturligvis også anvende et almindeligt farvekamera til at se toget, men det er en del mere besværligt at få computeren til at beregne hvor toget er, da man skal håndtere varierende lysforhold og farver på vognene. Da Kinect sensoren har et almindeligt kamera kunne jeg evt kombinere begge, men jeg tror ikke det bliver nødvendigt. Dette system vil også virke i fuldstændig mørke - det er kun kraftig direkte sollys eller en anden IR lyskilde der kan give problemer.

Det er naturligvis en anelse teknisk hvordan man så for computeren til at se toget. Især når der senere kommer bygninger o.s.v., så toget ikke bare er "alt det der rager lidt op", men i grundtræk har jeg optaget afstanden uden at der er tog eller vogne på banen. Hvis jeg så sammenligner den aktualle afstand med denne reference afstand, kan jeg regne med at noget der er 5-50mm nærmere er toget. Farves det gult giver det følgende resultat:
Kinect sensor behandlet 

De gule områder øverst og nederst i billedet (udenfor pladen sporet er bygget på) skyldes en lille forskydelse af kameraet - tape er nok ikke det mest stabile der kan bruges. De røde områder er hvor den ikke er sikker på om der er et tog eller ej - jeg har en masse værdier der kan justeres så det minimeres, så skal der nok komme styr på det. De grå områder er hvor sensoren ikke har nogen ide om hvad der foregår. Smile

Den grønne line er det sporsegment jeg detekterer over. Det er forholdsvist tungt for computeren at beregne over hele billedet, og det giver for meget bøvl med at sortere støj fra, så jeg definerer segmenterne særskildt, så behøver computern kun beregne langs linien. Da der ikke er nogen linie hvor Köf'en er bliver den ikke detekteret i dette tilfælde (det virker dog fint hvis man flytter den ned på det spor). Åbner man billedet og nærstuderer det kan man se nogle svage blå linier lige der hvor det lange togsæt starter og slutter. De mærker er indsat hvor computeren detekterer start og slut på et togset. Man kunne nok også detektere de enkelte vogne med ret høj præcision... men det kræver en del mere analyse af data end jeg har lavet her.

Så, kan det bruges til noget?

Tja, det ved jeg ikke endnu. Det er helt klar ikke noget man kan bruge hvis man ikke kan programmere. Det er naturligvis muligt at nogen laver et program så alle kan gøre noget tilsvarende, men det bliver ikke mig. Jeg ved endnu ikke om jeg selv vil bruge det, og hvis jeg gør om det kun bliver i det synlige område eller også skyggebanegården. Jeg vil tro jeg kan dække det synlige område med to sensorer (måske endda kun én hvis jeg får den endnu højere op), men skal skyggebanegården med så skal der en 3-4 stykker til, og det bliver lidt besværligt da man ikke umidelbart kan sætte så mange til en computer uden ekstra hardware (ikke en større investering i forhold til sensorene, men besværligt).

Så jeg har ikke bestemt noget endnu, men vil nok fortsætte under antagelse af at jeg bruger magnetkontakter på det skjulte spor som jeg altid har haft planer om. Det synlige område vil jeg nok forsøge at få Kinect'en til at detektere på, men giver det for meget bøvl med hvad jeg kan placere på sporet (den kan jo ikke se gennem tætte træer) så vil jeg nok gå tilbage til magnetkontakter på hele banen.

__________________

mvh
Lars M

Er så småt ved at begynde at pille i skala n, epoke III, DB.

Like 0 kan lide
Top