Command ve Control Eğitimi

Giriş

Command and Control, robota özgü alt sistemlerden oluşan bir koleksiyon için robot kodunu komutlar ve denetleyiciler halinde düzenleyen 2016 sezonu için eklenen yeni bir LabVIEW şablonudur. Her bir alt sistem, mekanizma için uygun hızda çalışan bağımsız bir kontrol döngüsüne veya state machine ve istenen işlemleri ve ayar noktalarını güncelleyen yüksek seviyeli komutlara sahiptir. Bu, otonom kodun eşzamanlı komut dizileri oluşturmasını çok kolaylaştırır. Bu arada TeleOp, aynı komutları tamamlanmayı beklemeye gerek kalmadan kullanabildiği ve sürücü ekibinin girdisine göre yeni komutların kolay iptaline ve başlatılmasına izin verdiği için avantaj sağlar. Her alt sistemde, zaman içindeki sensör ve kontrol değerlerini gösteren bir panel ve hata ayıklamaya yardımcı olmak için komut izleme bulunur.

Command ve Control nedir ?

Command and Control recognizes that FRC® robots tend to be built up of relatively independent mechanisms such as Drive, Shooter, Arm, etc. Each of these is referred to as a subsystem and needs code that will coordinate the various sensors and actuators of the subsystem in order to complete requested commands, or actions, such as “Close Gripper” or “Lower Arm”. One of the key principles of this framework is that subsystems will each have an independent controller loop that is solely responsible for updating motors and other actuators. Code outside of the subsystem controller can issue commands which may change the robot’s output, but should not directly change any outputs. The difference is very subtle but this means that outputs can only possibly be updated from one location in the project. This speeds up debugging a robot behaving unexpectedly by giving you the ability to look through a list of commands sent to the subsystem rather than searching your project for where an output may have been modified. It also becomes easier to add an additional sensor, change gearing, or disable a mechanism without needing to modify code outside of the controller.

Öncelikle Otonom ve TeleOp’tan oluşan oyun kodunun tipik olarak ayar noktalarını güncellemesi ve belirli mekanizmaların durumuna tepki vermesi gerekecektir. Autonomous için, robotun çalışmasını bir dizi işlem olarak tanımlamak çok yaygındır - buraya sürün, alın, oraya taşıyın, ateş edin, vb. Komutlar, hızlı bir şekilde karmaşık rutinler oluşturmak için ek mantıkla sırayla bağlanabilir. TeleOp için, aynı komutlar eşzamansız olarak yürütülebilir, robotun her zaman en son sürücü girdilerini işlemesine izin verir ve uygun şekilde uygulanırsa yeni komutlar kesintiye uğrayarak, sürücü ekibinin saha koşullarına hızlı bir şekilde yanıt verirken aynı zamanda otomatikleştirilmiş komutlardan ve komutlardan dizilerinden yararlanmasını sağlar..

Neden Commdnf and Control kullanmalıyım?

Command ve Control, mevcut LabVIEW proje şablonlarına işlevsellik ekleyerek kodun daha karmaşık robotlar ve robot koduyla daha iyi ölçeklenmesini sağlar. Alt sistemler, uygulamanın ayrıntılarını soyutlamak için kullanılır ve oyun kodu, yüksek seviyeli komut VI dizilerinden oluşturulur. Komutların kendileri, ayar noktalarını güncelleyebilen, mühendislik birimleri ve mekanizma birimleri arasında sayısal ölçeklendirme / haritalama gerçekleştirebilen ve senkronizasyon seçenekleri sunan VI’lardır. Robotta dişli oranının değiştirilmesi gibi fiziksel değişiklikler yapılırsa, bu değişikliği kod tabanının tamamında yansıtmak için yalnızca birkaç Vis komutunda değişiklikler yapılabilir.

I/O kapsülleme, daha öngörülebilir işlem ve kaynak çakışmaları meydana geldiğinde daha hızlı hata ayıklama sağlar. Her bir komut bir VI olduğu için, komutlar arasında tek adım atabilir veya her bir alt sisteme gönderilen tüm komutların bir listesini görüntülemek için yerleşik Trace işlevini kullanabilirsiniz. Çerçeve, eşzamansız bildirim ve tutarlı veri yayılımı kullanır, bu da bir diziyi programlamayı kolaylaştırır çalıştırılacak doğru komutu belirlemek için basit bir mantık ekleyin.

Part 1: Proje Gezgini

Proje Gezgini, robot sisteminiz için kullanacağınız tüm Vis ve dosyalar için organizasyon sağlar. Aşağıda, sistemimizin genişletilmesine yardımcı olmak için Proje Gezgini’ndeki ana bileşenlerin bir açıklaması bulunmaktadır. En sık kullanılan öğeler kalın olarak işaretlenmiştir.

../../../../_images/project-explorer-1.png
My Computer

Projenin yüklendiği bilgisayardaki işlemi tanımlayan öğeler. Bir robot projesi için, bu bir simülasyon hedefi olarak kullanılır ve simülasyon dosyalarıyla doldurulur.

Sim Destek Dosyaları

The folder containing 3D CAD models and description files for the simulated robot.

Robot Simulation Readme.html

Documents the PWM channels and robot info you will need in order to write robot code that matches the wiring of the simulated robot.

Dependencies-Bağımlılıklar

Simüle edilmiş robotun kodu tarafından kullanılan dosyaları gösterir. Simüle edilmiş robot hedefi için kod belirlediğinizde bu doldurulacaktır.

Derleme Özellikleri

Bu, simüle edilmiş robot hedefi için kodun nasıl oluşturulacağını ve dağıtılacağını tanımlayan dosyaları içerecektir.

Target (roboRIO-TEAM-FRC.local)

(Adres) konumunda bulunan roboRIO’da operasyonu tanımlayan öğeler.

Drive - Sürüş

Robot sürücü tabanı için alt sistem uygulaması ve komutları. Bu, WPILib RobotDrive VI’lar için özel bir yedek görevi görür.

Framework-Çerçeve

Çok sık kullanılmayan bir alt sistemin parçası olmayan robot kodu için kullanılan VI’lar.

Begin

Robot kodu ilk başladığında bir kez çağrılır. Bu, belirli bir alt sisteme ait olmayan başlatma kodu için kullanışlıdır.

Disabled

Devre dışı bırakılan her paket için bir kez çağrılır ve robotun hareket etmesini istemediğinizde sensörlerde hata ayıklamak için kullanılabilir.

Finish

Geliştirme sırasında bu, robot kodu bittiğinde çağrılabilir. Durdurulduğunda veya güç kapatıldığında çağrılmaz.

Periodic Tasks

Hata ayıklama veya izleme için ad hoc periyodik döngüler için iyi bir yer

Robot Global Data

Bir alt sisteme ait olmayan robot bilgilerini paylaşmak için kullanışlıdır.

Destek Kodu

Hata ayıklama ve kod geliştirme yardımcıları.

Vision

Kamera ve görüntü işleme için alt sistem ve komutlar.

Robot Main.vi

Kod geliştirirken çalıştıracağınız en üst seviye VI.

Autonomous.vi

Otonom periyodu boyunca çalışan VI.

Teleop.vi

Her TeleOp paketi için çağrılan VI.

Test.vi

Driver Station test modundayken çalışan VI.

SubSystems.vi

Tüm alt sistemleri içeren ve başlatan VI.

Dependencies-Bağımlılıklar

Robot kodu tarafından kullanılan dosyaları gösterir.

Derleme Özellikleri

Kod doğru çalıştıktan sonra kodu bir başlangıç uygulaması olarak oluşturmak ve çalıştırmak için kullanılır.

../../../../_images/project-explorer-2.jpg

Drive Subsystem Project Explorer

../../../../_images/drive-subsystem-project-explorer.jpg
Commands:

Bu klasör, denetleyiciden bir işlem gerçekleştirmesini isteyen komut VI’ları içerir. Ayrıca, ek sürücü komutları oluşturmak için şablonlar içerir.

Not

Yeni bir komut oluşturduktan sonra, denetleyicinin yeni işlemi tanımlamak için kullandığı alanları eklemek veya güncellemek için Drive Setpoints.ctl dosyasını düzenlemeniz gerekebilir. Ayrıca, her değer için bir durum eklemek için Drive Controller.vi’ye gitmeniz ve durum yapısını değiştirmeniz gerekir.

Uygulama

Bunlar, alt sistemi oluşturmak için kullanılan VI’lar ve Kontrollerdir.

Altyapı VI ları
  • Drive Check for New Command: Denetleyici döngüsünün her yinelemesi olarak adlandırılır. Yeni komutları kontrol eder, zamanlama verilerini günceller ve tamamlandığında bir bekleme komutunu bildirir.

  • Drive Command Helper.vi: Komutlar, yeni bir komutun verildiğini kontrolöre bildirmek için bu VI’yı çağırır.

  • Drive Controller Initialization.vi: Bildiriciyi tahsis eder ve zamanlamayı, varsayılan komutu ve diğer bilgileri tek bir veri kablosunda birleştirir.

  • Drive Controller.vi: Bu VI, control/state machine döngüsünü içerir. Panel ayrıca hata ayıklama için yararlı ekranlar içerebilir.

  • Drive Operation.ctl: Bu typedef, denetleyicinin çalışma modlarını tanımlar. Birçok komut bir işlemi paylaşabilir.

  • Drive Setpoint.ctl: Drive alt sisteminin tüm çalışma modları tarafından kullanılan veri alanlarını içerir.

  • Drive Published Globals.vi: Sürücü alt sistemi hakkında genel bilgileri yayınlamak için yararlı bir yer.

Bölüm 2: Drive Subsystem-Sürücü Alt Sistemini Başlatma

Denetleyicinin blok diyagramında, nasıl düzenleneceğini bilmek isteyeceğiniz önemli alanları gösteren yeşil yorumlar vardır.

Kontrol döngüsünün solundaki alan, alt sistem başladığında bir kez çalıştırılacaktır. Burası, genellikle tüm I/O ve durum verilerini tahsis edeceğiniz ve başlatacağınız yerdir. I/O refnum’larını yayınlayabilirsiniz veya onları yalnızca Test Modu’na kaydederek diğer kodların bir komut kullanmadan motorları güncelleyememesi için onları gizli tutabilirsiniz.

../../../../_images/step-1.jpg

Not

Her bir alt sistem için kaynakları Begin.vi yerine ilgili Controller.vi’de başlatmak, I/O kapsüllemeyi geliştirir, olası kaynak çakışmalarını azaltır ve hata ayıklamayı basitleştirir.

../../../../_images/step-2.jpg

Başlatma işleminin bir kısmı, başka hiçbir işlem işlenmediğinde varsayılan işlemi ve ayar noktası değerlerini seçmektir.

../../../../_images/step-3.jpg

Kontrol döngüsünün içinde, işlemlerin gerçekte uygulandığı bir durum ifadesi bulunur. Ayar noktası değerleri, yineleme gecikmesi, yineleme sayısı ve sensörlerin tümü, alt sistemin nasıl çalıştığını etkileyebilir. Bu case yapısı, alt sistemin her çalışma durumu için bir değere sahiptir.

../../../../_images/step-4.jpg

Denetleyici döngüsünün her yinelemesi isteğe bağlı olarak Trace VI’yı güncelleyecektir. Çerçeve zaten alt sistem adını, çalışmasını ve açıklamasını içerir ve izleme bilgilerine ek ayar noktası değerlerini biçimlendirmeyi yararlı bulabilirsiniz. Trace VI’yı açın ve robot kodu her bir alt sisteme gönderilen mevcut ayar noktaları ve komutlarda çalışırken Enable’e tıklayın.

Kontrolörün birincil amacı, alt sistem için aktüatörleri güncellemektir. Bu, case yapısı içinde meydana gelebilir, ancak çoğu zaman, değerlerin her zaman doğru değerle ve kodda yalnızca bir konumda güncellendiğinden emin olmak için bunu yapının aşağı yönünde yapmak yararlıdır.

../../../../_images/step-5.jpg

Bölüm 3: Drive Subsystem Taşınan Komutlar

Her yeni alt sistem için gönderilen 3 örnek komut vardır:

Time For Drive.vi

../../../../_images/drive-for-time.jpg

Bu VI, motorları belirli bir saniye kadar çalışacak şekilde ayarlar. İsteğe bağlı olarak komutun tamamlanmasıyla senkronize olur.

Drive for Time durumu, zamanlayıcı sona erene veya yeni bir komut verilene kadar motorları ayar noktasında çalıştıracaktır. Motorlarda güvenlik zaman aşımı etkinleştirilmişse, motorların en az 100 ms’de bir güncellenmesi gerekir. Bu nedenle kod kalan sürenin küçük olanını ve 50ms’yi bekler.

../../../../_images/drive-for-time-diogram.jpg

Drive Immediate.vi

../../../../_images/drive-immediate.jpg

Motorlar için istenen sol ve sağ hızları alır ve motorları hemen bu ayar noktalarına ayarlar.

Immediate durumu, motorları komutla tanımlanan ayar noktasına günceller. Yeni bir komut gelene kadar veya bir zaman aşımı değerine kadar motorların bu değeri korumasını istediğiniz için komut bitmiş sayılmaz. Zaman aşımı, bir komutun ölü bant içerdiği her zaman yararlıdır. Ölü banttan daha küçükse küçük değerler istenmez ve komut zaman aşımına uğramadıkça hırıltı veya sürünmeye neden olur.

../../../../_images/drive-immediate-diogram.jpg

Stop Driving.vi

../../../../_images/stop-driving.jpg

Robotu sabit hale getirerek tahrik motorlarını sıfırlayın.

Reserve komutu motorları kapatır ve yeni bir komut bekler. Reserve, adlandırılmış bir komut dizisi ile kullanıldığında, robotu hareket ettirmiyor olsa bile sürücü alt sisteminin bir dizinin parçası olduğunu tanımlar. Bu, aynı anda çalışan komutlar arasında alt sistem kaynağında arabuluculuk yapmaya yardımcı olur.

../../../../_images/stop-driving-diogram.jpg

Part 4: Yeni Komutlar Yaratmak

Komut ve Kontrol çerçevesi, kullanıcıların bir alt sistem için kolayca yeni komutlar oluşturmasına olanak tanır. Yeni bir komut oluşturmak için alt sistem klasörünü açın / Commands project explorer penceresinde, yeni komutunuzun başlangıç noktası olarak kullanmak için VI Şablonlarından birini seçin, sağ tıklayın ve New From Template öğesini seçin.

  • Immediate-Hemen: Bu VI, alt sistemi yeni ayar noktası hakkında bilgilendirir.

  • Immediate with deadband : Bu VI, giriş değerini ölü bantla karşılaştırır ve isteğe bağlı olarak alt sistemi yeni ayar noktası hakkında bilgilendirir. Bu, joystick devamlı değerleri kullanıldığında çok kullanışlıdır.

  • With duration: This VI notifies the subsystem to perform this command for the given duration, and then return to the default state. Synchronization determines whether this VI Starts the operation and returns immediately, or waits for the operation to complete. The first option is commonly used for TeleOp, and the second for Autonomous sequencing.

Bu örnekte yeni bir komutu ekleyeceğiz: “Mesafe için Sür”.

../../../../_images/new-vi.jpg

First, save the new VI with a descriptive name such as “Drive for Distance”. Next, determine whether the new command needs a new value added the Drive Operations enum typedef. The initial project code already has an enum value of Drive for Distance, but the following image shows how you would add one if needed.

../../../../_images/edit-items.jpg

Bir komutun yürütülmesi için ek bilgiye ihtiyaç duyarsa, bunu ayar setpoint kontrolüne ekleyin. Varsayılan olarak, Sürücü alt sistemi, yürütülecek işlemle birlikte Sol Ayar Noktası-Setpoint, Sağ Ayar Noktası-Setpoint ve Duration-süre için alanlara sahiptir. Drive for Distance komutu, Süreyi-Duration mesafe olarak yeniden kullanabilirdi, ancak devam edelim ve Drive Setpoints.ctl’ye Distance (feet) adı verilen sayısal bir kontrol ekleyelim.

../../../../_images/add-distance.jpg

Bundan sonra, komutumuzu belirtmek için gereken tüm alanlara sahip olduğumuzda, yeni oluşturulan Drive for Distance.vi ı değiştirebiliriz. Aşağıda gösterildiği gibi, enum açılır menüsünden Drive for Distance öğesini seçin ve mesafeyi, hızları vb. belirtmek için bir VI parametresi ekleyin. Birimler uyuşmuyorsa, VI komutu birimler arasında haritalamak için harika bir yerdir.

../../../../_images/add-vi-parameters.jpg

Next, add code to the Drive Controller to define what happens when the Drive for Distance command executes. Right click on the Case Structure and Duplicate or Add Case for Every Value. This will create a new “Drive for Distance” case.

../../../../_images/add-case.jpg

In order to access new setpoint fields, grow the “Access Cmd setpoints” unbundle node. Open your encoder(s) on the outside, to the left of the loop. In the new diagram of the case structure, we added a call to reset the encoder on the first loop iteration and read it otherwise. There is also some simple code that compares encoder values and updates the motor power. If new controls are added to the setpoints cluster, you should also consider adding them to the Trace. The necessary changes are shown in the image below.

../../../../_images/add-encoder-logic.jpg

Bölüm 5: Bir Alt Sistem Oluşturma

Yeni bir alt sistem oluşturmak için roboRIO hedefine sağ tıklayın ve New» Subsystem Sistem öğesini seçin. Açılan iletişim kutusunda, alt sistemin adını girin, işletim modlarını listeleyin ve simgenin rengini belirtin.

../../../../_images/new-subsystem.jpg

OK’e tıkladığınızda, alt sistem klasörü oluşturulacak ve proje disk klasörüne ve ağacına eklenecektir. Bir alt sistemi oluşturan VI’ların ve kontrollerin temel bir uygulamasını içerecektir. Yeni denetleyiciye bir çağrı, Alt Sistemler VI’ya eklenecektir. Controller VI açılacak, I/O eklemeniz ve state-machine veya kontrol kodunu uygulamanız için hazır olacaktır. Oluşturulan VI simgeleri, iletişim kutusunda sağlanan rengi ve adı kullanacaktır. Oluşturulan kod, ayar noktası alanları ve işlemleri için typedef’leri kullanacaktır.

../../../../_images/new-subsystem-front-panel.jpg

Aşağıda yeni oluşturulan alt sistemin blok şeması bulunmaktadır. Bu kod, alt sistemi oluşturduğunuzda otomatik olarak üretilecektir.

../../../../_images/new-subsystem-diogram.jpg