3 #include <cnoid/BodyItem>
4 #include <cnoid/ItemManager>
5 #include <cnoid/MessageView>
6 #include <cnoid/PutPropertyFunction>
7 #include <cnoid/RootItem>
19 rclcpp::init(argc, argv);
24 ext->itemManager().registerClass<
ClockPublisherItem>(
"CnoidRosUtils::ClockPublisherItem");
55 cnoid::Item::doPutProperties(putProperty);
58 [&](
const double & pub_rate)
60 pub_rate_ = std::min(std::max(pub_rate, 1e-1), 1e3);
91 world_ = this->findOwnerItem<cnoid::WorldItem>();
99 for(Item * child =
world_->childItem(); child; child = child->nextItem())
101 cnoid::SimulatorItemPtr sim =
dynamic_cast<cnoid::SimulatorItem *
>(child);
102 if(sim && !sim->isRunning() && !
hooked_sims_.count(sim->name()))
114 sim_ = cnoid::SimulatorItem::findActiveSimulatorItemFor(
this);
117 cnoid::MessageView::instance()->putln(
"[ClockPublisherItem] SimulatorItem not found", cnoid::MessageView::ERROR);
122 nh_ = rclcpp::Node::make_shared(
"CnoidPlugin::ClockPublisher");
159 rosgraph_msgs::msg::Clock msg;
160 msg.clock = rclcpp::Time(
static_cast<int64_t
>(
sim_->currentTime() * 1e9));
167 return std::max(
static_cast<int>(1.0 / (
pub_rate_ *
sim_->worldTimeStep())), 1);
Plugin item to publish clock topic.
virtual bool store(cnoid::Archive &archive) override
virtual bool restore(const cnoid::Archive &archive) override
virtual void doPutProperties(cnoid::PutPropertyFunction &putProperty) override
virtual cnoid::Item * doDuplicate() const override
std::set< std::string > hooked_sims_
rclcpp::Publisher< rosgraph_msgs::msg::Clock >::SharedPtr clock_pub_
static void initialize(cnoid::ExtensionManager *ext)
cnoid::WorldItemPtr world_
std::string clock_topic_name_
int post_dynamics_func_id_
rclcpp::Node::SharedPtr nh_
cnoid::SimulatorItemPtr sim_