pattern_generator_node.cpp
Go to the documentation of this file.
2 
4 {
6  : pattern_generator(nh)
7 {
8  double update_rate;
9  nh.param("pattern_generator/update_rate", update_rate, 10.0);
10  nh.param("pattern_generator/republish_complete_step_plan", republish_complete_step_plan, false);
11 
12  // subscribe topics
13  set_params_sub = nh.subscribe("pattern_generator/set_params", 1, &PatternGeneratorNode::setParams, this);
14 
15  // publish topics
16  step_plan_pub = nh.advertise<msgs::StepPlan>("step_plan", 1);
17  step_plan_vis_pub = nh.advertise<msgs::StepPlan>("vis/step_plan", 1);
18 
19  // start own services
20  set_params_srv = nh.advertiseService("pattern_generator/set_params", &PatternGeneratorNode::setParamsService, this);
21 
22  // init action client
23  execute_step_plan_ac = SimpleActionClient<msgs::ExecuteStepPlanAction>::create(nh, "execute_step_plan");
24 
25  // init timer to periodically call the pattern generator
26  update_intervall = ros::Duration(1.0/update_rate);
28 }
29 
31 {
32 }
33 
34 void PatternGeneratorNode::setParams(const msgs::PatternGeneratorParametersConstPtr& params)
35 {
37 }
38 
39 bool PatternGeneratorNode::setParamsService(msgs::PatternGeneratorParametersService::Request& req, msgs::PatternGeneratorParametersService::Response& /*resp*/)
40 {
41  pattern_generator.setParams(req.params);
42  return true; // return always true so the message is returned
43 }
44 
45 void PatternGeneratorNode::executeStepPlanFeedback(const msgs::ExecuteStepPlanFeedbackConstPtr& feedback)
46 {
47  pattern_generator.updateFirstChangeableStepIndex(feedback->first_changeable_step_index);
48 }
49 
51 {
53 
55  return;
56 
57  // publish vis of entire plan
58  msgs::StepPlan complete_step_plan;
59  pattern_generator.getCompleteStepPlan(complete_step_plan);
60  step_plan_vis_pub.publish(complete_step_plan);
61 
62  msgs::ExecuteStepPlanGoal goal;
63  pattern_generator.getLastStepSequence(goal.step_plan); // must be get to reset hasNew flag
64 
66  goal.step_plan = complete_step_plan;
67 
68  // send to controller if available
70  {
71  execute_step_plan_ac->sendGoal(goal,
72  SimpleActionClient<msgs::ExecuteStepPlanAction>::SimpleDoneCallback(),
73  SimpleActionClient<msgs::ExecuteStepPlanAction>::SimpleActiveCallback(),
74  boost::bind(&PatternGeneratorNode::executeStepPlanFeedback, this, _1));
75  }
76 }
77 }
78 
79 int main(int argc, char **argv)
80 {
81  ros::init(argc, argv, "vigir_pattern_generator");
82  ros::NodeHandle nh;
83  vigir_footstep_planning::PatternGeneratorNode patternGeneratorNode(nh);
84  ros::spin();
85 
86  return 0;
87 }
void update(const ros::TimerEvent &timer)
void publish(const boost::shared_ptr< M > &message) const
void updateFirstChangeableStepIndex(int first_changeable_step_index_)
void setParams(const msgs::PatternGeneratorParameters &params)
Subscriber subscribe(const std::string &topic, uint32_t queue_size, void(T::*fp)(M), T *obj, const TransportHints &transport_hints=TransportHints())
ROSCPP_DECL void init(int &argc, char **argv, const std::string &name, uint32_t options=0)
ServiceServer advertiseService(const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj)
SimpleActionClient< msgs::ExecuteStepPlanAction >::Ptr execute_step_plan_ac
bool param(const std::string &param_name, T &param_val, const T &default_val) const
void getCompleteStepPlan(msgs::StepPlan &step_plan) const
void setParams(const msgs::PatternGeneratorParametersConstPtr &params)
Timer createTimer(Rate r, Handler h, Obj o, bool oneshot=false, bool autostart=true) const
Publisher advertise(const std::string &topic, uint32_t queue_size, bool latch=false)
ROSCPP_DECL void spin()
bool setParamsService(msgs::PatternGeneratorParametersService::Request &req, msgs::PatternGeneratorParametersService::Response &resp)
void getLastStepSequence(msgs::StepPlan &step_plan) const
int main(int argc, char **argv)
void executeStepPlanFeedback(const msgs::ExecuteStepPlanFeedbackConstPtr &feedback)


vigir_pattern_generator
Author(s): Alexander Stumpf
autogenerated on Sun Nov 17 2019 03:30:06