Picproje Elektronik Sitesi

ENDÜSTRiYEL OTOMASYON => Robotik Sistem Tasarımı => Konuyu başlatan: z - 11 Ekim 2015, 02:55:17

Başlık: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 02:55:17
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 (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.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 05:12:20
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.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: engerex - 11 Ekim 2015, 12:41:53
 Bir ara kafa yoracağım bu işe.


WinXP ile çalıştı Win10 ile çalışmadı.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ozanselte - 11 Ekim 2015, 14:00:16
Peki biz linux kullananlar nasıl katılacağız :D WINE kullanmak istemeyenler olarak
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: engerex - 11 Ekim 2015, 16:26:09
Yarış esnasında resette sayaç resetlenmiyor.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: boreas - 11 Ekim 2015, 17:40:21
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 :)
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ozanselte - 11 Ekim 2015, 17:56:32
C ya da c# için örnek olsa daha rahat olacak
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 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 (http://www.pp4s.co.uk/static/pp4s/images/tut-trans/PascalScript1.jpg)
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 19:51:10
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?
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 19:58:15
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.

(http://i.hizliresim.com/68Z0zP.jpg) (http://hizliresim.com/68Z0zP)

nasıl aşabilirim bilemedim açıkçası
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 20:06:21
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.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: boreas - 11 Ekim 2015, 20:15:53
Proje\Proje Seçenekleri\ Compiler Options\Parsing -- > Delphi (-Mdelphi) seçip onaylarsan sorun çıkmayacaktır.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: engerex - 11 Ekim 2015, 20:18:45
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 (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.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 20:22:50
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"
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: boreas - 11 Ekim 2015, 20:29:21
Ö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
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 20:32:44
hocam kod aynı kod değiştirmedim.

http://dosya.co/lw08khp79cfc/robot_dll_uyuygulama.rar.html (http://dosya.co/lw08khp79cfc/robot_dll_uyuygulama.rar.html)


buyrun birde siz deneyin hocam.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: boreas - 11 Ekim 2015, 20:48:59
{$mode objfpc}{$H+}

{$IFDEF WINDOWS}{$R MyAlgo.rc}{$ENDIF}

satırlarını silersen derleyecektir.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 20:51:12
Alıntı yapılan: boreas - 11 Ekim 2015, 20:48:59
{$mode objfpc}{$H+}

{$IFDEF WINDOWS}{$R MyAlgo.rc}{$ENDIF}

satırlarını silersen derleyecektir.

lazarusa yeni başladım sayılır. teşekkür ederim.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: boreas - 11 Ekim 2015, 20:52:02
Lazarus candır :)
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 20:53:20
Alıntı yapılan: boreas - 11 Ekim 2015, 20:52:02
Lazarus candır :)

bazı uygulamalar geliştirmiştim. güzel birşey. alışınca rahat oluyor.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 21:00:59
@SercanTEK

Dosyada  Artemis!CD35524AD8AE  diye bir virüs var.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 21:02:59
Alıntı yapılan: z - 11 Ekim 2015, 21:00:59
@SercanTEK

Dosyada  Artemis!CD35524AD8AE  diye bir virüs var.

eset nod32 kullanıyorum birşey söylemedi ? yüklediğim yerde sıkıntı olabilir mi ?

https://www.virustotal.com/tr/file/23a75417477b07d5a1046c542a99e7b2b0a7c5cb5d425b65fdeeff2d15c468e2/analysis/1444586710/ (https://www.virustotal.com/tr/file/23a75417477b07d5a1046c542a99e7b2b0a7c5cb5d425b65fdeeff2d15c468e2/analysis/1444586710/)
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: engerex - 11 Ekim 2015, 21:14:24
Alıntı yapılan: z - 11 Ekim 2015, 21:00:59
@SercanTEK

Dosyada  Artemis!CD35524AD8AE  diye bir virüs var.
RAR dosyasında mı virüs var?
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 21:15:17
Simülatörün döngüsü aşağıda.

VL sol motora uygulanan voltaj (Pwm)
VR sağ motora uygulanan voltaj (Pwm)

Motor(); Elektrik motorlarını, robot mekaniğini ve sensörleri simüle eden fonksiyon
Algo();   Sizin yazdığınız kontrol algoritması
Grafik(); Robotun  konumu ekrana çizen fonksiyon


       VL:=0; VR:=0; T:=0; n:=0; Bitir:=False; Faul:=False;
Dongu:
       Motor(); n:=n+1;                // Robotun fizik motorunu isletelim
       Algo(Addr(Sensor));             // Sizin kontrol algoritmaniz
       Grafik();                       // Robotun ekrandaki pozisyonu degistir

       VL:=Sensor[16];
       VR:=Sensor[17];

       if Bitir then Goto Bitti;       // Sensorlerden herhangi birisi Kirmisi bolgeyi yakalarsa yaris tamamlanir
       if Faul then  Goto Kaybettiniz; // Sensorlerden herhangi birisi Yesil bolgeyi yakalarsa yarisi kaybedersiniz

       Dongu_.Caption:='Dongu '+IntToStr(T);

       if n=10 then begin n:=0; Application.ProcessMessages; end;
       if Cik then exit;
       goto Dongu;
Bitti:




Evet RAR dosyasını indiriyorum virüs tarayıcı uyarıyı veriyor. Daha içine bile bakamadım.

Simülatöre 3 özellik daha ekledim.

Kaygan zemin  Robot sensörleri gri lekeli alanları sens ederse belli bir mantıkla tekerleri kaydırıyor ve robot savruluyor.

Gitmesi zor zemin Robot sensörleri kahverengi alanları sens ederse belli bir mantıkla tekerler yavaşlıyor ve robot savruluyor.

Yasak Zemin Robot sensörleri yeşil alanları sens ederse yarışı kaybediyorsunuz.

Sensörlerin sol yanı ve sağ yanı pistin kaygan vs kısmını algıladığında sistem buna ilk tepkiyi veriyor. Kontrol algoritmanız buna tepki veremez.

Algoritmamız neden tepki veremez?

Sensor sinyalleri bize 1 yada 0 olarak geliyor.

Siyah zemin 1 üretirken diğer tüm renkler 0 üretiyor. Dolayısı ile zemin kayganlığı ile bilgiye hiç birimiz sahip değiliz.

Aşağıdaki pistte kahverengi alan henüz yok.

(http://i.hizliresim.com/YJvXmA.jpg) (http://hizliresim.com/YJvXmA)

Simülatörün son halini yüklemedim.

Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: engerex - 11 Ekim 2015, 21:23:37
 Sanırım sponsor download linklerine tıklıyorsunuz. Çünkü dosyada sadece sizin robot.exe var. Diğerleri kod dosyaları. Gerçek link en aşağıda ufacık.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 21:29:33
(http://i.hizliresim.com/jj4lvJ.jpg) (http://hizliresim.com/jj4lvJ)

yazılım hatası var ? program çalışırken başla butonuna basınca döngü değeri sıfırlanıyor. böylece çok küçük çıkabiliyor.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 21:43:48
Retüşlerle düzeliyor o hatalar.

Bu arada robot çok yavaş vs demeyin. Farklı yarışlar için farklı robot parametreleri yükleniyor.

Öyle zor robotlar varki. Gaza basınca hemen hızlanmayan frene basınca hemen durmayan yada gaza basınca fırlayıp giden...

Şu anda orta karar bir robotla karşı karşıyayız.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 21:52:23
Motor voltaji -127 ... + 127 araligindadir.

demişsiniz. sanki 0 ile 127 arasında gibi geldi bana?
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 22:18:28
Haklısın.

DLL fonksiyon başlığını şu şekilde yapmamız gerekiyor. function Algo(P: PIntegerArray):boolean; Stdcall;

Simülatörde de düzeltiyorum.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ozanselte - 11 Ekim 2015, 22:25:14
Diğer diller için örnek kod ya da simülatörün linux sürümü paylaşılacak mı?
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 22:35:20
Arkadaşlardan örnek dll göndermelerini istedik ilgilenen çıkar herhalde.

Linüx türevi şimdilik yok.

Bu arada ilk verdiğim linkten güncel simülatörü indirebilirsiniz. (http://www.cncdesigner.com/wordpress/wp-content/uploads/Robot.zip (http://www.cncdesigner.com/wordpress/wp-content/uploads/Robot.zip))
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ByTEK - 11 Ekim 2015, 22:53:52
hocam ilk mesajdaki örnek kodu derleyince yeni versiyonda çalışmadı ? acaba neyi değiştirdiniz ?
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 11 Ekim 2015, 23:00:07
Şu negatif motor voltajı meselesinden dolayı. PbyteArray yerine PIntegerArray yazdım.

Bir de sensör her bir renkten etkilenirken eskiden  (Renk AND 1) XOR 1 işlemi yapıyordu ve bu siyah harici çift sayılı değere sahip renklerde de çizgi varmış gibi davranabilirdi.

Şimdi değişti.   If renk=Siyah then Sensor=1 else Sensor=0; şeklinde bir algoritma kullanıyor. (16 sensör için ayrı ayrı)


Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: exjra - 12 Ekim 2015, 11:21:19
Merhabalar, çok eğlenceli ve eğitici bir proje. Geliştirme size ait sanırım z. Projenin linux versiyonu için geliştirici desteği sağlayabilirim.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 13 Ekim 2015, 17:37:20
Yeni robot programı daha derli toplu oldu.

Artık hata dışında kurcalamak istemiyorum. Programa entegre edilmiş 9 pistten  bazıları piste özel algoritma yazımı gerektiriyor.

Acemi 1 pistinde yarışma başlamıştır. Öncelikle son versiyonu indirmek gerekiyor.



Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: ozanselte - 13 Ekim 2015, 20:12:22
Böyle dll şeklinde değil de mesela bir terminal üzerinde çalışan bir program yazsak. Yarışma programı o programa stdio ile veri gönderip alsa daha kolay olmaz mı? Örnek kod vs uğraşmayız hiç. Linux desteği de kolay olur.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: bbs2006 - 13 Ekim 2015, 20:13:31
merhaba
Bu  yarışmayla ilgili değil ama çizgi izleyen robotta qtr-8a sensörünün olasılıkları hakkına yardımcı olabilirseniz sevinirim.
8 sensörlü kitte olabilecek kombinasyonlar hakkında  yararlanabilecgim bir site var mı?.
Örnek.
beyaz zemin   üzerine siyah çizgi için


00000001 karşılıklarını nasıl buluyoruz. bunun değerini 10 kabul edilebilir mi.
00000011    20
00000010    30
00000110    40
00000100    50
00001100    60
00001000    70
00011000    80
00010000   -10
00110000   -20     
00100000   -30
01100000   -40
01000000   -50
11000000   -60
10000000   -70
00000000   -80

bu şekilde kullanılabilir mi. kombinasyonlar. 90 derece köşelerde sol dönüş için sol 6 sensör siyah geldiği zaman ki kombinasyonda yani 11111000 konum değerine  ne değeri atamamız gerekiyor. (aynı şekilde  saga 90 derce dönüş için) veya üç sensör veya 4 sensör  beraber gördüğü zaman ne değeri atamamız gerekiyor. bu konuda ne yapabilirim. öneriniz nedir. 
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 14 Ekim 2015, 03:40:31
dll olmasaydı iyi olurdu eleştirilerine katılıyorum fakat Oynamayı bilmeyen gelin yerim dar dermiş sözünü de hatırlatmak isterim.

Gerçek robotla algoritma testi yapacak olsanız yapmanız gereken işlemler.

1 ) Bataryayı şarj et.
2 ) Büyükçe pist alanı hazırla.
3 ) Pistte çizgi çiz
4 ) İşlemcinin IDE'sine gir
5 ) Algoritmayı yaz
6 ) Derle
7 ) Kodları çipe yükle
8 ) Yarışa başla
9 ) sorun olursa robot peşinde koştur robotu yakala piste koy.

Şimdi soruyorum bu mu kolay yoksa

1 ) Kullandığınız visual dile ait IDE'yi çalıştır.
2 ) Algoritmayı yaz
3 ) Derle
4 ) Yarışa başla

mi kolay?

Yerim dar diyenler için dar alanda oynama yöntemleri

https://www.youtube.com/watch?v=V4fw-0DbWdM (https://www.youtube.com/watch?v=V4fw-0DbWdM)
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: vsalma - 14 Ekim 2015, 11:44:29
Elinize saglik. Ben de linux kullaniyorum ama son mesajinizdan sonra sanal makina windows kurup deneyecegim.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 14 Ekim 2015, 15:52:35
Çizgi izleyen yarışmacıları, sensör bilgilerini array içinde değilde porttan bir çırpıda okunuyormuş gibi  olmasını talep ettiler.

Bu yüzden bu kısım haliyle de örnek algoritma değiştirildi.

Robotların teker çapları, robot boyları ve redüktörleri de aynı yapıldı.

Robotların dinamiklerindeki farklar robotun davranışını belirliyor. Bu da kimi robotun kontrolunu oldukça zorlaştırıyor.

İddialı olmayan iki rekor denemesi: http://www.cncdesigner.com/wordpress/wp-content/uploads/Rekorlar.zip (http://www.cncdesigner.com/wordpress/wp-content/uploads/Rekorlar.zip)
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: vsalma - 15 Ekim 2015, 11:50:34
Selamlar. Delphi haricinde bir dilde(tercihen c) dll i basarili uretip calistirabilen oldu mu? Linux altinda mingw ile windows icin c kodunu cross compile ederek dll yapmayi denedim. Wine programla sunulan dll i calsitiriyor ama benim urettigim dll i koydugumda exe acilmiyor.   Windows altinda borland c compiler in (delphi ile uyumlu olmasi acisindan) urettigi dll icin uygulama "Algo7 yordamina ulasilamiyor"  mesaji veriyor.  Kisacasi calisitirmayi beceremedim. Ayni vc compilerin farkli versiyonlarinda bile uyumsuzluk oluyor. Mesela bir kutuphaneyi vc 8 ile derleyip dll leri urettiniz. Bu dll leri vc10 ile yazdigininz program icinden cagirmak bile sikinti olabiliyor. Tabi uzun uzun buna ugrasilsa arastirilsa bir cozumu vardir belki ama bence program tcp/ip den mesaj dinlese gonderse veya bir arkadasin dedigi gibi stdio dan okuyup yazsa bence platform ve dil bagimsizligi saglanir. Yarismaya su anki haliyle katilamiyorum. Bastan elendim.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 15 Ekim 2015, 12:22:18
Bu proje'de gördümki çizgi izleyende  olay çizgi sensörün solunda ise şunu yap sağında ise şunu yapın çok ötesinde.

Bu mantıkla ancak ve ancak belli şekillerdeki yollar takip edilebilir.

Çok az sayıda sensörle her türlü pistte bitiş noktasına ulaşacak robotun ilerlerken sensör bilgilerini de saklaması ve herhangi bir ikilemde geçmiş bilgilerle bir sonuca ulaşması gerekebiliyor.

İşin içine dinamizm de girince işler çok karmaşıklaşıyor. Siz motorların enerjisini kesseniz bile  robot kütlesinden dolayı bir miktar daha ilerliyor.

Algoritma yazmayı deneyin. Çok da kolay olmadığını göreceksiniz.

@vsalma delphide yazdığım dll'i delphiden de kullanamamıştım Sonradan farkettim ki stdcall ibaresini yazmamışım.

Kesinlikle pes etme.

Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: exjra - 15 Ekim 2015, 23:03:15
Basit bir algoritma ile Qt Framework, C++ ile yazılmış dll örneğim. Umarım faydalı olur.

http://dosya.co/0oar1nw692c1/MyAlgo.zip.html (http://dosya.co/0oar1nw692c1/MyAlgo.zip.html)
http://dosya.co/32ep6yb2stng/MyAlgo-kod.zip.html (http://dosya.co/32ep6yb2stng/MyAlgo-kod.zip.html)
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: bluekid - 16 Ekim 2015, 14:08:13
C++ örneği için bir şey sormak istiyorum @exjra

1)

function Algo(P: PIntegerArray):boolean; Stdcall;

dan

bool Algo1(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)


buna nasıl ulaştınız anlamadım.

2) yolladığınız dll de bir başka dll istiyor eksik olduğundan deneyemedim

Similatör içinde bir  sorum var  @z

Eğer sağlıklı bir algoritma için tek başına sensör bilgisi yetersiz değilmi ?
mesela konum bilgiside lazım değilmi
bu sayede motorlara verdiğimiz voltaj bilgisi ile hangi robot ne şekilde hereket ediyor tespit edip ona göre yönetmek gerekmezmi ?



Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 16 Ekim 2015, 15:55:57
Çizgi, sensor dışına çıktığında yani artık sensörler artık hiç çizgi görmüyorsa bu durumda geçmişe yönelik sensör bilgilerinden gidilmesi gereken yön tesbit edilebilir.

Konum bilgisi ne işe yarayacak? Harita hafızada olsaydı işe yarardı ama hafızada harita yok. Daha doğrusu DLL fonksiyon haritaya sahip değil.

Algoritmalarının açık kaynak kodlarını yayınlayan arkadaşlar buraya eklerse çok iyi olur.  Exjra açık kaynak yazmış. Algoritması aşağıda.



// exjra

#include "myalgo.h"

bool Algo1(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)
{
    SonHata = HataHesapla(S);

    if(SonHata <= -1)
    {
        *VR = 50 + 10 * abs(SonHata);
        *VL = 50 - 10 * abs(SonHata);
    }
    else if(SonHata >= 1)
    {
        *VR = 50 - 10 * abs(SonHata);
        *VL = 50 + 10 * abs(SonHata);
    }
    else
    {
        *VR = 50;
        *VL = 50;
    }

    if(*VR > 127)
        *VR = 127;
    else if(*VR < 0)
        *VR = 0;

    if(*VL > 127)
        *VL = 127;
    else if(*VL < 0)
        *VL = 0;

    return true;
}

bool Algo2(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)
{
    return Algo1(S, L, R, VL, VR);
}

bool Algo3(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)
{
    return Algo1(S, L, R, VL, VR);
}

bool Algo4(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)
{
    return Algo1(S, L, R, VL, VR);
}

bool Algo5(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)
{
    return Algo1(S, L, R, VL, VR);
}

bool Algo6(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)
{
    return Algo1(S, L, R, VL, VR);
}

bool Algo7(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)
{
    return Algo1(S, L, R, VL, VR);
}

float HataHesapla(unsigned short okunandata)
{
    //sadece tek cizgi varmis gibi hesaplanir
    int baslangic = 0;
    int bitis = 0;

    bool cizgiUzerinde = false;

    bool sens[15];

    float ortaNokta = 0.0f;
    float Hata = 0.0f;

    for(int t = 0; t<15; t++)
        sens[t] = (okunandata & (1 << t)) > 0 ? true : false;

    if(okunandata != 0)
    {
        for(int t = 0; t<15; t++)
        {
            if(sens[t])
            {
                if(!cizgiUzerinde)
                {
                    baslangic = t;

                    cizgiUzerinde = true;
                }
            }
            else
            {
                if(cizgiUzerinde || t == 14)
                {
                    bitis = t;

                    cizgiUzerinde = false;

                    break; //bir cizgi bulursa aramayi bitirir
                }
            }
        }

        if(cizgiUzerinde)
        {
            bitis = 14;
        }

        ortaNokta = baslangic + (bitis - baslangic) * 0.5f;

        Hata = 7.0f - ortaNokta;
    }
    else
        Hata = SonHata;

    return Hata;
}

#ifndef MYALGO_H
#define MYALGO_H

#include <math.h>

extern "C" __declspec(dllexport) bool Algo1(unsigned short S, unsigned short L, unsigned short R,  char* VL, char* VR);
extern "C" __declspec(dllexport) bool Algo2(unsigned short S, unsigned short L, unsigned short R,  char* VL, char* VR);
extern "C" __declspec(dllexport) bool Algo3(unsigned short S, unsigned short L, unsigned short R,  char* VL, char* VR);
extern "C" __declspec(dllexport) bool Algo4(unsigned short S, unsigned short L, unsigned short R,  char* VL, char* VR);
extern "C" __declspec(dllexport) bool Algo5(unsigned short S, unsigned short L, unsigned short R,  char* VL, char* VR);
extern "C" __declspec(dllexport) bool Algo6(unsigned short S, unsigned short L, unsigned short R,  char* VL, char* VR);
extern "C" __declspec(dllexport) bool Algo7(unsigned short S, unsigned short L, unsigned short R,  char* VL, char* VR);

float HataHesapla(unsigned short okunandata);

static float SonHata = 0.0f;

#endif // MYALGO_H



Alıntı yapılan: bluekid - 16 Ekim 2015, 14:08:13
C++ örneği için bir şey sormak istiyorum @exjra

1)

function Algo(P: PIntegerArray):boolean; Stdcall;

dan

bool Algo1(unsigned short S, unsigned short L, unsigned short R, char* VL, char* VR)


buna nasıl ulaştınız anlamadım.

Simülatörün ilk versiyonunda fonksiyon   function Algo(P: PIntegerArray):boolean; Stdcall    böyle idi.

Sonra değiştirildi. Simülatörün yeni versiyonunda help menüsü var. Orda açıklamalar mevcut.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 17 Ekim 2015, 06:53:35
https://www.youtube.com/watch?v=YwIWV1wti-Y&feature=youtu.be&t=103 (https://www.youtube.com/watch?v=YwIWV1wti-Y&feature=youtu.be&t=103)

V1.4 çıktı. Test sürüşünde saniyedeki frame sayısı düşürüldü ve robotun pisti daha kısa izlenme süresinde  bitirmesi sağlandı.
Bu robotun hızlandığı anlamına gelmiyor. Gene fizik denklemleri zamanda ardışıl işliyor. Sadece ekranda gösterilen kareler aralardan seyrek şekilde seçiliyor.
Buna karşılık Yarış ve Rakip İzleme modunda frame sayısı yüksek. Bu da robotun sanki yavaş ilerlediği izlenimini veriyor fakat çok daha fazla detay görebiliyorsunuz.

Robot menüsüne bir de sensörleri tekerleklerle aynı hizada olan yeni bir robot eklendi. Kontrol etmesi oldukça zor bir robot.

Daha önce yazdığınız fonksiyonlara bir de Init değişkeni eklemeniz gerekiyor.

Init=1 olarak geldiyse

Herhangi bir hesap yapmayıp sadece değişkenlerinize ilk değer yüklemelisiniz. İstemiyorsanız kullanmayabilirsiniz. Bu özellikle PID algoritması gibi geçmişe yönelik bilgileri depolayan integratörleri sıfırlamak için eklenmiştir.

-----------------

Çizgi sağda kaldıysa sol motoru hızlandır sağ motoru yavaşlat mantığı için motorlara uygulanacak voltajları önceden belirlemek algoritmanın sadece tasarlandığı pistte verimli olmasına neden oluyor.

En azından Acemi1, Acemi2 ve Acemi3 pistlerinin üçünde de başarılı olacak algoritma çalışması yapan ya da PID denemesi yapan varmı?
V1.4 de Algo2 PD algoritmasıdır.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: exjra - 19 Ekim 2015, 00:03:25
@bluekid sorunuzu z cevaplamis sanirim yeterlidir. Bagimli oldugu dll icin haklisiniz benim sistemimde Qt yuklu oldugu icin gozumden kacmis. Su an pc yakininda değilim ancak yanlis hatirlamiyorsam Qt 5.5 qtcore dll dosyasini istiyor olmasi lazim. Ayni dizine koyarsaniz sorunsuz calisacaktir.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: bluekid - 20 Ekim 2015, 09:08:30
@exjra
evet cevabımı aldım Algo fonksiyonunun kullanımı değişmiş
hatta siz yazdıktan sonra yine değişmiş

İstenen dll Qt değil mingw dll 'i  - bu dll için statik  olarak derleyebilirseniz ihtiyaç duymayacaktır. -

burdada benim çalışmamı görebilirsiniz.

http://derindelimavi.blogspot.com.tr/2015/10/dll-cehennemi.html (http://derindelimavi.blogspot.com.tr/2015/10/dll-cehennemi.html)

Algoritma olarak pek bir iddiam yok
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 20 Ekim 2015, 20:40:01
Eline sağlık.

Yazmış olduğun Dll'i henüz denemedim.
Robot menüsünde en alt sıradaki robota çizgiyi takip ettirebildin mi?
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: bluekid - 21 Ekim 2015, 16:46:55
algoritma olarak iddiam yok dedim
zaten çoğu boş sayılır
4 numaralı algoritmayı deneyin
bahsettiğiniz robot için  hızı azalttığımda çalışıyor.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: smacker - 22 Nisan 2016, 15:09:40
Araçların matematiksel modelleri ile ilgili de biraz bilgi edinsek güzel olabilir.

C++ derleme için CMakeFile şu şekilde kullanabilirsiniz.
cmake_minimum_required(VERSION 3.5)
project(MyAlgo)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(CMAKE_SHARED_LIBRARY_PREFIX "")

set(SOURCE_FILES MyAlgo.cpp MyAlgo.h)
add_library(MyAlgo SHARED ${SOURCE_FILES})
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: z - 22 Nisan 2016, 17:34:10
İlk fırsatta kullandığım modelleri yayınlayayım.
Başlık: Ynt: Çizgi izleyen sanal robot yarışması başladı.
Gönderen: smacker - 17 Aralık 2016, 18:59:29
Simülatörde gelişme var mı?
1.4'ten sonra sanki bir versiyon daha çıkmıştı fakat onu tekrar bulamıyorum.
Yanılıyor muyum?
http://www.cncdesigner.com'da bundan fazla bahsetmemişsiniz.