Robotikte gerçek zamanlı programlama ne kadar olgun? [kapalı]


20

Edit: Neden bilmiyorum, ama bu soru birçok insanı kafa karıştırıcı gibi görünüyor. Gerçek zamanlı ne zaman / nerede / neden / nasıl kullanılacağının farkındayım. Gerçek zamanlı bir görevi olan insanların aslında gerçek zamanlı olarak uygulamak için yeterince umursamayacaklarını bilmekle ilgileniyorum.

Bir robot için gerçek zamanlı işlemlerin neden önemli olduğunu belirtmeye gerek yoktur. Benim sorum şu ki, robotikte gerçekte ne kadar kullanılıyor?

Örneğin bu soruyu ele alalım. Sadece bir cevap, gerçek zamanlı yeteneklere sahip herhangi bir platformdan bahseder ve üst kısımdan da uzaktır. Görünüşe göre ROS, gerçek zamanlı olmayan çok popüler bir platform.

Bununla birlikte, gerçek zamanlı dünyada, RTAI 1 , uygulanabilir tek ücretsiz gerçek zamanlı kullanım platformu gibi görünüyor . Bununla birlikte, Linux ile sınırlıdır (sorun yok), kötü belgelenmiş ve yavaşça gelişmiştir.

Peki, robot geliştiricileri arasında gerçek zamanlı davranış ne kadar aranıyor?Soru, geliştiricilerin gerçek zamanlı davranışa gerçekten ihtiyaç duyulduğunda gerçek zamanlı uygulamalar yazmaya ne kadar eğilimlidir? Fazla değilse neden?

Örneğin, dokunsal verilere dayalı refleksif davranış, gerçek zamanlı mülkünü kaybedeceği için ROS'tan geçemez. Ancak insanlar gerçek zamanlı mülkü görmezden gelerek gerçekten gerçek zamanlı bir çözüm buluyor veya ROS kullanıyor mu?

1 veya benzeri Xenomai


1
Bence bu harika bir soru. Bunu ikiye bölmeyi ve ana sorunuzu netleştirmeyi düşünün. 'ROS gerçek zamanlı olarak kullanılabilir mi?' veya 'ROS gerçek zamanlı olarak mı kullanılıyor?' (2 farklı soru) ana sorunuzdan ayrıdır.
hauptmech

@hauptmech, iyi ROS kesinlikle gerçek zamanlı olarak kullanılamaz, çünkü değil!
Shahbaz

@Hauptmech ile aynı fikirdeyim. Sorular kafa karıştırıcı. Üstte, kaç kişi / ne sıklıkla gerçek zamanlı sistemlerin kullanıldığını ve daha sonra ne zaman / hangi durumda olduğunu sormanız isteniyor . Her ikisi de iyi sorular, bu yüzden lütfen ikiye bölün veya bire indirin. Teşekkürler!
bit korsan

@ bit-pirate, neden / ne zaman sorduğumu söylediğini anlamıyorum . Hiç böyle bir şey sormadım. Söylediğim gibi , soru, geliştiricilerin gerçek zamanlı davranışa gerçekten ihtiyaç duyulduğunda gerçek zamanlı uygulamalar yazmaya ne kadar eğilimlidir? Başka bir deyişle, uygulamaların yüzde kaçının yapmak ve gerçek zamanlı davranış gerektirir edilmektedir aslında gerçek zamanlı olarak uygulanan?Şahsen gerçek zamanlı davranışın ne zaman ve hangi durumda gerekli olduğunu biliyorum ve bu konuda kesinlikle hiçbir sorum yok. Aslında, cevaplar açıklayan görmek şaşırttı o .
Shahbaz

Açıklama için teşekkürler! Benim için başlık kafa karıştırıcıydı. IMO'nun gerçek zamanlı programlama + uygulaması Robotik'te olgunlaşmıştır, ancak daha fazla çaba gerektirir (zaman, para, beceri vb.), Bu yüzden çoğu insan gerçekten gerekli olmadığında bundan kaçınır.
bit korsan

Yanıtlar:


10

Bulunduğunu unutmayın Gerçek Zamanlı ve orada Gerçek Zamanlı .

Hard Real time'a donanım desteği veya düşük seviye yazılım desteği olmadan ulaşmak zordur, ancak Hard Real Time yeteneğine sahip olmak için her şeye ihtiyacınız yoktur . Yumuşak ve Sıkı Gerçek Zamanlı yanıt elde etmek çok daha kolaydır ve çoğu uygulama için genellikle yeterlidir.

Ayrıca, bir sistemin farklı bölümlerinin çok farklı gerçek zamanlı gereksinimleri olabilir. Yazılım PID döngüleri çalıştırıyorsanız, gerçekten zor bir gerçek zamanlı yanıta sahip olmalıdırlar (gerçekten PID'lerinizi yumuşak ayarlama veya sert ayarlama ve bazen kararsız olma arasında seçim yapmak istemezsiniz). Bir görme sistemi robotik sisteminizin bir parçasına sahip olabilir ) genellikle yumuşak gerçek zamanlı alanda sıkıca kalabilir . gerçek zamanlı tepki gereksinimleri olabilir, bir sonraki karar için görüntüyü zamanında işleyemezseniz performans düşecektir, ancak sistemin çalışmasını önlemesine gerek yoktur, bu durumda zamanında işleyemezseniz kısmi sonuçları atmak ve bir sonraki karede analize başlamadan zaman kaybetmemek daha iyidir. Sonunda genel planlama ve koordinasyonunuz (muhtemelen en karmaşık

Windows PC'lerde bile gerçek zamanlı zor performans elde edebilirsiniz , sadece çekirdeğe doğru kancalara sahip doğru yazılıma ihtiyacınız vardır. Beckhoff'un TwinCat yumuşak PLC'si, Pentium'un makine döngülerinin yarısını dilimleyerek ve diğer yarısını Windows NT'ye vererek yüksek bir tarama hızı PLC'sini mutlu bir şekilde çalıştırdı ve bu on yıldan uzun bir süre önceydi. Modern kontrol sistemleri bile bazı seçenekler gibiAerotech'in A3200 serisindeki ana bilgisayarda homurdanıyor, düşük seviyeli çekirdek zor gerçek zamanlı gereksinimler için ihtiyaç duyduğu kadar CPU zamanı alıyor ve Windows 7 için CPU döngülerinin geri kalanını bırakıyor kullanmak!


Buradaki ayrım oldukça ilgili ... "gerçek dünya" düşük seviyeli sistemlerde bile, gerçekten gerçek zamanlı bit oldukça küçüktür (bir zamanlayıcı kene kesintisine dayanarak), ancak sistemin çoğu nominal olarak gerçek zamanlıdır (+ / - Birkaç nano-saniye burada ve tolere edilebilir). İnsanların WindowsCE veya Linux üzerine kurulmuş gerçek zamanlı uygulamalar hakkında konuştuğunu gördüğümde gülümsüyorum ...
Andrew

1
Dediğim gibi @Andrew doğru yazılımla, Windows 7 bile bir RTX ile gerçek zamanlı olarak zor hale getirilebilir . Windows CE'yi neden gerçek zamanlı olarak görmediğinizden emin değilsiniz, sürüm 2 ve Linux RTLinux gibi bir çekirdekle gerçek zamanlı olarak yapılabildiğinden, gerçek zamanlı deterministik görev zamanlaması vardı .
Mark Booth

Merhaba tekrar Mark (Emin kim ... burada kim takip olduğunu değil) - Bunu hemfikir olabilir bunu ancak sert deneyimler göstermektedir ki, birçok durumda kullanıcılar (yöneticiler) gerekli eklentiyi ons görmezden ve farz (çoğu?) vanilya sistemi yapacak.
Andrew

@Andrew - RTX ile yaşadığım deneyim az önce işe yaramasıydı . Pentium'da 4 gün içinde, PCI veriyolunu doyuran entegre grafik veya ses kullanmamaya dikkat etmelisiniz, ancak bu günlerde bir sorun olmamalı.
Mark Booth

Uzun zaman oldu, ancak bu sayfayı tekrar okurken, özellikle pencerelerle ilgili olarak, bir sistemin gerçek zamanlı nasıl yapıldığının sadece bir kısmından bahsettiğinizi söylemek isterim. Gerçek zamanlı zamanlama elbette önemlidir, ancak bir sistemi gerçek zamanlı yapmak için ele alınması gereken sivri uçlar oluşturabilecek her türlü şey vardır. Kesmeler yaygın örnektir, SMI, önbellekler ve bellek bant genişliği diğer örneklerdir. Gerçek zamanlı bir zamanlayıcı olması bir sistemi gerçek zamanlı yapmaz.
Shahbaz

8

Birçok robotik kontrol sistemi için gerçek zamanlı bir sisteme gerek yoktur. Yeterince hızlı, yeterince düşük titreşimli çalışan ve çok fazla döngüyü kaçırmayan bir kontrol döngünüz olduğu sürece, bu robotik kontrol ve servo için oldukça yeterlidir.

Bunun kanıtı olarak, PR2'yi ve Gölge Robot Elini sunmama izin verin:

PR2

Bu robot yaklaşık 20 serbestlik derecesine sahiptir ve bunların tümü ROS'un ana döngüsü üzerinden sağlanır. Ya da 20 DOF'a, ayrıca bir dizi dokunsal ve diğer sensöre sahip olan ve aynı zamanda ROS'un ana döngüsü aracılığıyla da hizmet verilen Shadow Robot Hand'e ne dersiniz?

ROS ana döngüsü bazen 100us kadar küçük bir titremeden muzdariptir ve hatta bazen döngüleri tamamen özler. Ancak, döngülerin% 99,9'unun başarılı bir şekilde yürütülmesi önemli değildir.

Ana PC'lerde birçok çekirdeğin kullanılması, bir çekirdeğin ana döngüyü çalıştırmaya adanmış olduğu anlamına gelir ve bu nedenle diğer görevler tarafından nadiren gecikir.

Robotik bir sistem için gerçekten gerçek zamanlı bir işletim sistemi kullanmanın ana nedeni güvenlik içindir. Robot güvenlik açısından kritik bir durumda çalışıyorsa, o zaman% 100 kontrol süresini garanti etmek sizin sorumluluğunuzdadır ve bunun bir kısmı bunun gerçek zamanlı doğasını garanti etmektir.

Gerçek zamanlı bir işletim sistemi kullansanız da kullanmasanız da, kontrol döngüsünün tamamen ölmesi durumunda servonuz güvenli bir şey yapmalıdır. Bu güvenlik sistemi, gerçek zamanlı olmayan işletim sisteminizin bir döngüden daha fazla atladığı nadir durumlarda da yardımcı olacaktır. Örneğin, Gölge İbresinde, kontrol döngüsü 20 döngüden (20 ms) fazla kaçırırsa motorlar durdurulur. Ama bunun olduğunu hiç görmedim.


Katma

Bunu düşünmenin başka bir yolu şudur: Servo sisteminizin gerçekte hangi güncelleme hızına ihtiyacı var? Büyük bir kolsa ve süper yüksek performansa, yüksek hızlı konumlandırmaya ihtiyaç duymuyorsa, 500Hz yeterli olabilir. Etrafta dolaşmak için 200Hz muhtemelen yeterlidir. Bu iki durumda da, döngünüz gerçekten 1000Hz'de çalışıyorsa, kontrol algoritmanız döngüler arasında geçen gerçek süreyi hesaba kattığı sürece geç veya eksik bir döngü gerçekten hiç sorun değildir.


Kısacası, gerçek zamanlı olmayan yazılım "yeterince iyi" çalıştığı için gerçek zamanlı sıklıkla kullanılmadığını mı söylüyorsunuz?
Shahbaz

@Shahbaz - Tam olarak ne sıklıkla kullanıldığını yorumlayamıyorum, ancak kullanılıyorsa, gereksiz olabilir diyebilirim. Eskiden RTAI kullanırdık, sonra terk ettik, çünkü aslında yardım etmekten daha fazlasını engelliyordu.
Rocketmagnet

1
Bir noktayı vurgulamak istiyorum: PR2'de o kadar çok işlem gücünüz var ki, "yeterince iyi" bir şey elde edebilirsiniz. Bir Core2 Duo ile "sadece" bir robot üzerinde çalıştım. Bu bir seçenek değil: tüm yığın her çekirdeği çoğu zaman% 100 alıyor. Burada, 1kHz kontrol döngüsünü bir arada tutmak için Rock (Orocos) ve RT-Linux gerekiyordu.
sylvain.joyeux

@ sylvain.joyeux - Kabul ediyorum. ROS, sadece 2 çekirdeğiniz olduğunda kontrol için oldukça kötü performans gösterir.
Rocketmagnet

@Rocketmagnet Bunu küçümsemek zorunda olduğum için üzgünüm, ancak PR2 kısmı yanlış. PR2'de ROS'a (Linux + RT PREEMPT'de) paralel olarak 1000Hz'de çalışan, her bir DOF'un gerçek motor kontrolünü yapan motor kontrol kartlarıyla Ethercat aracılığıyla iletişim kuran tek bir gerçek zamanlı döngü vardır. Denetleyicileri (örn. Bir ortak yörünge denetleyicisi) programlarken gerçek zamanlı kırılmamaları için dikkatli olmanız ve ayrıca bunları yönetmek için özel araçlara sahip olmaları gerekir (örn. Yükleme / boşaltma). Bakın burada daha fazla ayrıntı için.
bit korsan

4

Yazılımın amacı, kesinlikle gerçek zamanlı olması gerekip gerekmediğini belirler.

Amaç yol planlama veya yerelleştirme olduğunda, örneğin 10Hz gibi genellikle düşük bir frekans yeterlidir. Bu gibi durumlarda, Linux üzerinde çalışan bir oynatıcı / sahne kurulumu iyidir. Bir seferlik adım biraz daha uzun veya daha kısa ise çok az sorun olduğunu görebiliriz.

Robot dinamiği hızlıysa kesinlikle gerçek zamanlı davranış gerekir. Örneğin, bir pozisyonu takip etmek veya nesneleri tutmak / tutmak ve hareket ettirmek için robotik bir kolu hareket ettirmek. Bir zaman adımı kaçırılırsa, konum istenmeyen bir şekilde aşabilir ve daha öngörülebilir davranışlar isteyebiliriz. Bu durumda, 1kHz veya daha yüksek bir frekansa sahip olabiliriz. Bir işletim sistemi kullanılıyorsa, gerçek zamanlı bir işletim sistemi istiyoruz.

Gerçek zamanlı davranış, zamanlayıcılar ve kesmeler (mikrodenetleyici üzerinde derlenmiş C kodu) kullanılarak gömülü uygulamalarda gerçekleştirilebilir. Bu durumda, düzenli bir örnekleme frekansının korunabilmesi için işlem yükünün çok yüksek olmadığından emin olmalıyız.

Bilgisayarları / mikroişlemcileri kullanan robotlar (daha fazla işlem gücü gerektiğinden), yüksek örnekleme oranlarını garanti etmek için gerçek zamanlı bir işletim sistemi kullanmaları gerekecektir.


Bu nedenle, gerçek zamanlı davranışın gerekip gerekmediği, geliştiricinin bunu ne amaçla kullanacağına bağlıdır.


Cevap için teşekkürler. Belki de sorum daha iyi bir ifadeye ihtiyaç duyuyor, ama “ne zaman gerçek zamanlı kullanacaklarını” sormak istemiyordum, ama “gerçek zamanlı gerektiğinde insanlar gerçek zamanlı olarak ne sıklıkla kullanıyorlar?” Diye sormak istemiyordum. Bununla birlikte, mikrodenetleyiciler üzerindeki gerçek zamanlı davranışınız, gerçek zamanlı bir platforma ihtiyaç duymadan düşünmediğim iyi bir noktaydı.
Shahbaz

Bir yan notta, gerçek zamanlı ve hızlı iki dik kavramdır. Bir yol planlayıcı kesinlikle bir dakika içinde karar vermek zorundaysa, bu gerçek zamanlı bir uygulamadır. Her ne kadar hızlı bir robottan bahsettiğini anlasam da.
Shahbaz

2

Şirketimiz PIC mikrodenetleyicileri üzerinde çalışan FreeRTOS kullanarak robotlar üretmektedir. Bizim için FreeRTOS'u kullanmanın ana nedenleri, görevler üzerindeki öncelikleri yeniden düzenleme, birden çok iletişim hattını aynı anda yönetme ve kesme işleyicileri ile ana görevler arasında kolay iletişimdir. Mikrodenetleyiciler, ürettiğimiz her robota tam bir linux makinesi koymaktan çok daha ucuzdur.


2

Gerçek zamanlı olarak ihtiyacınız varsa, gerçek zamanlı bir işletim sistemi kullanırsınız. Güvenlik izleme, veri toplama ve sabit örnekleme hızı kontrol döngüleri, gerçek zamanlı zamanlama kullanan ortak alt sistemlerdir.

Programlamanın gerçek zamanlı kısmı genellikle mümkün olduğunca küçüktür, çünkü hata ayıklamak daha zordur ve daha az kodun doğruluğunu kontrol etmek daha kolaydır. Gerçek zamanlı işletim sistemlerine ilişkin belgeler genellikle oldukça iyidir (RTAI / Xenomai dahil).

Farklı gerçek robotik projelerinde QNX ve RTAI-> Xenomai kullandım . QNX'i tercih ettim ama Xenomai de aynı derecede etkili oldu.


2

Orocos olgun bir gerçek zamanlı robotik kontrol yazılımı çerçevesi. Gerçek zamanlı gereksinimleri olan yüksek hızlı robot manipülatörleri başarıyla kontrol etmek için kullanıldığını gördüm. ROS, iletişim, yapılandırma, serileştirme ve bileşen tabanlı paketleme ile aynı çerçeve düzeyindeki bileşenlerin çoğuna sahiptir.


2

Robotunuzu birden fazla CPU ve gerçek zamanlı soru değişimleri açısından düşünmeye başlayın. İki tekerlek dengeleyici veya dört helikopterli bir dengeleyici veya bir servo darbe çıkışı gibi yüksek hızlı güvenilir geri bildirime ihtiyaç duyan bir algoritmanız varsa, gerçek zaman son derece önemlidir, ancak görev de çok kısıtlıdır.

Bunun gibi bir kontrol döngüsünü, Arduino sınıfı cihazlarda bulunan ucuz 8 bit AVR veya düşük uç 32 bit ARM'ler gibi özel bir gerçek zamanlı CPU'ya yükleyebilirsiniz. Özel kontrol döngüleri çalıştıran bu küçük MCU'lardan onlarca eklemenizi engelleyen hiçbir şey yoktur, USB cihaz numaralandırması bunu bile kolaylaştırır.

Özel bir CPU tarafından yönetilen zamanlamaya duyarlı kontrol döngülerine sahip olduğunuza göre, Linux'ta ROS veya Windows için Kinect gibi bileşenleri kullanarak daha üst düzey mantık çalıştırabilen robotun 'beyninin' gerçek zamanlı ihtiyaçlarını rahatlatabilirsiniz.


0

"Ne zaman / ne durumda" gerçek zamanlı sistemler kullanıldığında:

Deneyimlerime göre, hareket kontrolü gerçek zamanlı sistemler için ana uygulamadır. Motorları kontrol etmek için yüksek frekans (100hz, 1000hz ve daha fazlası) ve düşük titreşim (zaman değişimleri) önemlidir. Güvenlik burada önemli bir nokta. İnsanlar arasında bir robot düşünün: Örneğin, robotun (kolun) belirli bir zaman aralığında / mesafede durmasını sağlamak / yapmanız gerekir.

Yol planlama, vizyon işleme ve akıl yürütme gerçek zamanlı sistem gibi diğer görevler için bu kadar önemli değildir ve geliştirme süresi ve donanım maliyetlerindeki ek yük nedeniyle genellikle önlenir.

Günümüzde, PR2 gibi büyük robotlar her iki dünyayı birleştiriyor. RT özellikli işletim sisteminin (örn. Linux + Xenomai) gerçek zamanlı bağlamında hareket kontrolü gerçekleşiyor ve gerçek zamanlı olmayan kısımda (kullanıcı ülkesi), vizyon işleme ve planlama ROS gibi sistemlere yerleştiriliyor. Her ikisi de aynı bilgisayarda çalışabilir.

Soru netleştikten sonra bu cevabı düzenlemekten mutluluk duyuyorum. :-)


0

Evet, donanım kaynaklarının zamanlama gereksinimlerini (yeterli işlem gücü, yeterince düşük gecikme süresi) karşılayabileceğini varsayarsak, zamanlayıcı süreçleri ve iş parçacıklarını uygun şekilde sıralayamadığında, genellikle genellikle bunun zorlukları. Donanım sürücüleri gerçek zamanlı koşullar için de optimize edilebilir.

Evet, eğer yazılımların işini gerekli zaman kısıtlamalarında yapacağı garanti edilemezse, gerçek zamanlı yaklaşımlar kullanılır.


0

İyi bir çözüm İKİ yapmaktır. Kullandığım bir tasarım, küçük bir mikro denetleyiciye, sıkı servo kontrol döngülerine vb. Sonra Linux ve ROS çalıştıran daha büyük bir CPU daha var. ROS'un daha yüksek düzeydeki görevleri ve uP'nin bir step motorunu kontrol etmek veya bir PID döngüsü çalıştırmak gibi şeyleri işlemesine izin veriyorum.

Yukarıda başkaları tarafından söylendiği gibi, gerçek zamanlı olmayan bir işletim sisteminin 1KHz kontrol döngüleri çalıştırmasına izin verebilirsiniz, ancak bunun çalışması için zamanının çoğunu boş bir döngüde geçiren brüt bir aşırı öldürme boyutlu bilgisayara ihtiyacınız vardır. Linux / ROS bilgisayarını% 100'e yakın CPU kullanımıyla çalıştırırsanız, gerçek zamanlı performans düşüktür. İki katmanlı bir tasarım kullanmak her zaman çok iyi RT performansı elde etmenize ve daha küçük, daha az güç tüketen bir bilgisayar kullanmanıza izin verir (muhtemelen bir Pi2 daha üst düzey görevler.) UP'm şu anda herhangi bir işletim sistemi çalıştırmıyor, ancak FreeRTOS

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.