Çizgi izleyen sanal robot yarışması başladı.

Başlatan z, 11 Ekim 2015, 02:55:17

z

Bu yarışmaya katılmak için öncelikle aşağıdaki dosyayı indirip kurmanız gerekiyor. Umarım Win7 dışındaki işletim sistemlerinde sorun çıkartmaz.

http://www.cncdesigner.com/wordpress/wp-content/uploads/Robot.zip

Bu yarışma için motordu, redüktördü, robot şasesiydi, motor sürücüydü hiç bir şeye ihtiyacınız yok. Bedava bir robot.
Yarışmaya katılmak için sadece MyAlgo.Dll dosyası hazırlamanız gerekiyor.

MyAlgo.Dll nedir?

Hani robot mekaniğini yaptıktan sonra Pic vs MCU üzerine sensörden gelen bilgilere göre motorları döndüren bir program yazıyorsunuz ya. İşte o programı VB, C, C++, C#, Delphi vs dillerden dilediğiniz birisi ile yazıp fonksiyon adına Algo1 diyecek ve bu fonksiyonu MyAlgo.dll olarak kaydedeceksiniz.
(Algo1, Algo2....Algo7 olmak üzere 7 fonksiyonu myAlgo.Dll içine yerleştireceksiniz.)

Yarışmaya katılanların hepsinde aynı robot olmasına rağmen kontrol algoritması size özel olmuş oluyor.

Sonuçta yarışmacılardan birisi en büyük rekoru elde edecek.

Algo fonksiyonu nasıl bir şey derseniz aşağıda Delphi için deneme amaçlı yazdığım bir örnek var.

library MyAlgo;

uses
  SysUtils,
  Classes;


{$R *.res}

{    Robotun onunde soldan saga dogru 16 adet sensor dizilidir.
     En soldaki sensor P[0], en sagdaki sensor P[15] icindedir.
     Sol motora uygulayacaginiz voltaji P[16] icine yaziniz
     Sag motora uygulayacaginiz voltaji P[17] icine yaziniz
     Motor voltaji -127 ... + 127 araligindadir.
}

function Algo1(P: PIntegerArray):boolean; Stdcall;
var SL,SR, Error:integer;
begin

       SL:=P[0]*128;
       SL:=SL+P[1]*64;
       SL:=SL+P[2]*32;
       SL:=SL+P[3]*16;
       SL:=SL+P[4]*8;
       SL:=SL+P[5]*4;
       SL:=SL+P[6]*2;
       SL:=SL+P[7];

       SR:=   P[8];
       SR:=SR+P[9]*2;
       SR:=SR+P[10]*4;
       SR:=SR+P[11]*8;
       SR:=SR+P[12]*16;
       SR:=SR+P[13]*32;
       SR:=SR+P[14]*64;
       SR:=SR+P[15]*128;

       Error:=(SL-SR);

       if Error>0 then
          begin
             P[16]:=0;
             P[17]:=127;
          end;

       if Error<0 then
          begin
             P[16]:=127;
             P[17]:=0;
          end;

       if Error=0 then
          begin
             if (SL<>0) or (SR<>0) then
                begin
                  P[16]:=127;
                  P[17]:=127;
                end;
          end;
       Result:=true;
end;


exports  Algo1;

begin

end.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

z

Yeni özellikler

Yarışma esnasında algoritmanızın motorlara uyguladığı voltajlar (Pwm değerleri) sonuclar.txt dosyasına yazılıyor.

Döngü süreniz scorboardda ilan edilen döngü süresinden daha kısa çıktı ise bu durumda rekor kırdınız demektir.

Sonuclar dosyanızın adını Rekor.txt olarak değiştirip internette bir yere yükleyip linkini buraya yazın.
(Rekor dosyasındaki rekoru geçerseniz program size yardımcı olur.)

Böylece artık geçmemiz gereken rekor sizin rekorunuz olacaktır.

Bizler sizin robotunuzu izlemek için verdiğiniz linkten Rekor.txt dosyasını indirip Robot programının bulunduğu klasöre kopyalayacağız.

Programda Izle butonuna bastığımızda sizin robotunuzu izliyor olacağız.

Hep aynı robot ve pistde mi yarışacağız?

Hayır. Robotun ölçüleri (teker çapı, tekerler arası mesafe, sensörün tekerlerden uzaklığı) ve dinamiği (sürtünmesi ve kütlesi) belirlenebiliyor. Daha farklı pistler belirlenebiliyor.  Farklı bir yarışma için küçük bir Robot dosyası vereceğim.

Bir iki versiyondan sonra program iyice oturmuş olacak. Boreas'ın yazacağı eklenti ile programın görselliği çok artacak.

Rekor kırarsam MyAlgo.Dll Dosyamı gönderecekmiyim?

Hayır. Bizlere dll dosyasını ya da algorirmanızın içeriğini göndermeniz gerekmiyor. Bu sizin sırrınız olacak.

Mevcut Rekor 1657 dongu ile demo programa aittir.

Buradaki döngü değerinin anlamı nedir?


Demo algoritması bu pisti bitirmek için 1657 kez çalışmak zorunda kalmış demektir.

Pist.Bmp dosyasını değiştirebilirmiyim?

Verdiğim pist.bmp dosyasındaki renklere sadık kalarak kendinize farklı pistler tasarlayabilirsiniz. Ancak kendi pistinizde elde edeceğiniz döngü süresi biz yarışmacılar için bir şey ifade etmeyecektir.  Fakat  bir başka başlık altında hazırlamış olduğunuz pist için yeni yarışlar düzenleyebilirsiniz.



mesaj birleştirme:: 11 Ekim 2015, 05:07:03

Örnek verdiğim MyAlgo.dll kötü bir algoritma barındırıyor.

Yazacağınız bir algoritma ile 1657 rekorunu kesinlikle geçebilirsiniz.

Diğer diller için de örnek olması açısından basit de olsa bir MyAlgo.Dll yazıp yayınlamanızı isterim.

VB, C ve C# örnekleri iyi olur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

engerex

 Bir ara kafa yoracağım bu işe.


WinXP ile çalıştı Win10 ile çalışmadı.

ozanselte

Peki biz linux kullananlar nasıl katılacağız :D WINE kullanmak istemeyenler olarak

engerex

Yarış esnasında resette sayaç resetlenmiyor.

boreas

Program otursun  o zaman Lazarus'da linux içinde denenir. Ama içimden bir ses bu işin robot simülasyonuna kadar gidebileceğini söylüyor :)

ozanselte

C ya da c# için örnek olsa daha rahat olacak

ByTEK

Hocam Merhaba

bir dahaki versiyonda programda bir bölüm yapsanız ve dll yazmak yerine runtime esnasında kod yazılsa ve kod çalıştırılsa ?

pascal script için bileşenler vardı diğer diller içinde vardır diye düşünüyorum ?

http://www.pp4s.co.uk/static/pp4s/images/tut-trans/PascalScript1.jpg

z

Bayağı yetenekli olması ve yük getirmemesi gerekir.

Örnek algoritma mantıksal kontrol yapıyor. Öyle algoritmalar yarışacakki safi matematik olacak. script bunların üstesinden gelebilirmi?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

ByTEK

yetenekli bir bileşen bulmak gerek. neyse delphi yüklü değil lazarus ile deneme yapayım dedim örnek kodlarınızı dll oluşturmak için hazırladım fakat aşağıdaki gibi sıkıntı ile karşılaştım.



nasıl aşabilirim bilemedim açıkçası

z

Pointer ile ulaşmayı dene.

Delphi için konuşursak;

Run parametresine, dll'i koşturacak exenin adını verirseniz dll'inizi delphi içinden adım adım koşturabilir debug edebilirsiniz.

Muhtemelen diğer dillerde bu şekilde davranıyordur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

boreas

Proje\Proje Seçenekleri\ Compiler Options\Parsing -- > Delphi (-Mdelphi) seçip onaylarsan sorun çıkmayacaktır.

engerex

Alıntı yapılan: SercanTEK - 11 Ekim 2015, 19:05:24
Hocam Merhaba

bir dahaki versiyonda programda bir bölüm yapsanız ve dll yazmak yerine runtime esnasında kod yazılsa ve kod çalıştırılsa ?

pascal script için bileşenler vardı diğer diller içinde vardır diye düşünüyorum ?

http://www.pp4s.co.uk/static/pp4s/images/tut-trans/PascalScript1.jpg

Benim bu proje için düşündüğüm olaylardan biri bu. Gayet başarılı olur.

ByTEK

Alıntı yapılan: boreas - 11 Ekim 2015, 20:15:53
Proje\Proje Seçenekleri\ Compiler Options\Parsing -- > Delphi (-Mdelphi) seçip onaylarsan sorun çıkmayacaktır.

hocam denedim ama olmadı.

P[16] ya değer aktarırken şuan sadece bu hatayı alıyorum.

MyAlgo.lpr(23,16) Error: Incompatible types: got "TByteArray" expected "LongInt"

boreas

Öncelikle yukarıdaki kodu direk derleyip sorun olmadığını göre ondan sonra kendi kodunu geliştir derim. Şuanda ki hatan anladığım kadarıyla p16'a attığın değerle ilgili