iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
DevOps

IoT Cloud Computing on robotic vehicle系列 第 25

[虛實整合]FRC Network tables與ROS訊息間的轉換

  • 分享至 

  • xImage
  •  

在ROS master上的Python程式,可將控制FRC的Networktables程式,與ROS python的rclpy來publish程式,結合在一起。

https://ithelp.ithome.com.tw/upload/images/20221010/20005722eSag0EJF0s.png

但不需要去研究Network tables如何轉換成ROS topic messages,或是ROS怎麼控制Network tables,那都太複雜。而是藉由JSON的檔案格式作為兩者之間的溝通媒介。

之前的文章透過mqtt client監聽到雲端傳來的by topics的JSON訊息。

self.client = mqtt.Client()
self.client.on_message = self.subscribe_from_iot

#透過rclpy.node產生publisher node 
self.ros_publishers[topic] = self.create_publisher(PointStamped, ros_topic, 10)

#初始化Network Tables
NetworkTables.initialize(self.ip)

將資料同時傳給ROS cluster與寫入NetworkTables

def subscribe_from_iot(self, client, userdata, msg):
    if msg.topic == 'clicked_point':
       data = json.loads(msg.payload.decode('utf-8'))
       pub_msg = PointStamped()
       pub_msg.header.stamp = self.get_clock().now().to_msg()
       pub_msg.header.frame_id = 'map'
       if "point" in data:
         pub_msg.point.x = float(data['point']['x'])
         pub_msg.point.y = float(data['point']['y'])
         pub_msg.point.z = float(data['point']['z'])

       #將資料傳給ROS
       self.ros_publishers[msg.topic].publish(pub_msg)
       
       #將資料傳給FRC
       sd = NetworkTables.getTable("SmartDashboard")
       sd.putNumber("ProcessVariable positions", pub_msg.point);

上一篇
[虛實整合]實體FRC的回饋資料
下一篇
[虛實整合]FRC前端介面設計與控制
系列文
IoT Cloud Computing on robotic vehicle30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言