Mechanism2d Aracı
Glass, Mechanism2d aracını kullanarak robotunuzun düzeneklerinin çöp adam şeklinde temsillerini görüntüleme imkanı tanımaktadır. Araç, kollar ve asansörler gibi dönebilen ve / veya uzanıp geri çekilebilen bağ birleşimlerini desteklemektedir ve bu bağlar daha karmaşık düzenekler için birleştirilebilmektedir. Mechanism2d sınıfının örneği oluşturulmalı ve doldurulmalı, NetworkTables üzerinden iletilmeli ve düzenli aralıklarla robot kodunuzdaki en güncel düzenek durumları ile güncellenmelidir. Araç, Physics Simulation ile birlikte, robotun inşaası öncesinde robotunuzun düzeneklerini görüntülemek ve programlamak için de kullanılabilmektedir.
Mechanism2d Örneğinin Oluşturulması ve Yapılandırılması
Mechanism2d nesnesi düzeneğin çizildiği “tuval”dir. Kök düğüm, düzeneğin Mechanism2d’ye sabitlendiği yerdir. Tek eklemli bir kol için bu sabitleme yeri döngül noktadır. Bir asansör için sabitleme yeri, robotun temelinde tutturulduğu yer olacaktır. (Bir MechanismRoot2d nesnesi ile temsil edilen) kök düğüm elde etmek için Mechanism2d nesnesi kapsayıcısı içerisinde getRoot(name, x, y)’yi çağırınız. İsim NetworkTables içerisinde kök düğümü isimlendirmek için kullanılmaktadır ve bu sebeple özgün olması haricinde pek de önemli değildir. x / y koordinat sistemi Field2d ile aynı yönü izlemektedir: (0,0) sol alttır.
In the examples below, an elevator is drawn, with a rotational wrist on top of the elevator. The full Mechanism2d example is available in Java / C++
43 // the main mechanism object
44 Mechanism2d mech = new Mechanism2d(3, 3);
45 // the mechanism root node
46 MechanismRoot2d root = mech.getRoot("climber", 2, 0);
59 // the main mechanism object
60 frc::Mechanism2d m_mech{3, 3};
61 // the mechanism root node
62 frc::MechanismRoot2d* m_root = m_mech.GetRoot("climber", 2, 0);
32 # the main mechanism object
33 self.mech = wpilib.Mechanism2d(3, 3)
34 # the mechanism root node
35 self.root = self.mech.getRoot("climber", 2, 0)
Her bir MechanismLigament2d nesnesi düzeneğin bir aşamasını temsil etmektedir. Nesneler bir isim, (Mechanism2d nesnesinin boyutuna oranla) bir ilk çizim uzunluğu ve bağın dereceler halinde çizilmesini sağlayacak bir ilk açı şeklinde gerekli üç parametreye sahiptir. Bağ açıları, ana bağa orantılı ve (saat yönünün tersine-pozitif) ref:Rotation2d <docs/software/advanced-controls/geometry/pose:Rotation> ile aynı matematiksel gösterimi izlemektedir. Açısı sıfır olan ve temelleri köke dayanan bir bağ sağa doğru bakacaktır. İki tercihi parametre, çizginin genişliği (ve ayrıca Mechanism2d nesnesine orantılı boyutu) ile rengini değiştirmeye olanak tanımaktadır. Şekle bir tane daha düğüm eklemek için bir kök düğüme veya bağ düğümüne append()/Append() çağırınız. Java’da şekil üzerine bağ eklemek için yapılı bir MechanismLigament2d nesnesi iletiniz. C++’daysa bir bağ oluşturmak ve bağı eklemek için yapı parametrelerini çalıştırınız.
48 // MechanismLigament2d objects represent each "section"/"stage" of the mechanism, and are based
49 // off the root node or another ligament object
50 m_elevator = root.append(new MechanismLigament2d("elevator", kElevatorMinimumLength, 90));
51 m_wrist =
52 m_elevator.append(
53 new MechanismLigament2d("wrist", 0.5, 90, 6, new Color8Bit(Color.kPurple)));
63 // MechanismLigament2d objects represent each "section"/"stage" of the
64 // mechanism, and are based off the root node or another ligament object
65 frc::MechanismLigament2d* m_elevator =
66 m_root->Append<frc::MechanismLigament2d>("elevator", 1, 90_deg);
67 frc::MechanismLigament2d* m_wrist =
68 m_elevator->Append<frc::MechanismLigament2d>(
69 "wrist", 0.5, 90_deg, 6, frc::Color8Bit{frc::Color::kPurple});
37 # MechanismLigament2d objects represent each "section"/"stage" of the mechanism, and are based
38 # off the root node or another ligament object
39 self.elevator = self.root.appendLigament(
40 "elevator", self.kElevatorMinimumLength, 90
41 )
42 self.wrist = self.elevator.appendLigament(
43 "wrist", 0.5, 90, 6, wpilib.Color8Bit(wpilib.Color.kPurple)
44 )
Ardından Mechanism2d nesnesini NetworkTables üzerinden yayınlayınız:
55 // post the mechanism to the dashboard
56 SmartDashboard.putData("Mech2d", mech);
36 // publish to dashboard
37 frc::SmartDashboard::PutData("Mech2d", &m_mech);
46 # post the mechanism to the dashboard
47 wpilib.SmartDashboard.putData("Mech2d", self.mech)
Not
Mechanism2d örneği daha alt seviyedeki NetworkTables API veya Shuffleboard API kullanılarak da iletilebilmektedir. Bu örnekte SmartDashboard API kullanılmıştır, diğer bir değişle Mechanism2d aracı, SmartDashboard tablo adı altında görüntülenebilecektir.
Bağ açısı veya uzunluğunu değiştirmek için MechanismLigament2d nesnesine setLength() veya setAngle() komutlarını çağırınız. 0 uzunluk (ve bu sebeple görünmez) bağları önlemek için, sensör ölçülerinden yola çıkarak bağ uzunluğunu değiştirirken minimum uzunluk değerleri eklemeyi unutmayınız.
59 @Override
60 public void robotPeriodic() {
61 // update the dashboard mechanism's state
62 m_elevator.setLength(kElevatorMinimumLength + m_elevatorEncoder.getDistance());
63 m_wrist.setAngle(m_wristPot.get());
64 }
40 void RobotPeriodic() override {
41 // update the dashboard mechanism's state
42 m_elevator->SetLength(kElevatorMinimumLength +
43 m_elevatorEncoder.GetDistance());
44 m_wrist->SetAngle(units::degree_t{m_wristPotentiometer.Get()});
45 }
49 def robotPeriodic(self):
50 # update the dashboard mechanism's state
51 self.elevator.setLength(
52 self.kElevatorMinimumLength + self.elevatorEncoder.getDistance()
53 )
54 self.wrist.setAngle(self.wristPot.get())
Glass’da Mechanism2d’nin görüntülenmesi
Mechanism2d örneğini NetworkTables üzerinden gönderdikten sonra menü çubuğunda: guilabel: NetworkTables seçilip, örneğin gönderildiği tablo adı seçilerek ve ardından Field düğmesine tıklanarak Mechanism2d aracı Glass’a eklenebilmektedir.

Araç aşağıdaki gibi göründüğünde aracı yeniden boyutlandırıp istediğiniz gibi Glass çalışma alanına ekleyebilirsiniz. Aracın ismi, aracın üst kısmına sağ tıklanarak değiştirilebilmektedir. Bilek potansiyometresi ve asansör kodlayıcısı değiştikçe düzenek, aracı güncelleyecektir.

AdvantageScope’da Mechanism2d’nin görüntülenmesi
AdvantageScope Mechanism2d nesnesinden gelen, WPILib data logs kullanılarak bir günlük dosyasına kaydedilmiş veriler de dahil olmak üzere, poz verilerini görüntülemek için kullanılabilecek başka bir seçenektir. Hem 2 hem de 3 boyutlu görselleştrime desteği bulunmaktadır. Daha fazla bilgi için bkz. mechanism ve 3D field sekmeleri.

Sonraki Adımlar
As mentioned above, the Mechanism2d visualization can be combined with Physics Simulation to help you program mechanisms before your robot is built. The ArmSimulation (Java / C++ / Python) and ElevatorSimulation (Java / C++ / Python) examples combine physics simulation and Mechanism2d visualization so that you can practice programming a single jointed arm and elevator without a robot.