Select Git revision
mediator.h 2.91 KiB
#ifndef MEDIATOR_
#define MEDIATOR_
#include "ros/ros.h"
#include "impl/abstract_mediator.h"
#include "impl/abstract_robot.h"
#include "impl/robot.h"
class Mediator : public Abstract_mediator{
protected:
visualization_msgs::MarkerArray* rviz_markers_ = new visualization_msgs::MarkerArray();
public:
Mediator(std::vector<std::vector<tf2::Transform>> objects, ros::Publisher* pub) : Abstract_mediator(objects, pub){};
void check_collision() override {
//for (int i = 0; i < objects_.size(); i++) {
for(int j = 0; j < objects_[0].size(); j++){
visualization_msgs::Marker marker;
marker.header.frame_id = "map";
marker.header.stamp = ros::Time();
marker.ns = "objects";
marker.id = j;
marker.type = visualization_msgs::Marker::CUBE;
marker.action = visualization_msgs::Marker::ADD;
marker.pose.position.x = objects_[0][j].getOrigin().getX();
marker.pose.position.y = objects_[0][j].getOrigin().getY();
marker.pose.position.z = objects_[0][j].getOrigin().getZ();
marker.pose.orientation.x = objects_[0][j].getRotation().getX();
marker.pose.orientation.y = objects_[0][j].getRotation().getY();
marker.pose.orientation.z = objects_[0][j].getRotation().getZ();
marker.pose.orientation.w = objects_[0][j].getRotation().getW();
marker.scale.x = box_size.getX();
marker.scale.y = box_size.getY();
marker.scale.z = box_size.getZ();
if(robots_[0]->check_single_object_collision(objects_[0][j])){
ROS_INFO("true");
marker.color.r = 0;
marker.color.g = 1.0;
marker.color.b = 0;
marker.color.a = 1;
} else {
ROS_INFO("false");
marker.color.r = 1;
marker.color.g = 0;
marker.color.b = 0;
marker.color.a = 1.0;
}
rviz_markers_->markers.push_back(marker);
}
//}
ROS_INFO("alle punkte durch");
}
void mediate() override {
ros::Rate loop_rate(1);
for (Abstract_robot* robot : robots_){
Robot* ceti = dynamic_cast<Robot*>(robot);
while (ros::ok()){
for (visualization_msgs::MarkerArray* markers : ceti->rviz_markers()) markers->markers.clear();
rviz_markers_->markers.clear();
ceti->rotate(-M_PI/4);
ceti->notify();
check_collision();
for (visualization_msgs::MarkerArray* markers : ceti->rviz_markers())pub_->publish(*markers);
pub_->publish(*rviz_markers_);
loop_rate.sleep();
}
}
}
};
#endif