-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtfPub.cpp
More file actions
52 lines (33 loc) · 1.38 KB
/
tfPub.cpp
File metadata and controls
52 lines (33 loc) · 1.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <tfPub.hpp>
#include <rosidl_runtime_c/string_functions.h>
#include <esp_log.h>
const rosidl_message_type_support_t * tfMsgType = ROSIDL_GET_MSG_TYPE_SUPPORT(tf2_msgs, msg, TFMessage);
TfPub* current = 0;
void tf_timer_callback(rcl_timer_t * tmr, int64_t);
TfPub::TfPub() {
current = this;
// init msg data
tf2_msgs__msg__TFMessage__init(&m_msg);
m_msg.transforms.capacity = MAX_TANSFORMS;
m_msg.transforms.size = 0;
m_msg.transforms.data = m_transform_slots;
}
void TfPub::init()
{
rclc_publisher_init_default(&m_rcl_pub, node, tfMsgType, "/tf");
rclc_timer_init_default(&m_tf_timer, support, RCL_MS_TO_NS(TF_PUBLISH_DELAY_MS), TfPub::tf_timer_callback);
rclc_executor_add_timer(exec, &m_tf_timer);
}
void TfPub::addSource(const char *parent, const char *child, TfSource & source){
if(sourceCount == MAX_TANSFORMS) return;
geometry_msgs__msg__TransformStamped* slot = &m_transform_slots[sourceCount++];
rosidl_runtime_c__String__init(&slot->child_frame_id);
rosidl_runtime_c__String__init(&slot->header.frame_id);
rosidl_runtime_c__String__assign(&slot->child_frame_id, child);
rosidl_runtime_c__String__assign(&slot->header.frame_id, parent);
source = slot;
m_msg.transforms.size++;
}
void TfPub::tf_timer_callback(rcl_timer_t * tmr, int64_t){
rcl_publish(¤t->m_rcl_pub, ¤t->m_msg, NULL);
};