arduino
[ROS Beginner實作 : Arduino篇] 主題4 : Using Time and TF, 學會時間戳記與座標轉換
<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 留言