diff --git a/aeplanner/CMakeLists.txt b/aeplanner/CMakeLists.txt index 5287adb..7edd90a 100644 --- a/aeplanner/CMakeLists.txt +++ b/aeplanner/CMakeLists.txt @@ -8,11 +8,15 @@ find_package(catkin REQUIRED COMPONENTS geometry_msgs visualization_msgs message_generation + rqt_gui_cpp + rqt_gui tf tf2 genmsg actionlib_msgs actionlib + nodelet + std_msgs kdtree pigain @@ -44,9 +48,8 @@ generate_messages( ) catkin_package( - INCLUDE_DIRS include ${Eigen_INCLUDE_DIRS} ${OCTOMAP_INCLUDE_DIRS} ${catkin_INCLUDE_DIRS} LIBRARIES aeplanner ${catkin_LIBRARIES} ${OCTOMAP_LIBRARIES} - CATKIN_DEPENDS message_runtime roscpp geometry_msgs visualization_msgs tf kdtree + CATKIN_DEPENDS message_runtime roscpp geometry_msgs visualization_msgs tf kdtree actionlib_msgs std_msgs ) include_directories( diff --git a/aeplanner/package.xml b/aeplanner/package.xml index 16e57ee..9ebe181 100644 --- a/aeplanner/package.xml +++ b/aeplanner/package.xml @@ -12,6 +12,14 @@ catkin + genmsg + rqt_gui_cpp + actionlib_msgs + cmake_modules + actionlib + octomap + rqt_gui + std_msgs roscpp nodelet tf @@ -23,6 +31,8 @@ pigain dynamic_reconfigure + actionlib_msgs + std_msgs roscpp nodelet tf diff --git a/pigain/package.xml b/pigain/package.xml index 511cad1..9751b70 100644 --- a/pigain/package.xml +++ b/pigain/package.xml @@ -54,6 +54,7 @@ geometry_msgs rospy std_msgs + geometry_msgs message_generation rospy std_msgs diff --git a/rpl_exploration/config/exploration.yaml b/rpl_exploration/config/exploration.yaml index 2be4bc1..a87c2bd 100644 --- a/rpl_exploration/config/exploration.yaml +++ b/rpl_exploration/config/exploration.yaml @@ -22,13 +22,13 @@ rrt/min_nodes: 100 # bounding box: necessary to limit the simulation # scenario (smaller than actual gazebo scenario) -boundary/min: [-30.0, -30.0, 0.0] -boundary/max: [ 30.0, 30.0, 2.0] +boundary/min: [-10.0, -10.0, 0.0] +boundary/max: [ 10.0, 10.0, 1.0] visualize_rays: false visualize_tree: true visualize_exploration_area: true -robot_frame: "fcu" -world_frame: "map" +robot_frame: "base_link" +world_frame: "odom" diff --git a/rpl_exploration/src/fly_to.cpp b/rpl_exploration/src/fly_to.cpp index ff5e1a1..016ef0f 100644 --- a/rpl_exploration/src/fly_to.cpp +++ b/rpl_exploration/src/fly_to.cpp @@ -27,7 +27,7 @@ namespace rpl_exploration { << goal->pose.pose.position.y << ", " << goal->pose.pose.position.z << ") "); - ros::Rate r(20); + ros::Rate r(2); geometry_msgs::Point p = goal->pose.pose.position; float distance_to_goal = 9001; // Distance is over 9000 @@ -52,8 +52,8 @@ namespace rpl_exploration { ROS_INFO_STREAM("Publishing goal to (" << p.x << ", " << p.y << ", " << p.z << ") "); pub_.publish(goal->pose); - listener.waitForTransform("/map", "/base_link", ros::Time(0), ros::Duration(10.0) ); - listener.lookupTransform("/map", "/base_link", ros::Time(0), transform); + listener.waitForTransform("/odom", "/base_link", ros::Time(0), ros::Duration(10.0) ); + listener.lookupTransform("/odom", "/base_link", ros::Time(0), transform); geometry_msgs::Point q; q.x = (float)transform.getOrigin().x(); @@ -81,7 +81,7 @@ namespace rpl_exploration { yaw_diff = fabs(atan2(sin(goal_yaw-current_yaw), cos(goal_yaw-current_yaw))); r.sleep(); - } while(distance_to_goal > 0.8 or yaw_diff > 0.6*M_PI); + } while(ros::ok() && (distance_to_goal > 0.8 or yaw_diff > 0.6*M_PI)); as->setSucceeded(); diff --git a/rpl_exploration/src/rpl_exploration.cpp b/rpl_exploration/src/rpl_exploration.cpp index 8aaacec..b052e59 100644 --- a/rpl_exploration/src/rpl_exploration.cpp +++ b/rpl_exploration/src/rpl_exploration.cpp @@ -63,13 +63,20 @@ int main(int argc, char** argv) "local_position/pose"); double init_yaw = tf2::getYaw(init_pose->pose.orientation); // Up 2 meters and then forward one meter - double initial_positions[8][4] = { - { init_pose->pose.position.x, init_pose->pose.position.y, - init_pose->pose.position.z + 2.0, init_yaw }, - { init_pose->pose.position.x + 1.0 * std::cos(init_yaw), - init_pose->pose.position.y + 1.0 * std::sin(init_yaw), - init_pose->pose.position.z + 2.0, init_yaw }, - }; +// double initial_positions[8][4] = { +// { init_pose->pose.position.x, init_pose->pose.position.y, +// init_pose->pose.position.z + 2.0, init_yaw }, +// { init_pose->pose.position.x + 1.0 * std::cos(init_yaw), +// init_pose->pose.position.y + 1.0 * std::sin(init_yaw), +// init_pose->pose.position.z + 2.0, init_yaw }, +// }; + + // Modification for UGV to reduce z to zero + double initial_positions[8][4] = { + { init_pose->pose.position.x + 5, init_pose->pose.position.y, 0.0, init_yaw }, + { init_pose->pose.position.x + 5 * std::cos(init_yaw), + init_pose->pose.position.y + 1.0 * std::sin(init_yaw), 0.0, init_yaw }, + }; // This is the initialization motion, necessary that the known free space // allows the planning of initial paths. @@ -79,17 +86,24 @@ int main(int argc, char** argv) for (int i = 0; i < 2; ++i) { rpl_exploration::FlyToGoal goal; + // Added header to support move base + goal.pose.header.stamp = ros::Time::now(); + goal.pose.header.frame_id = "odom"; goal.pose.pose.position.x = initial_positions[i][0]; goal.pose.pose.position.y = initial_positions[i][1]; goal.pose.pose.position.z = initial_positions[i][2]; goal.pose.pose.orientation = tf::createQuaternionMsgFromYaw(initial_positions[i][3]); last_pose.pose = goal.pose.pose; - - ROS_INFO_STREAM("Sending initial goal..."); + last_pose.header.stamp = ros::Time::now(); + last_pose.header.frame_id = "odom"; + ROS_INFO_STREAM("Current position: (" << init_pose->pose.position.x << ", " << init_pose->pose.position.y << ", " << init_pose->pose.position.z << ") "); + ROS_INFO_STREAM("Sending initial goal..." << goal); ac.sendGoal(goal); ac.waitForResult(ros::Duration(0)); + + printf("Current State: %s\n", ac.getState().toString().c_str()); } // Start planning: The planner is called and the computed path sent to the @@ -104,14 +118,17 @@ int main(int argc, char** argv) aeplanner::aeplannerGoal aep_goal; aep_goal.header.stamp = ros::Time::now(); aep_goal.header.seq = iteration; - aep_goal.header.frame_id = "map"; + aep_goal.header.frame_id = "odom"; aep_goal.actions_taken = actions_taken; + ROS_INFO_STREAM("Sending goal..." << aep_goal); aep_ac.sendGoal(aep_goal); while (!aep_ac.waitForResult(ros::Duration(0.05))) { pub.publish(last_pose); + ROS_INFO_STREAM("Not waiting for the result, sending last pose." << last_pose); } + ROS_INFO_STREAM("Current result" << aep_ac.getResult()); ros::Duration fly_time; if (aep_ac.getResult()->is_clear) @@ -126,6 +143,9 @@ int main(int argc, char** argv) last_pose.pose = goal_pose.pose; rpl_exploration::FlyToGoal goal; + // Added header to support move base + goal.pose.header.stamp = ros::Time::now(); + goal.pose.header.frame_id = "odom"; goal.pose = goal_pose; ac.sendGoal(goal); @@ -137,7 +157,7 @@ int main(int argc, char** argv) { rrtplanner::rrtGoal rrt_goal; rrt_goal.start.header.stamp = ros::Time::now(); - rrt_goal.start.header.frame_id = "map"; + rrt_goal.start.header.frame_id = "odom"; rrt_goal.start.pose = last_pose.pose; if (!aep_ac.getResult()->frontiers.poses.size()) { @@ -167,6 +187,9 @@ int main(int argc, char** argv) last_pose.pose = goal_pose; rpl_exploration::FlyToGoal goal; + // Added header to support move base + goal.pose.header.stamp = ros::Time::now(); + goal.pose.header.frame_id = "odom"; goal.pose.pose = goal_pose; ac.sendGoal(goal);