Robotic Knowledge
379 subscribers
242 photos
62 videos
2 files
170 links
دانش و برنامه‌نویسی برای رباتیک
Download Telegram
#ROS2
#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
👍2