NetworkTables nedir

NetworkTables is an implementation of a distributed “dictionary”. That is named values are created either on the robot, driver station, or potentially an attached coprocessor, and the values are automatically distributed to all the other participants. For example, a driver station laptop might receive camera images over the network, perform some vision processing algorithm, and come up with some values to sent back to the robot. The values might be an X, Y, and Distance. By writing these results to NetworkTables values called “X”, “Y”, and “Distance” they can be read by the robot shortly after being written. Then the robot can act upon them.

NetworkTables, C++, Java veya LabVIEW’deki robot üzerindeki programlar tarafından kullanılabilir ve WPILib’in her sürümünde yerleşik olarak bulunur.

NetworkTables organization

Veriler, Ağ Tablolarında, diskteki klasörler ve dosyalar içeren bir dizine çok benzer bir hiyerarşi içinde düzenlenir. NetworkTables’ın herhangi bir örneği için, istenen veri organizasyonuna uyan herhangi bir şekilde iç içe geçmiş olabilen birden çok değer ve alt tablo olabilir. Alt tablolar aslında iç içe geçmiş alt tabloyu ve değer anahtar adlarını ayıran eğik çizgi (/) ile uzun bir anahtar olarak temsil edilir. Her değerin, değeri almak için kullanılan kendisiyle ilişkili bir anahtarı vardır. Örneğin, aşağıdaki örneklerde gösterildiği gibi datatable adlı bir tablonuz olabilir. Bir datatable içinde iki anahtar, X ve Y ve bunlarla ilişkili değerler vardır. OutlineViewer, bir program çalışırken NetworkTables’da depolanan değerleri keşfetmek için iyi bir yardımcı programdır.

Ağ Tabloları için veri türleri boolen, numaric veya dizedir. Sayısal değerler çift duyarlıklı değerler olarak yazılır. Ek olarak, birden çok veri öğesinin tutarlı bir şekilde teslim edilmesini sağlamak için bu türlerden herhangi bir diziye sahip olabilirsiniz. Yapılandırılmış verileri temsil etmek için kullanılabilen ham verileri saklama seçeneği de vardır.

Program başladığında otomatik olarak oluşturulan bazı varsayılan tablolar vardır:

Tablo ismi

Kullanım

/SmartDashboard

SmartDashboard.put() yöntem kümesi kullanılarak SmartDashboard veya Shuffleboard’a yazılan değerleri depolamak için kullanılır.

/LiveWindow

Test modu (Sürücü İstasyonunda Test) değerlerini saklamak için kullanılır. Tipik olarak bunlar Alt sistemler ve ilgili sensörler ve aktüatörlerdir.

/FMSInfo

Driver Station ve Saha Yönetim Sisteminden gelen şu anda devam eden maç hakkında bilgiler

Writing a simple NetworkTables program

NetworkTables class, programınız başladığında otomatik olarak başlatılır. NetworkTables örneğine erişmek için, varsayılan örneği almak için getDefault() yöntemini okuma ve yazma yöntemlerini çağırın.

package edu.wpi.first.wpilibj.templates;

import edu.wpi.first.wpilibj.TimedRobot;
import edu.wpi.first.networktables.NetworkTable;
import edu.wpi.first.networktables.NetworkTableEntry;
import edu.wpi.first.networktables.NetworkTableInstance;

public class EasyNetworkTableExample extends TimedRobot {
   NetworkTableEntry xEntry;
   NetworkTableEntry yEntry;

   public void robotInit() {
      //Get the default instance of NetworkTables that was created automatically
       //when your program starts
       NetworkTableInstance inst = NetworkTableInstance.getDefault();

       //Get the table within that instance that contains the data. There can
       //be as many tables as you like and exist to make it easier to organize
       //your data. In this case, it's a table called datatable.
       NetworkTable table = inst.getTable("datatable");

       //Get the entries within that table that correspond to the X and Y values
       //for some operation in your program.
       xEntry = table.getEntry("X");
       yEntry = table.getEntry("Y");
       }

       double x = 0;
       double y = 0;

       public void teleopPeriodic() {
       //Using the entry objects, set the value to a double that is constantly
       //increasing. The keys are actually "/datatable/X" and "/datatable/Y".
       //If they don't already exist, the key/value pair is added.
       xEntry.setDouble(x);
       yEntry.setDouble(y);
       x += 0.05;
       y += 1.0;
       }
   }
}

X ve Y değerleri, NetworkTables hiyerarşisini ve her bir anahtarla ilişkili tüm değerleri gösteren OutlineViewer programı kullanılarak kolayca görüntülenebilir.

Not

Actually NetworkTables has a flat namespace for the keys. Having tables and subtables is an abstraction to make it easier to organize your data. So for a table called “SmartDashboard” and a key named “xValue”, it is really a single key called “/SmartDashboard/xValue”. The hierarchy is not actually represented in the distributed data, only keys with prefixes that are the contained table.