Заедно с 2-ма приятели седнахме да правим проект за училище. Идеята беше да се направят 2 line tracer робота, един от които да си има стандартен алгоритъм, а другия - обучаващ се и да се сравни кой е по-добър. По време на разрабодка осъзнахме че не е нужно да има 2 робота - просто можем да сменим микроконтролера. Последва писане на софтуер. За нормалния алгоритъм беше ясно, но за обучаващия се беше малко по-сложно. Ако си спомняте - писал съм статия за невронни мрежи, и точно това искахме да ползваме. PC-версията беше лесна, но когато се замислих, осъзнах че ще е прекалено сложно да се прехвърли на микроконтролера, главно заради факта, че трябва да се пазят много и добре организирани променливи, което сметнахме за невъзможно за времето което имахме. Затова в последния си вариант, проекта ни беше следния: правим робота, качваме му нормалния алгоритъм, като и за двата правим симулации. Като сравним резултатите на истинския робот и симулацията му бихме могли да направим извод и за точността на симулирания робот. За съжаление някаква грешка (която все още не сме открили) изяде цялото време и не успяхме да завършим проекта на време.
Въпреки това имаме работеща симулация на нормалния робот и именно за това е и темата:
http://www.robotics-bg.com/upload/files/RobotSimulation.rarНе съм се занимавал да правя GUI, затова ето ги контролите:
P - (place) слага робот на трасето
L - (load) зарежда ново трасе. сложим съм 3 трасета, като могат да се зареждат bmp и jpg
S - (start) старт/пауза
R - (reset) изтрива логовете и връща робота в начална позиция
Del - изтрива всички роботи
D - (draw) превключва дали да се изрисуват логовете. имахме проблеми с FPS-а и затова добавихме тази функция
Алгоритъма е изключително прост. Робота може да завива по 2 начина - едното колело спира, а другото продължава; или 2те колела се въртят в различни посоки. Когато само краен сензор засича линията робота се завърта по този начин, иначе завива нормално. Когато изпусне линията (никой сензор не я засича) се връща назад.
Робота спира когато всичките 5 сензора засичат линията.
Симулацията преизчислява позицията на робота през 250 милисекунди реално време и върви с 2х скороста на реалното време (ако съм качил грешна версия може и да е 6х).
Ако някой иска, може да му направя симулация за нещо подобно като имам вече това за основа.
На тези които са прочели целия пост - браво! и очаквам коментари