Skip to content

Commit 0a2ee17

Browse files
committed
Add params for mission manager
1 parent dc8e938 commit 0a2ee17

File tree

8 files changed

+44
-16
lines changed

8 files changed

+44
-16
lines changed

docker/ground_control_station/.bashrc

+2
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,5 @@ function cws(){
157157

158158
source /opt/ros/humble/setup.bash
159159
sws # source the ROS2 workspace by default
160+
161+
export RCUTILS_COLORIZED_OUTPUT=1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
mission_manager_node:
2+
ros__parameters:
3+
grid_cell_size: 5.0
4+
visualize_search_allocation: true

ros_ws/src/ground_control_station/mission_manager/include/mission_manager/BeliefMap.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class BeliefMap
3030
// std::vector<std::vector<int>> sensor_model_id;
3131

3232
BeliefMap();
33-
bool reset_map(rclcpp::Logger logger, airstack_msgs::msg::SearchMissionRequest search_mission_request);
33+
bool reset_map(rclcpp::Logger logger, airstack_msgs::msg::SearchMissionRequest search_mission_request, double grid_cell_size);
3434
bool update_map(rclcpp::Logger logger, const airstack_msgs::msg::BeliefMapData::SharedPtr new_belief_data);
3535
grid_map::GridMap map_;
3636

@@ -62,6 +62,7 @@ class BeliefMap
6262
double max_x = -DBL_MAX;
6363
double min_y = DBL_MAX;
6464
double max_y = -DBL_MAX;
65+
double grid_cell_size_;
6566

6667

6768
};

ros_ws/src/ground_control_station/mission_manager/include/mission_manager/MissionManager.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,10 @@ class MissionManager
6868
public:
6969
MissionManager(int max_number_agents);
7070

71-
std::vector<airstack_msgs::msg::TaskAssignment> assign_tasks(rclcpp::Logger logger, const airstack_msgs::msg::SearchMissionRequest &plan_request, rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub);
71+
std::vector<airstack_msgs::msg::TaskAssignment> assign_tasks(rclcpp::Logger logger,
72+
const airstack_msgs::msg::SearchMissionRequest &plan_request,
73+
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub,
74+
bool visualize_search_allocation);
7275
bool check_agent_changes(rclcpp::Logger logger, uint8_t robot_id, rclcpp::Time current_time);
7376
bool check_target_changes(rclcpp::Logger logger, std::string target_list, rclcpp::Time current_time);
7477
std::vector<bool> get_valid_agents() const { return valid_agents_; }

ros_ws/src/ground_control_station/mission_manager/include/mission_manager/mission_manager_node.h

+12-4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@ class MissionManagerNode : public rclcpp::Node
4242
MissionManagerNode()
4343
: Node("mission_manager"), count_(0)
4444
{
45+
this->declare_parameter("grid_cell_size", 10.0);
46+
this->declare_parameter("visualize_search_allocation", false);
47+
this->get_parameter("grid_cell_size", grid_cell_size_);
48+
this->get_parameter("visualize_search_allocation", visualize_search_allocation_);
49+
50+
4551
mission_subscriber_ = this->create_subscription<airstack_msgs::msg::SearchMissionRequest>(
4652
"search_mission_request", 1, std::bind(&MissionManagerNode::search_mission_request_callback, this, std::placeholders::_1));
4753

@@ -102,6 +108,8 @@ class MissionManagerNode : public rclcpp::Node
102108

103109
size_t count_;
104110
rclcpp::TimerBase::SharedPtr timer_;
111+
double grid_cell_size_;
112+
bool visualize_search_allocation_;
105113
int max_number_agents_ = 5; // TODO: get from param server
106114
airstack_msgs::msg::SearchMissionRequest latest_search_mission_request_;
107115
std::shared_ptr<MissionManager> mission_manager_;
@@ -138,16 +146,16 @@ class MissionManagerNode : public rclcpp::Node
138146
latest_search_mission_request_ = *msg;
139147

140148
// TODO: visualize the seach mission request
141-
this->mission_manager_->belief_map_.reset_map(this->get_logger(), *msg);
142-
this->publish_tasks(this->mission_manager_->assign_tasks(this->get_logger(), latest_search_mission_request_, viz_pub_));
149+
this->mission_manager_->belief_map_.reset_map(this->get_logger(), *msg, grid_cell_size_);
150+
this->publish_tasks(this->mission_manager_->assign_tasks(this->get_logger(), latest_search_mission_request_, viz_pub_, visualize_search_allocation_));
143151
}
144152

145153
void agent_odom_callback(const std_msgs::msg::String::SharedPtr msg, const uint8_t &robot_id)
146154
{
147155
RCLCPP_INFO(this->get_logger(), "Received agent odom '%s'", msg->data.c_str());
148156
if (this->mission_manager_->check_agent_changes(this->get_logger(), robot_id, this->now()))
149157
{
150-
this->publish_tasks(this->mission_manager_->assign_tasks(this->get_logger(), latest_search_mission_request_, viz_pub_));
158+
this->publish_tasks(this->mission_manager_->assign_tasks(this->get_logger(), latest_search_mission_request_, viz_pub_, visualize_search_allocation_));
151159
}
152160
}
153161

@@ -159,7 +167,7 @@ class MissionManagerNode : public rclcpp::Node
159167
// Check if change in the number of targets or id numbers
160168
if (this->mission_manager_->check_target_changes(this->get_logger(), msg->data, this->now()))
161169
{
162-
this->publish_tasks(this->mission_manager_->assign_tasks(this->get_logger(), latest_search_mission_request_, viz_pub_));
170+
this->publish_tasks(this->mission_manager_->assign_tasks(this->get_logger(), latest_search_mission_request_, viz_pub_, visualize_search_allocation_));
163171
}
164172
}
165173

ros_ws/src/ground_control_station/mission_manager/launch/mission_manager_launch.py

+7
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,20 @@ def generate_launch_description():
1212
# Define the path to the configuration file
1313
visualization_config_file = os.path.join(package_share_directory, 'config', 'grid_map.yaml')
1414
rviz_config_file = os.path.join(package_share_directory, 'config', 'mission_manager.rviz')
15+
16+
config = os.path.join(
17+
package_share_directory,
18+
'config',
19+
'mission_manager.yaml'
20+
)
1521

1622
mission_manager = Node(
1723
package='mission_manager',
1824
# namespace='mission_manager',
1925
executable='mission_manager_node',
2026
output="screen",
2127
name='mission_manager_node',
28+
parameters=[config]
2229
)
2330

2431
# grid_map_visualization_node = Node(

ros_ws/src/ground_control_station/mission_manager/src/BeliefMap.cpp

+7-7
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ BeliefMap::BeliefMap()
55
: map_(std::vector<std::string>({"probability", "priority"}))
66
{ }
77

8-
bool BeliefMap::reset_map(rclcpp::Logger logger, airstack_msgs::msg::SearchMissionRequest search_mission_request)
8+
bool BeliefMap::reset_map(rclcpp::Logger logger, airstack_msgs::msg::SearchMissionRequest search_mission_request, double grid_cell_size)
99
{
1010
RCLCPP_INFO(logger, "Resetting map");
1111
// Setting up map.
1212
// Get the max and min x and y values from the search area
13-
double resolution = 5.0;
13+
grid_cell_size_ = grid_cell_size;
1414
min_x = DBL_MAX;
1515
max_x = -DBL_MAX;
1616
min_y = DBL_MAX;
@@ -37,15 +37,15 @@ bool BeliefMap::reset_map(rclcpp::Logger logger, airstack_msgs::msg::SearchMissi
3737
// TODO param for grid resolution
3838
// TODO fix coordinate frames. Match airstack to IPP to grid map. grid map is NWU, IPP is ENU, airstack is ...
3939
// round to nearest resolution
40-
min_x = std::floor(min_x / resolution) * resolution;
41-
max_x = std::ceil(max_x / resolution) * resolution;
42-
min_y = std::floor(min_y / resolution) * resolution;
43-
max_y = std::ceil(max_y / resolution) * resolution;
40+
min_x = std::floor(min_x / grid_cell_size_) * grid_cell_size_;
41+
max_x = std::ceil(max_x / grid_cell_size_) * grid_cell_size_;
42+
min_y = std::floor(min_y / grid_cell_size_) * grid_cell_size_;
43+
max_y = std::ceil(max_y / grid_cell_size_) * grid_cell_size_;
4444
double x_length = std::abs(max_x - min_x);
4545
double y_length = std::abs(max_y - min_y);
4646

4747
map_.setGeometry(grid_map::Length(x_length, y_length),
48-
resolution,
48+
grid_cell_size_,
4949
grid_map::Position(std::round(min_x + x_length / 2.0),
5050
std::round(min_y + y_length / 2.0)));
5151
map_.setFrameId("map"); // TODO update to correct frame or set TF frame somewhere. There is already a map frame

ros_ws/src/ground_control_station/mission_manager/src/MissionManager.cpp

+6-3
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,8 @@ std::vector<std::vector<std::vector<double>>> MissionManager::allocate_search_ma
318318
std::vector<airstack_msgs::msg::TaskAssignment> MissionManager::assign_tasks(
319319
rclcpp::Logger logger,
320320
const airstack_msgs::msg::SearchMissionRequest &plan_request,
321-
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub)
321+
rclcpp::Publisher<visualization_msgs::msg::MarkerArray>::SharedPtr pub,
322+
bool visualize_search_allocation)
322323
{
323324
RCLCPP_INFO(logger, "Assigning tasks to drones");
324325

@@ -382,7 +383,9 @@ std::vector<airstack_msgs::msg::TaskAssignment> MissionManager::assign_tasks(
382383
}
383384

384385
//publish visualizations for search request
385-
pub->publish(visualize_multi_agent_search_request(num_agents, cluster_centroids, clusters, cluster_bounds));
386-
386+
if (visualize_search_allocation)
387+
{
388+
pub->publish(visualize_multi_agent_search_request(num_agents, cluster_centroids, clusters, cluster_bounds));
389+
}
387390
return task_assignments;
388391
}

0 commit comments

Comments
 (0)