<source : unsplash>

一、簡介

rosserial_arduino套件包可以產生時間戳記,讓 Arduino 和本機可以在 roscore 啟動時,保持同步。而在 ROS tutorial的教學中,展現如何取得時間,如何發佈 tf 轉換。


二、範例程式成果與解說

(一)、完整程式碼


(二)、程式碼解說

1.必備的ROS標頭檔

#include <ros.h>
#include <ros/time.h>
#include <tf/transform_broadcaster.h>

ros.h 標頭檔包含了標準 ROS 類別,每支 ROS 程式都要 include 此標頭檔。
ros/time.h 定義時間相關內容。
tf/transform_broadcaster.h 定義座標轉換相關內容。

2.節點處理器

ros::NodeHandle nh;

為宣告一個 ROS 節點管理器。

3.定義時間戳記和 tf 廣播

geometry_msgs::TransformStamped t;
tf::TransformBroadcaster broadcaster;

回調函式是節點訂閱消息(message)的基礎機制,當有消息到達時,會自動以消息的指標作為參數,再呼叫回調函式,完成對消息內容的處理。以上程式用來接收 Publisher 發布的 Empty 消息,讓 Arduino 板子的第13支腳位的 LED 閃爍。

4.初始化 broadcaster

void setup()
{
   nh.initNode();
   broadcaster.init(nh);
}

對 broadcaster 進行初始化,讓 broadcaster 可以正常發佈訊息。

5. 設定 frame ID 和相關數值 (如轉換、旋轉)

void loop()
{  
  t.header.frame_id = odom;
  t.child_frame_id = base_link;
  t.transform.translation.x = 1.0; 
  t.transform.rotation.x = 0.0;
  t.transform.rotation.y = 0.0; 
  t.transform.rotation.z = 0.0; 
  t.transform.rotation.w = 1.0;  
  t.header.stamp = nh.now();
  broadcaster.sendTransform(t);
  nh.spinOnce();
  delay(10);
}

" nh.now() returns the current time " 程式碼會回傳當前時間。

(三)、執行

指令如下 >>
$ roscore
$ rosrun tf tf_echo odom base_link

---
參考資料 :



0 留言