#ROS2
#Callbacks
در ساختار نرمافزاری ROS2 رایج است که از callback functions برای subscribe کردن به یک topic استفاده کنیم. مثال آن این چنین است:
اما این روش بهینه نیست زیرا تعدد node ها منجر به تعدد callback ها و نهایتا بار زیاد بر روی CPU میشود. راه حل بهینه استفاده از متد take است.
یک مثال:
این ساختار توسط منبع تیم Autoware پیشنهاد شده است و مزیت آن جلوگیری از CPU Load است.
[Ref 1] [Ref 2]
—————
@roboticknowledge
#Callbacks
در ساختار نرمافزاری ROS2 رایج است که از callback functions برای subscribe کردن به یک topic استفاده کنیم. مثال آن این چنین است:
auto topic_callback =
[this](std_msgs::msg::String::UniquePtr msg) -> void {
RCLCPP_INFO(this->get_logger(), "I heard: '%s'", msg->data.c_str());
};
subscription_ =
this->create_subscription<std_msgs::msg::String>("topic", 10, topic_callback);
اما این روش بهینه نیست زیرا تعدد node ها منجر به تعدد callback ها و نهایتا بار زیاد بر روی CPU میشود. راه حل بهینه استفاده از متد take است.
Subscription->take()
یک مثال:
SteeringReport::SharedPtr msg;
rclcpp::MessageInfo msg_info;
if (sub_->take(msg, msg_info)) {
// processing and publishing after this
این ساختار توسط منبع تیم Autoware پیشنهاد شده است و مزیت آن جلوگیری از CPU Load است.
[Ref 1] [Ref 2]
—————
@roboticknowledge
ROS Discourse
New documentation on how to take a message from a subscriber without executing a callback function
Hello everyone! Autoware Documentation provides a guideline to take a message from Subscription without executing any callback function. https://autowarefoundation.github.io/autoware-documentation/main/contributing/coding-guidelines/ros-nodes/topic-message…
👍2