2 #include <ros/package.h>
3 #include <tree_generator/TreeFromKF.hpp>
4 #include <tree_generator/YamlCreator.hpp>
5 #include <sarafun_msgs/BTGeneration.h>
13 bool keyframeCallback(sarafun_msgs::BTGeneration::Request &req,
14 sarafun_msgs::BTGeneration::Response &res)
16 if (req.keyframe_sequence.size() == 0)
18 ROS_ERROR(
"Received an empty keyframe sequence!");
27 for (
int i = 0; i < req.keyframe_sequence.size(); i++)
29 label = req.keyframe_sequence[i].label;
31 create_yaml.
addField(label,
"idx", req.keyframe_sequence[i].idx);
34 json tree = create_json->
createTree(req.keyframe_sequence);
36 std::string tree_path = ros::package::getPath(
"tree_generator") +
"/data/generated/" + tree_name +
".json";
42 std::string params_path = ros::package::getPath(
"tree_generator") +
"/data/generated/" + tree_name +
".yaml";
48 catch(std::logic_error &e)
50 ROS_ERROR(
"Tried to create a tree, but got the logic error: %s", e.what());
55 ROS_ERROR(
"Tried to create a tree, but got an unknown error!");
60 int main(
int argc,
char ** argv)
62 ros::init(argc, argv,
"tree_generator");
64 std::string kf_service;
65 std::string node_name = ros::this_node::getName();
67 if (!nh.getParam(node_name +
"/keyframe_service_name", kf_service))
69 ROS_ERROR(
"Tree generator started without a keyframe service name in the parameter server! Aborting (%s/keyframe_service_name)", node_name.c_str());
74 if (!nh.getParam(node_name +
"/name", tree_name))
76 ROS_ERROR(
"Tree generator requires a name for the generated trees! (%s/name)", node_name.c_str());
82 ros::ServiceServer tree_generation_service = nh.advertiseService(kf_service, keyframeCallback);
83 ROS_INFO(
"Started the tree generator node");
void replaceWithUnderscore(std::string &label)
json createTree(const std::vector< sarafun_msgs::KeyframeMsg > &keyframes_list)
void writeFile(std::string file_path)
void addField(std::string label, std::string field, int value)