simple_exploration_controller.cpp
Go to the documentation of this file.
00001 //=================================================================================================
00002 // Copyright (c) 2012, Stefan Kohlbrecher, TU Darmstadt
00003 // All rights reserved.
00004 
00005 // Redistribution and use in source and binary forms, with or without
00006 // modification, are permitted provided that the following conditions are met:
00007 //     * Redistributions of source code must retain the above copyright
00008 //       notice, this list of conditions and the following disclaimer.
00009 //     * Redistributions in binary form must reproduce the above copyright
00010 //       notice, this list of conditions and the following disclaimer in the
00011 //       documentation and/or other materials provided with the distribution.
00012 //     * Neither the name of the Simulation, Systems Optimization and Robotics
00013 //       group, TU Darmstadt nor the names of its contributors may be used to
00014 //       endorse or promote products derived from this software without
00015 //       specific prior written permission.
00016 
00017 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00018 // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00019 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00020 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY
00021 // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00022 // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00023 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00024 // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00025 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00026 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00027 //=================================================================================================
00028 
00029 
00030 #include <ros/ros.h>
00031 #include <hector_path_follower/hector_path_follower.h>
00032 #include <hector_nav_msgs/GetRobotTrajectory.h>
00033 
00034 class SimpleExplorationController
00035 {
00036 public:
00037   SimpleExplorationController()
00038   {
00039     ros::NodeHandle nh;
00040 
00041     exploration_plan_service_client_ = nh.serviceClient<hector_nav_msgs::GetRobotTrajectory>("get_exploration_path");
00042 
00043     path_follower_.initialize(&tfl_);
00044 
00045     exploration_plan_generation_timer_ = nh.createTimer(ros::Duration(15.0), &SimpleExplorationController::timerPlanExploration, this, false );
00046     cmd_vel_generator_timer_ = nh.createTimer(ros::Duration(0.1), &SimpleExplorationController::timerCmdVelGeneration, this, false );
00047 
00048     vel_pub_ = nh.advertise<geometry_msgs::Twist>("cmd_vel", 10);
00049 
00050   }
00051 
00052   void timerPlanExploration(const ros::TimerEvent& e)
00053   {
00054     hector_nav_msgs::GetRobotTrajectory srv_exploration_plan;
00055 
00056     if (exploration_plan_service_client_.call(srv_exploration_plan)){
00057       ROS_INFO("Generated exploration path with %u poses", (unsigned int)srv_exploration_plan.response.trajectory.poses.size());
00058       path_follower_.setPlan(srv_exploration_plan.response.trajectory.poses);
00059     }else{
00060       ROS_WARN("Service call for exploration service failed");
00061     }
00062   }
00063 
00064   void timerCmdVelGeneration(const ros::TimerEvent& e)
00065   {
00066     geometry_msgs::Twist twist;
00067     path_follower_.computeVelocityCommands(twist);
00068     vel_pub_.publish(twist);
00069   }
00070 
00071 
00072 protected:
00073   ros::ServiceClient exploration_plan_service_client_;
00074   ros::Publisher vel_pub_;
00075 
00076   tf::TransformListener tfl_;
00077 
00078   pose_follower::HectorPathFollower path_follower_;
00079 
00080   ros::Timer exploration_plan_generation_timer_;
00081   ros::Timer cmd_vel_generator_timer_;
00082 };
00083 
00084 int main(int argc, char **argv) {
00085   ros::init(argc, argv, ROS_PACKAGE_NAME);
00086 
00087   SimpleExplorationController ec;
00088 
00089   ros::spin();
00090 
00091   return 0;
00092 }


hector_exploration_controller
Author(s):
autogenerated on Wed May 8 2019 02:32:18