Robotik mühendislik yazılımı gerçek zamanlı kontrol, sensör füzyon, bilgisayar vizyonu ve görev-kahkadar karar verme alanlarında çalışır.Tek bir hata, yerelleştirme veya mobil uygulamalardan farklı olarak, robotik kodbazlar genellikle kaynak kodlanmış donanım üzerinde çalışır, doğrudan simülasyon ortamları ile ilgili bir robota yol açabilir ve genellikle ROS 2 gibi orta sınıflara yeniden giriş yapar.

Neden özellikle robotik için refaksiyon Maddeleri

Robotik yazılım temel olarak tipik iş uygulamaları ile farklıdır. Gerçek zamanlı işletim sistemleri üzerinde çalışır, paylaşılan hafıza veya DDS (Data Dağıtım Servisi), ve sık sık fiziksel eylemciler ve sensörler ile etkileşime girer.

Gerçek Zamanlı Kıtlar ve Performans

Robotik kod genellikle zor tarihlerle karşılanmalıdır. 1 kHz'de çalışan bir kontrol döngüsü, katı bir bellek tahsisi veya verimsiz veri yapıları nedeniyle oluşan büyük bir jittere katılamaz.Refaksiyon, paylaşılan buffers ile kilit içerikli ve ayrı kontrol mantığını kullanarak, geliştiricilerin tekrarlama işlemi sırasındaki sabit noktaları tespit etmesi gerekir.For performanceing profile ishally coupled with refaksiyonel.For performanceing profile is captured with use tools such asFLT:0,145

Donanım Özeti ve Portability

Robotik projeler genellikle birden fazla donanım platformunu hedef alır - farklı motor kontrolleri, LiDAR tarayıcıları veya kamera sürücüleri. Doğru refaksiyon olmadan, doğrudan arama yapan ekipler, belirli donanım sürümlerini yeniden yazmaksızın, özellikle de simülasyondan fiziksel robotlara kadar hareket ederken, sensörlerin gerçeklerden farklı davrandığını varsayar.

Miraç ve Araştırma Kodu

Robotik araştırma ekipleri genellikle daha sonra ürünleştirilmiş olan prototip kod üretir. Bu kod acele, ünite testleri veya kırılgan bir küresel devlette yazılabilir.Refaksiyonlar bir araştırma kanıt-konsepsiyonunu bir koruma, üretim-grad bileşeni haline getirir ve kod oluşturmadan önce, gerçek dünya dağıtım için yeterince sağlam hale gelir.

Robotik Yazılım için En İyi Uygulamalar

Aşağıdaki uygulamalar robotiklerin eşsiz kısıtlamaları için uyarılır, ancak genel yazılım mühendisliği bilgeliği ile uyumludur. Her uygulama beton robot örnekleri ile açıklanmaktadır.

1. Mevcut Kodu Thoroughly olarak anlayın

Tek bir çizgiye dokunmadan önce, sistemin zihinsel bir modelini inşa edin. Dokümanı okuyun (eğer varsa), ana kontrol döngüsü aracılığıyla takip edin ve bileşenleri arasında veri akışını tanımlayın.In Roboticss, hangi parametrelerin davranışı etkilediğini anlamak için gereklidir ve kodun zamanlaması veya sensör çözünürlüğü hakkında ne varsayımlar yaptığını -örneğin, ROS 2'de herhangi bir tüketicinin web sitesinde başarısız olduğunu görmek için bir uyarıda bulunabileceğinden emin olun.In Roboticss, veya bu anlayış olmadan, küçük bir refaksiyonu kırmak için bir dizi diyagramı anlamak önemlidir.

2. İlk Testleri yazın (özellikle Simülasyon Temel Testler)

Birim testleri değerlidir, ancak robotik olarak genellikle tam ortamı yakalayamazlar: sensör gürültüsü, eylemci geç kalmışlık ve çarpışma dinamikleri. Bu nedenle, Gazebo gibi araçlar kullanarak simülasyon tabanlı entegrasyon testlerine yatırım yapmak, Webots veya NVIDIA Isaac Sim., bu testleri yeniden faktörlü bir bileşeni oluşturmaya başlamadan önce tekrarlayıcı bir şekilde deneyin.

3. Küçük, Güvenli Adımlarda Yeniden Yardımcılık

Robotiklerdeki büyük refaksiyonlar tehlikeli çünkü bileşenler arasındaki darbe genellikle gizlidir. Bunun yerine, her birinin tek bir işlevi, bir değişkeni yazın, sürekli bir yapılandırma dosyasına taşınır ve sonra test edin.Depreposed Method) deseni kullanın: her bir şeyi küçük adıma kadar uzun işlevleri küçük bir adıma ayır.Itsualmorphism[Döneticileri değiştir][Döneticileri kontrol etmek için daha küçük bir adıma kadar.

4. Domain-Specific Naming ile ilgili bilgi edinin

Robotik kod alan jargon kullanır: EKF (Extended Kalman Filtre), TF (transform), ODOM (düşüküm), FOV (görüşme alanı) Bu terimleri, değişken isimler ve işlev isimleri yerine, genel isimlerin yerine, eyalet tahminleri, planlama ve kontrol için, ayrı bir isim alanı veya paketler olarak, her pakette, kodluları okumak için niyetle açık hale getirir.

5. Doküman Mimari Kararları, Uygulama Bilgileri

Yeniden düzenleme seçeneklerinin arkasındaki “neden” belgelenmesi, her çizgiyi yorumlamaktan daha değerlidir. Örneğin, planlayıcıdan gelen çarpışmayı belirli bir IMU sensörüne paralel olarak kapatmayı, kısa bir mimari karar kaydı (ADR) yazmak, rasyonel ve beklenen gecikmeli iyileşmeyi açıklamak.

6. Yararlı Versiyon Kontrolü Etkili bir şekilde

Git standart, ancak robotik kodbases genellikle büyük ikili dosyaları (sensor loglar, URDF modelleri, simülasyon dünyaları) repository olmadan onları takip etmek için LFS kullanın. Çünkü retoring renaming dosyaları veya yeniden organize etmek[Döneticileri,Döneticileri,Döneticileri korumak için kullanılabilir.Refaksiyon aktiviteleri yeniden kullanmak ve sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık sık kullanmak için kullanılabilir.

Araçlar ve teknikler Robotik Refaksiyon için Öğrdü

Statik analiz, IDEs ve sürekli entegrasyon standarttır, ancak robotik ihtiyaçlar ek araçlama ihtiyaçlarını sunar.

Statik Analiz ve Linting

C++ ve [[Döneticileri için) veya [Döneticileri) ile ilgili olarak, (veya) veya CFLT:4) için Python'un kodlama standartlarını uygulamak için kullandığı uyarıda (örneğin, tıp-lojik robotlar,) sayısal hafızanın tamamının kullanılması, örneğin CFLT:13Invert # 7|Dönemli olmayan veya kullanım süresiz bir şekilde kullanılması veya gerçek zamanlı bir iş için kullanılması.

Simülasyona Dayalı Regresyon Testi

Robotiklerdeki gerileme testleri, geri dönüşümlü sensörler (Dönetici) için sabit bir tohumla yapılmalıdır.(0)Gazebo) ile [[ŞUygunluk|Dönetici-the-loop)[HIL)[D[Döneticileri değiştirmiş sensörler[Döneticileri) için tekrarlanabilir senaryolar için test edilebilir.

Robotik Context ile Kod Yorumlar

Pair programlama ve kod incelemeleri, robotik domaini anlayan en az bir mühendis içermelidir. Dış robotlardan bir inceleme ince sorunları kaçırabilir: bir çağrıda keyfi bir gecikme sağlayan bir değişiklik, sensör güncelleştirme oranları hakkında yanlış bir varsayım veya eksik bir şekilde hesaplanabilir.[Dönetici:0)Yüksek riskli bir çağrıda bulunan bir kontrol listesi kullanın: “Bu değişiklik gerçek zamanlı performansı etkileyebilir mi?” ve “Ingörüntüleme belgesi ile ilgili tüm varsayımlar belgelenmiş midir?”

Robotik Kod Refaksiyonunda Yaygın Meydanlar

Robotik geliştiriciler sıklıkla diğer alanlarda daha az yaygın olan engellerle karşılaşırlar. İşte en iyi zorluklar ve bunları nasıl ele almak.

Donanım Bağımlılığı ile Dar Coupling

Donanım sürücüleri genellikle kodbase'i geri almak için karmaşık bir API'yi ortaya koyarlar.Bu darbeyi kırmak için, sürücüleri dinamik olarak yüklemek için bir çerçeve (tahkikat sınıfı veya protokol) tanıtarak, belirli bir beton sınıfı uygulayın.C++'da ROS 2 ile test kenar vakalarını (örneğin,% 50) test kenarlarını kullanarak test etmek için bir çalışma için bir çalışma oluşturabilirsiniz.

Legacy ROS 1 veya Özel Ortaware'te modülerlik eksikliği

Miraç kodbases genellikle algılama, planlama ve kontrol ile korunan monolithic düğümleri vardır. Bu tür bir düğümleri bölmek için gereken bir uygulama (veya ROS 2) konularla bağlantılı olarak. zorluk, birden fazla düğüm tarafından korunan işlevleri yavaş yavaş yavaş yavaş yavaş çıkarmaktır (olan) iletişim için yeni konular eklemeye zor olan, iletişim için yeni konular eklemeye zor.

Simülasyon vs. Real-World Fidelity

Simülasyon testlerini geçen rektör kodu hala gerçek sensör dağılımındaki farklılıklar nedeniyle gerçek donanımda başarısız olabilir veya eylemci dinamikleri azaltır.Bunu azaltmak için, [[Üyetim:0) augmentasyon[FLT 1: 1) simülasyonda: Yapay gecikmeler, jitter ve gürültüyü gerçek sensör özelliklerini eşleştirmek için. Ayrıca, kontrollü bir ortamda gerçek donanımda geri yükleme testlerinin bir alt kümesi çalıştırın (örneğin, bir test pisti)

Dağcılık ve gözlemleme

Çok fazla sayıda sistem yeniden faktörleme zaman, yeni bir boğanın nedenini takip etmek zorlaşır: ROS 2) OpenTelemetri ile veri akışını ) ile iyi bir uygulama, anahtar konuların oranlarını izlemek ve alarmlar oluşturmak için zorlanır.

Vaka Çalışması: Bir Mobile Robot Navigation Stack Yeniden Yardımcı Etmek

Bu uygulamaları göstermek için, küçük bir otonom mobil robotu (AMR) navigasyon cihazı başlangıçta ROS 1 üzerinde monolithicurFLT:19 üzerinde inşa edilmiş bir web koşulu olarak, ROS 2 veİLFLT:20'yi kullanarak ele alınan standart bir mimariye karşı yeniden faktöre dönüştülmüştür.

Adım 1: Mevcut Kodu Anlayın

Takım, tüm node'yi inceledi: C++'ın 7 bin hattı tek bir dosyaya yayılmıştı.Onlar sensör dönüşümlerine ve odometriye doğrudan erişim olduğunu gösterdiler - her ikisi de ayrı olmalıdır.

Adım 2: Simülasyon Testleri Yaz

Bir ön tanımlanmış bir engel kursu ile bir Gazebo dünya kurdular. ROS 2 çanta oyunu geri kazanmak, her rektörlük işlemi onu tetikleyecekti.

Adım 3: Uygulama Incremental Reksiyonings

İki haftadan fazla, 40 küçük taahhütler yaptılar.

  • Maliyeti nesli ayrı bir düğüme dönüştürmek, [[DÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜNÜŞÜNÜŞÜŞÜŞÜŞÜŞÜŞÜNÜŞÜŞÜNÜŞÜŞÜŞÜNÜ
  • ⁇ . ⁇ . ⁇ . ⁇ . ⁇ . ⁇ .
  • Bir hız pürüzsüz ile ayrı yerel planlama.
  • Bir devlet makinesine yeniden yapılan kurtarma davranışları,FLT:27 tarafından yönetilen bir sistem haline getirildi.

Adım 4: Doğrulama ve Doküman

Her bir taahhütten sonra, doğrudan depolarda depolanan ADR'lerde yapılan simülasyon testini ve sabit regresyonları koştular (örneğin, maliyet ödeminin kendi test paketinde yayınladığı bir zaman senkronizasyon sorunuydu.) Robotun performansı ölçümleri (tabiya verileri almak için zaman) doğrulanan ADR'lerde yapılan mimari kararları belgelendiler.

Refaksiyonun Etkisini Ölçmek

Yatırımı haklı çıkarmak için, takımlar daha önce ve yeniden faktörlemeden önce objektif ölçümleri takip etmeli:

  • [FONT=0)Komlektik Kompleksi veya Bilişsel Kompleksi (Şereflilik veya Bilişsel Kompleksi gibi araçlar) veya [[FONTD:0)
  • [FONT:0)Test Coverage:[Dönetici:[Dönetici:0)[[değiştir | kaynağı değiştirilen modüller için).
  • [FONT=0)Build and Test Time:[Dönetici: Hızlı inşalar daha temiz, daha modüler bir mimariye işaret eder.
  • [FONT:0)Bug Count:[Dönemli alanda aşağıdaki aylar boyunca refak edilen pist kusurları.
  • [FONT:0)Developer Velocity:[Dönetici:[Dönetici:0) Yeni bir özellik (örneğin, yeni bir kurtarma davranışı eklemek) ve yeniden faktörlemeden sonra.
  • [FONT=0]Simulation Stability:[Dönetici: 1)) Nondeterministic test başarısızlıkları (yüksek zamanlama bağımlısı gösterir).

Ek olarak, geliştiricilerden gelen niteliksel geri bildirimler - "Şimdi veri akışını anlamak daha kolay" - güçlü bir başarı göstergesi. Güvenlik-kırık robotik, bilişsel yük azaltması, gelecekteki değişiklikler sırasında böcekleri tanıtma şansı doğrudan azaltır.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Yeniden düzenleme bir zaman temiz değildir; küçük isimlendirmeler kullanarak, robotların yazılımı geliştirme yıllarını, algoritmalı iyileştirmeleri ve takım kompozisyonlarını değiştirmeyi ve risk almadan önce kodlayın.Basitleştirilmiş testler yazmak, küçük isimlendirmeler kullanarak, doğru araçları kullanarak, robot mühendislerin yararlanabileceği sürekli bir disiplindir, zor kodunuzu temiz, modüler bir sistem haline getirebilir.

Daha fazla okuma için, [[0)ROS 2 dokümantasyon[Dönetici en iyi uygulamalar için )Refaksiyon: Mevcut Kod Tasarımının iyileştirilmesi) Martin Fowler tarafından ve [DDDÜDÜSÜSÜSÜSÜSÜSÜSÜSÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞ