Skip to content
Snippets Groups Projects
Select Git revision
  • 6cac5bb7170491f48e18458db2b5514243f7dd23
  • main default protected
2 results

mediator.h

Blame
  • user avatar
    KingMaZito authored
    6cac5bb7
    History
    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