iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
DevOps

IoT Cloud Computing on robotic vehicle系列 第 22

[虛實整合]FRC NetworkTables的程式設計

  • 分享至 

  • xImage
  •  

在研究FRC組合鍵(Hotkeys)之前,我們先來了解FRC所用來控制的Network Table如何運作。

在地端,我們的主要控制車子馬達的程式使用JAVA,這是因為目前在FRC上跑的處理器確定支援JAVA與C++,然後把JAVA的程式放在車子上的NI roboRIO,然後local的server透過Python程式將Network Tables放入與取出,來告訴JAVA程式用以控制車子。
https://ithelp.ithome.com.tw/upload/images/20221007/200057225LvP8crGwY.png
執行FRC動作控制的JAVA程式如下:

public class swerveControlPID extends CommandBase {
    public swerveControlPID(DriveTrain subsystem) {
        m_motor_R_LB = new CANSparkMax(Constants.PORT_MOTOR_RA, MotorType.kBrushless); 
        m_encoder_R_LB = m_motor_R_LB.getEncoder(); // 取得車子的encoder
        m_pidController_R_LB = m_motor_R_LB.getPIDController(); // 取得控制權
        m_pidController_R_LB.setFeedbackDevice(m_encoder_R_LB); // 透過encoder獲取訊息
    }
    @Override
    public void execute() {    
        // 從Network Tables取得控制訊息,將控制訊息傳給FRC
        double rotations = SmartDashboard.getNumber("Set Rotations R", 0);
        m_pidController_R_LB.setReference(rotations, CANSparkMax.ControlType.kPosition);
    }
}

然後透過Python程式提供networktables讀取與寫入的library,可以方便取得與寫入Network Tables,
首先 pip install pynetworktables

程式碼如下:

import sys
import time
from networktables import NetworkTables

ip = "xxx.xxx.xxx.xxx"

NetworkTables.initialize(ip)

sd = NetworkTables.getTable("SmartDashboard")

i = 0
while True:
    print("time : ", time.time())
    sd = NetworkTables.getTable("SmartDashboard")
    print("NetworkTables._tables : ", sd.getKeys())
    sd.putNumber('Set Velocity D', i)
    print(sd.getNumber('Set Velocity D', 0))
    i += 1
    time.sleep(1)
    if i > 100:
        i = 100

(以上為夥伴麒麟、岡山高中學生、與成大學生嘉軒提供)

並後續在JAVA程式上寫一連串動作的定義指令,而該指令由Python那頭寫入NetworkTables。


上一篇
[虛實整合]Unity Training Model with Python
下一篇
[虛實整合]AWS IoT Core for Virtual Device (Thing)
系列文
IoT Cloud Computing on robotic vehicle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言