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.
- 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.
Drive Subsystem Project Explorer
- 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.
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.
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.
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.
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.
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
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.
Drive Immediate.vi
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.
Stop Driving.vi
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.
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”.
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.
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.
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.
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.
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.
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.
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.
Aşağıda yeni oluşturulan alt sistemin blok şeması bulunmaktadır. Bu kod, alt sistemi oluşturduğunuzda otomatik olarak üretilecektir.