1919#include < std_msgs/msg/float32.hpp>
2020#include < std_msgs/msg/float64.hpp>
2121#include < std_msgs/msg/string.hpp>
22+ #include < geometry_msgs/msg/pose_stamped.hpp>
2223
2324#include < std_srvs/srv/empty.hpp>
2425#include < std_srvs/srv/set_bool.hpp>
3031#include " btcpp_ros2_interfaces/action/execute_tree.hpp"
3132#include " btcpp_ros2_interfaces/msg/custom_msg.hpp"
3233
34+ // Simple Action that updates an instance of Position2D in the blackboard
35+ class SayHi : public BT ::StatefulActionNode
36+ {
37+ public:
38+ SayHi (const std::string& name, const BT::NodeConfig& config)
39+ : BT::StatefulActionNode(name, config)
40+ {}
41+
42+ static BT::PortsList providedPorts ()
43+ {
44+ return { BT::InputPort<std::string>(" person_name" ) };
45+ }
46+
47+ BT::NodeStatus onStart () override
48+ {
49+ const auto name = getInput<std::string>(" person_name" );
50+ if (!name)
51+ return BT::NodeStatus::FAILURE;
52+
53+ person_name_ = name.value ();
54+ counter_ = 0 ;
55+
56+ std::cout << " Starting to say hi to " << person_name_ << " ..." << std::endl;
57+ return BT::NodeStatus::RUNNING;
58+ }
59+
60+ BT::NodeStatus onRunning () override
61+ {
62+ if (counter_ < 3 )
63+ {
64+ std::cout << " Hi " << person_name_ << " ! (" << counter_+1 << " /3)" << std::endl;
65+ counter_++;
66+ return BT::NodeStatus::RUNNING;
67+ }
68+ else
69+ {
70+ std::cout << " Finished saying hi to " << person_name_ << " !" << std::endl;
71+ return BT::NodeStatus::SUCCESS;
72+ }
73+ }
74+
75+ void onHalted () override
76+ {
77+ std::cout << " SayHi halted." << std::endl;
78+ }
79+
80+ private:
81+ std::string person_name_;
82+ int counter_ = 0 ;
83+ };
3384
3485using namespace BT ;
3586
3687BT_REGISTER_ROS_NODES (factory, params)
3788{
89+
90+ factory.registerNodeType <SayHi>(" SayHi" );
91+
3892 // LOGS
3993 factory.registerNodeType <DebugLog>(" DebugLog" );
4094 factory.registerNodeType <InfoLog>(" InfoLog" );
@@ -62,6 +116,8 @@ BT_REGISTER_ROS_NODES(factory, params)
62116 factory.registerNodeType <AutoSerSubscriber<std_msgs::msg::Float32>>(" MonitorAutoStdFloat" ,params);
63117 factory.registerNodeType <AutoSerSubscriber<std_msgs::msg::Float64>>(" MonitorAutoStdDouble" ,params);
64118 factory.registerNodeType <AutoSerSubscriber<std_msgs::msg::String>>(" MonitorAutoStdString" ,params);
119+ factory.registerNodeType <AutoSerSubscriber<geometry_msgs::msg::PoseStamped>>(" MonitorAutoPoseStamped" ,params);
120+ factory.registerNodeType <JsonSerSubscriber<geometry_msgs::msg::PoseStamped>>(" MonitorJsonPoseStamped" ,params);
65121
66122 // Possible variant of PRIMITIVE SUBSCRIBER WITH JSON Serialization
67123 factory.registerNodeType <JsonSerSubscriber<std_msgs::msg::Int32>>(" MonitorJsonStdInt" ,params);
@@ -80,7 +136,8 @@ BT_REGISTER_ROS_NODES(factory, params)
80136 factory.registerNodeType <AutoDesPublisher<std_msgs::msg::Float32>>(" PublishAutoStdFloat" ,params);
81137 factory.registerNodeType <AutoDesPublisher<std_msgs::msg::Float64>>(" PublishAutoStdDouble" ,params);
82138 factory.registerNodeType <AutoDesPublisher<std_msgs::msg::String>>(" PublishAutoStdString" ,params);
83-
139+ factory.registerNodeType <AutoDesPublisher<geometry_msgs::msg::PoseStamped>>(" PublishAutoPoseStamped" ,params);
140+
84141 // PRIMITIVE SERVICES
85142 factory.registerNodeType <AutoDesJsonSerServiceClient<std_srvs::srv::Empty>>(" ServiceAutoCallJsonEmpty" ,params);
86143 factory.registerNodeType <AutoDesJsonSerServiceClient<std_srvs::srv::SetBool>>(" ServiceAutoCallJsonBool" ,params);
@@ -97,4 +154,5 @@ BT_REGISTER_ROS_NODES(factory, params)
97154 factory.registerNodeType <SmartJsonSerSubscriber<btcpp_ros2_interfaces::msg::NodeStatus>>(" MonitorSmartJsonNodeStatus" ,params);
98155 factory.registerNodeType <SmartJsonSerSubscriber<btcpp_ros2_interfaces::msg::CustomMsg>>(" MonitorSmartJsonCustomMsg" ,params);
99156
157+
100158};
0 commit comments