diff --git a/.catkin_tools/profiles/default/devel_collisions.txt b/.catkin_tools/profiles/default/devel_collisions.txt index 2c19e6d6e7fcbe551cdf453c64fc5cb6c0b53375..35d97a11fafa59e6bc88b583aefdff3f1c5e2f54 100644 --- a/.catkin_tools/profiles/default/devel_collisions.txt +++ b/.catkin_tools/profiles/default/devel_collisions.txt @@ -1,4 +1,4 @@ /home/matteo/ws_panda/devel/./cmake.lock 42 -/home/matteo/reachability/devel/./cmake.lock 26636 +/home/matteo/reachability/devel/./cmake.lock 26851 /home/matteo/reachability/devel/lib/libmoveit_grasps.so 79 /home/matteo/reachability/devel/lib/libmoveit_grasps_filter.so 79 diff --git a/src/.vscode/c_cpp_properties.json b/src/.vscode/c_cpp_properties.json index 73da41b81424f1f5c153e7a6e175259059509353..5b82495cc6e55e63e3bcfa1e71c2c6169ad76d8f 100644 --- a/src/.vscode/c_cpp_properties.json +++ b/src/.vscode/c_cpp_properties.json @@ -1,26 +1,26 @@ { - "configurations": [ - { - "browse": { - "databaseFilename": "${default}", - "limitSymbolsToIncludedHeaders": false - }, - "includePath": [ - "/home/matteo/reachability/devel/include/**", - "/opt/ros/noetic/include/**", - "/home/matteo/reachability/src/moveit_task_constructor/core/include/**", - "/home/matteo/reachability/src/moveit_task_constructor/demo/include/**", - "/home/matteo/reachability/src/mtc/include/**", - "/home/matteo/reachability/src/reachability/include/**", - "/home/matteo/reachability/src/moveit_task_constructor/rviz_marker_tools/include/**", - "/usr/include/**" - ], - "name": "ROS", - "intelliSenseMode": "gcc-x64", - "compilerPath": "/usr/bin/gcc", - "cStandard": "gnu11", - "cppStandard": "c++14" - } - ], - "version": 4 + "configurations": [ + { + "browse": { + "databaseFilename": "${default}", + "limitSymbolsToIncludedHeaders": false + }, + "includePath": [ + "/opt/ros/noetic/include/**", + "/home/matteo/reachability/devel/include/**", + "/home/matteo/reachability/src/moveit_task_constructor/core/include/**", + "/home/matteo/reachability/src/moveit_task_constructor/demo/include/**", + "/home/matteo/reachability/src/mtc/include/**", + "/home/matteo/reachability/src/reachability/include/**", + "/home/matteo/reachability/src/moveit_task_constructor/rviz_marker_tools/include/**", + "/usr/include/**" + ], + "name": "ROS", + "intelliSenseMode": "gcc-x64", + "compilerPath": "/usr/bin/gcc", + "cStandard": "gnu11", + "cppStandard": "c++14" + } + ], + "version": 4 } \ No newline at end of file diff --git a/src/mtc/CMakeLists.txt b/src/mtc/CMakeLists.txt index 5175af5543b34a2048896c671f6c0b4830437eec..9dd7d2e01bb38e82e25e13560819b53b50e5f576 100644 --- a/src/mtc/CMakeLists.txt +++ b/src/mtc/CMakeLists.txt @@ -81,6 +81,12 @@ src/impl/wing_moveit_decorator.cpp src/impl/wing_rviz_decorator.cpp src/impl/collision_helper.cpp +src/reader/abstract_param_reader.cpp +src/reader/robot_reader.cpp +src/reader/wing_reader.cpp + + + ) add_executable(cell_routine src/cell_routine.cpp @@ -94,6 +100,10 @@ src/impl/mediator.cpp src/impl/wing_moveit_decorator.cpp src/impl/wing_rviz_decorator.cpp src/impl/collision_helper.cpp + +src/reader/abstract_param_reader.cpp +src/reader/robot_reader.cpp +src/reader/wing_reader.cpp ) @@ -101,6 +111,7 @@ src/impl/collision_helper.cpp add_executable(mtc2taskspace src/mtc2taskspace.cpp src/reader/abstract_param_reader.cpp src/reader/task_space_reader.cpp +src/reader/robot_reader.cpp ) diff --git a/src/mtc/include/impl/abstract_mediator.h b/src/mtc/include/impl/abstract_mediator.h index 091b26360a96a3a22ed5bb8b701ae97591ce12ea..c143c0aaa656726f7670be343a4638dc441696be 100644 --- a/src/mtc/include/impl/abstract_mediator.h +++ b/src/mtc/include/impl/abstract_mediator.h @@ -5,6 +5,8 @@ #include "impl/abstract_robot.h" #include "impl/abstract_robot_element.h" #include "impl/robot.h" +#include "reader/wing_reader.h" + #include <ros/package.h> #include <yaml-cpp/yaml.h> @@ -14,6 +16,8 @@ #include <pcl/point_cloud.h> #include <pcl/octree/octree.h> + + #define box_size tf2::Vector3(0.0318f, 0.0636f, 0.091f) #define R_POS tf2::Vector3(0,0.6525f,0.4425f -0.005f) #define L_POS tf2::Vector3(0,-0.6525f,0.4425f -0.005f) @@ -59,7 +63,7 @@ class Abstract_mediator { pcl::PointCloud< pcl::PointXYZ >::Ptr vector_to_cloud(std::vector<pcl::PointXYZ>& vector); std::vector<pcl::PointXYZ> generate_Ground(const tf2::Vector3 origin, const float diameter, float resolution); - virtual void set_wings(std::vector<std::vector<wing_BP>>& wbp)=0; + virtual void set_wings(std::vector<std::pair<std::vector<object_data>, int>>& wbp)=0; virtual bool check_collision( const int& robot)=0; virtual void mediate()=0; virtual void build_wings(std::bitset<3>& wing, int& robot)=0; diff --git a/src/mtc/include/impl/mediator.h b/src/mtc/include/impl/mediator.h index 28f9003152f7c25bbdc867d155df2e787decc4f0..1716c7ea81b3459eb37d85b5653b324a097c14b6 100644 --- a/src/mtc/include/impl/mediator.h +++ b/src/mtc/include/impl/mediator.h @@ -22,7 +22,7 @@ class Mediator : public Abstract_mediator{ void setup_rviz(); void calculate(std::vector<tf2::Transform>& ground_per_robot); - void set_wings(std::vector<std::vector<wing_BP>>& wbp) override; + void set_wings(std::vector<std::pair<std::vector<object_data>, int>>& wbp) override; bool check_collision(const int& robot) override; void mediate() override; void build_wings(std::bitset<3>& wings, int& robot) override; diff --git a/src/mtc/include/impl/moveit_mediator.h b/src/mtc/include/impl/moveit_mediator.h index 98eb16068243ed90721cb9c21b92b5645ef4a0d5..1d0949e01296a864b17cb14329fa03521c18fc10 100644 --- a/src/mtc/include/impl/moveit_mediator.h +++ b/src/mtc/include/impl/moveit_mediator.h @@ -93,7 +93,7 @@ class Moveit_mediator : public Abstract_mediator{ bool check_collision(const int& robot) override; void mediate() override; void build_wings(std::bitset<3>& wing,int& robot) override; - void set_wings(std::vector<std::vector<wing_BP>>& wbp) override; + void set_wings(std::vector<std::pair<std::vector<object_data>, int>>& wbp) override; void merge_ps(moveit_msgs::PlanningScene& out, moveit_msgs::PlanningScene* in, Moveit_robot* mr); void publish_tables(); diff --git a/src/mtc/include/reader/abstract_param_reader.h b/src/mtc/include/reader/abstract_param_reader.h index fb85893833d5bafde1992a9b33e446c976d40e50..9524d639944c3050243d61b43e36f82f6444d523 100644 --- a/src/mtc/include/reader/abstract_param_reader.h +++ b/src/mtc/include/reader/abstract_param_reader.h @@ -4,12 +4,17 @@ #include "ros/ros.h" #include <ros/package.h> #include <xmlrpcpp/XmlRpc.h> -#include <tf/transform_broadcaster.h> +#include <tf2/LinearMath/Transform.h> #include <yaml-cpp/yaml.h> #include <fstream> #include <regex> +struct object_data { + std::string name_; + tf2::Transform pose_; + tf2::Vector3 size_; +}; class Abstract_param_reader{ protected: diff --git a/src/mtc/include/reader/robot_reader.h b/src/mtc/include/reader/robot_reader.h new file mode 100644 index 0000000000000000000000000000000000000000..29ad3ea815bbeeb718d544f36426fa3046c76800 --- /dev/null +++ b/src/mtc/include/reader/robot_reader.h @@ -0,0 +1,23 @@ +#ifndef ROBOT_READER_ +#define ROBOT_READER_ + +#include "ros/ros.h" +#include <ros/package.h> +#include <xmlrpcpp/XmlRpc.h> + +#include "reader/abstract_param_reader.h" + + +class Robot_reader : public Abstract_param_reader{ + protected: + std::vector<object_data> robot_data_; + + public: + Robot_reader(std::shared_ptr<ros::NodeHandle> const& d) : Abstract_param_reader(d){}; + + inline void set_robot_data(std::vector<object_data>& robot_data) {robot_data_ = robot_data;} + inline std::vector<object_data> robot_data() {return robot_data_;} + + void read() override; +}; +#endif diff --git a/src/mtc/include/reader/wing_reader.h b/src/mtc/include/reader/wing_reader.h new file mode 100644 index 0000000000000000000000000000000000000000..ec5956e45ee239af3ce7c5d3d281e1eaddd2f3f7 --- /dev/null +++ b/src/mtc/include/reader/wing_reader.h @@ -0,0 +1,23 @@ +#ifndef WING_READER_ +#define WING_READER_ + +#include "ros/ros.h" +#include <ros/package.h> +#include <xmlrpcpp/XmlRpc.h> + +#include "reader/abstract_param_reader.h" + + +class Wing_reader : public Abstract_param_reader{ + protected: + std::vector<std::pair<std::vector<object_data>, int>> wing_data_; + + public: + Wing_reader(std::shared_ptr<ros::NodeHandle> const& d) : Abstract_param_reader(d){}; + + inline void set_wing_data(std::vector<std::pair<std::vector<object_data>, int>>& wing_data) {wing_data_ = wing_data;} + inline std::vector<std::pair<std::vector<object_data>, int>> wing_data() {return wing_data_;} + + void read() override; +}; +#endif diff --git a/src/mtc/launch/cell_routine.launch b/src/mtc/launch/cell_routine.launch index aac714e9c77f1484ba995cf16cdf1add28b0f065..91bcb4c106ce1feedc08ce9d7f515534f61cc030 100644 --- a/src/mtc/launch/cell_routine.launch +++ b/src/mtc/launch/cell_routine.launch @@ -1,5 +1,5 @@ <launch> - <arg name="result" default="dummy/-474510554.yaml" /> + <arg name="result" default="dummy/-211114391.yaml" /> <!--<include file="$(find panda_moveit_config)/launch/demo.launch"></include> --> <!-- this is to change--> diff --git a/src/mtc/results/dummy/1543924248.yaml b/src/mtc/results/dummy/-1003092792.yaml similarity index 100% rename from src/mtc/results/dummy/1543924248.yaml rename to src/mtc/results/dummy/-1003092792.yaml diff --git a/src/mtc/results/dummy/1601455593.yaml b/src/mtc/results/dummy/-1010460506.yaml similarity index 100% rename from src/mtc/results/dummy/1601455593.yaml rename to src/mtc/results/dummy/-1010460506.yaml diff --git a/src/mtc/results/dummy/1587832961.yaml b/src/mtc/results/dummy/-1024001513.yaml similarity index 100% rename from src/mtc/results/dummy/1587832961.yaml rename to src/mtc/results/dummy/-1024001513.yaml diff --git a/src/mtc/results/dummy/1575731070.yaml b/src/mtc/results/dummy/-1036064907.yaml similarity index 100% rename from src/mtc/results/dummy/1575731070.yaml rename to src/mtc/results/dummy/-1036064907.yaml diff --git a/src/mtc/results/dummy/-1890202883.yaml b/src/mtc/results/dummy/-211114391.yaml similarity index 100% rename from src/mtc/results/dummy/-1890202883.yaml rename to src/mtc/results/dummy/-211114391.yaml diff --git a/src/mtc/results/dummy/-1901373430.yaml b/src/mtc/results/dummy/-222544024.yaml similarity index 100% rename from src/mtc/results/dummy/-1901373430.yaml rename to src/mtc/results/dummy/-222544024.yaml diff --git a/src/mtc/results/dummy/-1951250192.yaml b/src/mtc/results/dummy/-258879761.yaml similarity index 100% rename from src/mtc/results/dummy/-1951250192.yaml rename to src/mtc/results/dummy/-258879761.yaml diff --git a/src/mtc/results/dummy/-1962818280.yaml b/src/mtc/results/dummy/-270419468.yaml similarity index 100% rename from src/mtc/results/dummy/-1962818280.yaml rename to src/mtc/results/dummy/-270419468.yaml diff --git a/src/mtc/results/dummy/1850935177.yaml b/src/mtc/results/dummy/-652201118.yaml similarity index 100% rename from src/mtc/results/dummy/1850935177.yaml rename to src/mtc/results/dummy/-652201118.yaml diff --git a/src/mtc/results/dummy/1895656920.yaml b/src/mtc/results/dummy/-696648853.yaml similarity index 100% rename from src/mtc/results/dummy/1895656920.yaml rename to src/mtc/results/dummy/-696648853.yaml diff --git a/src/mtc/results/dummy/1821310512.yaml b/src/mtc/results/dummy/-742232139.yaml similarity index 100% rename from src/mtc/results/dummy/1821310512.yaml rename to src/mtc/results/dummy/-742232139.yaml diff --git a/src/mtc/results/dummy/1807829100.yaml b/src/mtc/results/dummy/-755774193.yaml similarity index 100% rename from src/mtc/results/dummy/1807829100.yaml rename to src/mtc/results/dummy/-755774193.yaml diff --git a/src/mtc/results/dummy/1795913128.yaml b/src/mtc/results/dummy/-767674851.yaml similarity index 100% rename from src/mtc/results/dummy/1795913128.yaml rename to src/mtc/results/dummy/-767674851.yaml diff --git a/src/mtc/results/dummy/1868843792.yaml b/src/mtc/results/dummy/-789859288.yaml similarity index 100% rename from src/mtc/results/dummy/1868843792.yaml rename to src/mtc/results/dummy/-789859288.yaml diff --git a/src/mtc/results/dummy/1855511004.yaml b/src/mtc/results/dummy/-803422225.yaml similarity index 100% rename from src/mtc/results/dummy/1855511004.yaml rename to src/mtc/results/dummy/-803422225.yaml diff --git a/src/mtc/results/dummy/1843511501.yaml b/src/mtc/results/dummy/-815321487.yaml similarity index 100% rename from src/mtc/results/dummy/1843511501.yaml rename to src/mtc/results/dummy/-815321487.yaml diff --git a/src/mtc/results/dummy/1656942183.yaml b/src/mtc/results/dummy/-846087811.yaml similarity index 100% rename from src/mtc/results/dummy/1656942183.yaml rename to src/mtc/results/dummy/-846087811.yaml diff --git a/src/mtc/results/dummy/1711393564.yaml b/src/mtc/results/dummy/-852264234.yaml similarity index 100% rename from src/mtc/results/dummy/1711393564.yaml rename to src/mtc/results/dummy/-852264234.yaml diff --git a/src/mtc/results/dummy/1697794188.yaml b/src/mtc/results/dummy/-865767525.yaml similarity index 100% rename from src/mtc/results/dummy/1697794188.yaml rename to src/mtc/results/dummy/-865767525.yaml diff --git a/src/mtc/results/dummy/1685895957.yaml b/src/mtc/results/dummy/-877673981.yaml similarity index 100% rename from src/mtc/results/dummy/1685895957.yaml rename to src/mtc/results/dummy/-877673981.yaml diff --git a/src/mtc/results/dummy/1701273998.yaml b/src/mtc/results/dummy/-890048247.yaml similarity index 100% rename from src/mtc/results/dummy/1701273998.yaml rename to src/mtc/results/dummy/-890048247.yaml diff --git a/src/mtc/results/dummy/1759072325.yaml b/src/mtc/results/dummy/-899976593.yaml similarity index 100% rename from src/mtc/results/dummy/1759072325.yaml rename to src/mtc/results/dummy/-899976593.yaml diff --git a/src/mtc/results/dummy/1745566468.yaml b/src/mtc/results/dummy/-914020264.yaml similarity index 100% rename from src/mtc/results/dummy/1745566468.yaml rename to src/mtc/results/dummy/-914020264.yaml diff --git a/src/mtc/results/dummy/1733626611.yaml b/src/mtc/results/dummy/-925946624.yaml similarity index 100% rename from src/mtc/results/dummy/1733626611.yaml rename to src/mtc/results/dummy/-925946624.yaml diff --git a/src/mtc/results/dummy/1567654444.yaml b/src/mtc/results/dummy/-934521686.yaml similarity index 100% rename from src/mtc/results/dummy/1567654444.yaml rename to src/mtc/results/dummy/-934521686.yaml diff --git a/src/mtc/results/dummy/1555239444.yaml b/src/mtc/results/dummy/-947074197.yaml similarity index 100% rename from src/mtc/results/dummy/1555239444.yaml rename to src/mtc/results/dummy/-947074197.yaml diff --git a/src/mtc/results/dummy/1588704657.yaml b/src/mtc/results/dummy/-958226134.yaml similarity index 100% rename from src/mtc/results/dummy/1588704657.yaml rename to src/mtc/results/dummy/-958226134.yaml diff --git a/src/mtc/results/dummy/1648958842.yaml b/src/mtc/results/dummy/-962936586.yaml similarity index 100% rename from src/mtc/results/dummy/1648958842.yaml rename to src/mtc/results/dummy/-962936586.yaml diff --git a/src/mtc/results/dummy/1635476033.yaml b/src/mtc/results/dummy/-976487161.yaml similarity index 100% rename from src/mtc/results/dummy/1635476033.yaml rename to src/mtc/results/dummy/-976487161.yaml diff --git a/src/mtc/results/dummy/1612469426.yaml b/src/mtc/results/dummy/-979308652.yaml similarity index 100% rename from src/mtc/results/dummy/1612469426.yaml rename to src/mtc/results/dummy/-979308652.yaml diff --git a/src/mtc/results/dummy/1623703517.yaml b/src/mtc/results/dummy/-988375807.yaml similarity index 100% rename from src/mtc/results/dummy/1623703517.yaml rename to src/mtc/results/dummy/-988375807.yaml diff --git a/src/mtc/results/dummy/1599871509.yaml b/src/mtc/results/dummy/-991922905.yaml similarity index 100% rename from src/mtc/results/dummy/1599871509.yaml rename to src/mtc/results/dummy/-991922905.yaml diff --git a/src/mtc/results/dummy/-542667557.yaml b/src/mtc/results/dummy/1183415122.yaml similarity index 100% rename from src/mtc/results/dummy/-542667557.yaml rename to src/mtc/results/dummy/1183415122.yaml diff --git a/src/mtc/results/dummy/-587344676.yaml b/src/mtc/results/dummy/1227695304.yaml similarity index 100% rename from src/mtc/results/dummy/-587344676.yaml rename to src/mtc/results/dummy/1227695304.yaml diff --git a/src/mtc/results/dummy/-453685788.yaml b/src/mtc/results/dummy/1272105605.yaml similarity index 100% rename from src/mtc/results/dummy/-453685788.yaml rename to src/mtc/results/dummy/1272105605.yaml diff --git a/src/mtc/results/dummy/-442405442.yaml b/src/mtc/results/dummy/1283302731.yaml similarity index 100% rename from src/mtc/results/dummy/-442405442.yaml rename to src/mtc/results/dummy/1283302731.yaml diff --git a/src/mtc/results/dummy/-429778748.yaml b/src/mtc/results/dummy/1295853078.yaml similarity index 100% rename from src/mtc/results/dummy/-429778748.yaml rename to src/mtc/results/dummy/1295853078.yaml diff --git a/src/mtc/results/dummy/-498149190.yaml b/src/mtc/results/dummy/1316801078.yaml similarity index 100% rename from src/mtc/results/dummy/-498149190.yaml rename to src/mtc/results/dummy/1316801078.yaml diff --git a/src/mtc/results/dummy/-487005315.yaml b/src/mtc/results/dummy/1328208922.yaml similarity index 100% rename from src/mtc/results/dummy/-487005315.yaml rename to src/mtc/results/dummy/1328208922.yaml diff --git a/src/mtc/results/dummy/-474510554.yaml b/src/mtc/results/dummy/1340801804.yaml similarity index 100% rename from src/mtc/results/dummy/-474510554.yaml rename to src/mtc/results/dummy/1340801804.yaml diff --git a/src/mtc/results/dummy/-1564063432.yaml b/src/mtc/results/dummy/144778443.yaml similarity index 100% rename from src/mtc/results/dummy/-1564063432.yaml rename to src/mtc/results/dummy/144778443.yaml diff --git a/src/mtc/results/dummy/-1553074118.yaml b/src/mtc/results/dummy/155931149.yaml similarity index 100% rename from src/mtc/results/dummy/-1553074118.yaml rename to src/mtc/results/dummy/155931149.yaml diff --git a/src/mtc/results/dummy/-1540350554.yaml b/src/mtc/results/dummy/168492950.yaml similarity index 100% rename from src/mtc/results/dummy/-1540350554.yaml rename to src/mtc/results/dummy/168492950.yaml diff --git a/src/mtc/results/dummy/-1608866404.yaml b/src/mtc/results/dummy/189371734.yaml similarity index 100% rename from src/mtc/results/dummy/-1608866404.yaml rename to src/mtc/results/dummy/189371734.yaml diff --git a/src/mtc/results/dummy/-1597568458.yaml b/src/mtc/results/dummy/203146650.yaml similarity index 100% rename from src/mtc/results/dummy/-1597568458.yaml rename to src/mtc/results/dummy/203146650.yaml diff --git a/src/mtc/results/dummy/-1585194105.yaml b/src/mtc/results/dummy/215783882.yaml similarity index 100% rename from src/mtc/results/dummy/-1585194105.yaml rename to src/mtc/results/dummy/215783882.yaml diff --git a/src/mtc/results/dummy/-1358218541.yaml b/src/mtc/results/dummy/254319817.yaml similarity index 100% rename from src/mtc/results/dummy/-1358218541.yaml rename to src/mtc/results/dummy/254319817.yaml diff --git a/src/mtc/results/dummy/-1405464563.yaml b/src/mtc/results/dummy/301530140.yaml similarity index 100% rename from src/mtc/results/dummy/-1405464563.yaml rename to src/mtc/results/dummy/301530140.yaml diff --git a/src/mtc/results/dummy/-1572377916.yaml b/src/mtc/results/dummy/40651904.yaml similarity index 100% rename from src/mtc/results/dummy/-1572377916.yaml rename to src/mtc/results/dummy/40651904.yaml diff --git a/src/mtc/results/dummy/-1180235424.yaml b/src/mtc/results/dummy/434875766.yaml similarity index 100% rename from src/mtc/results/dummy/-1180235424.yaml rename to src/mtc/results/dummy/434875766.yaml diff --git a/src/mtc/results/dummy/-1227713112.yaml b/src/mtc/results/dummy/482378175.yaml similarity index 100% rename from src/mtc/results/dummy/-1227713112.yaml rename to src/mtc/results/dummy/482378175.yaml diff --git a/src/mtc/results/dummy/-1060422961.yaml b/src/mtc/results/dummy/560822576.yaml similarity index 100% rename from src/mtc/results/dummy/-1060422961.yaml rename to src/mtc/results/dummy/560822576.yaml diff --git a/src/mtc/results/dummy/-1107549484.yaml b/src/mtc/results/dummy/608106095.yaml similarity index 100% rename from src/mtc/results/dummy/-1107549484.yaml rename to src/mtc/results/dummy/608106095.yaml diff --git a/src/mtc/results/dummy/-1006227179.yaml b/src/mtc/results/dummy/702701396.yaml similarity index 100% rename from src/mtc/results/dummy/-1006227179.yaml rename to src/mtc/results/dummy/702701396.yaml diff --git a/src/mtc/results/dummy/-1039705736.yaml b/src/mtc/results/dummy/714102535.yaml similarity index 100% rename from src/mtc/results/dummy/-1039705736.yaml rename to src/mtc/results/dummy/714102535.yaml diff --git a/src/mtc/results/dummy/-1027180942.yaml b/src/mtc/results/dummy/726842647.yaml similarity index 100% rename from src/mtc/results/dummy/-1027180942.yaml rename to src/mtc/results/dummy/726842647.yaml diff --git a/src/mtc/results/dummy/-1051277393.yaml b/src/mtc/results/dummy/748047042.yaml similarity index 100% rename from src/mtc/results/dummy/-1051277393.yaml rename to src/mtc/results/dummy/748047042.yaml diff --git a/src/mtc/results/dummy/-995076880.yaml b/src/mtc/results/dummy/759537023.yaml similarity index 100% rename from src/mtc/results/dummy/-995076880.yaml rename to src/mtc/results/dummy/759537023.yaml diff --git a/src/mtc/results/dummy/-982538817.yaml b/src/mtc/results/dummy/772496165.yaml similarity index 100% rename from src/mtc/results/dummy/-982538817.yaml rename to src/mtc/results/dummy/772496165.yaml diff --git a/src/mtc/results/dummy/-772783050.yaml b/src/mtc/results/dummy/832741068.yaml similarity index 100% rename from src/mtc/results/dummy/-772783050.yaml rename to src/mtc/results/dummy/832741068.yaml diff --git a/src/mtc/results/dummy/-1619843661.yaml b/src/mtc/results/dummy/88011482.yaml similarity index 100% rename from src/mtc/results/dummy/-1619843661.yaml rename to src/mtc/results/dummy/88011482.yaml diff --git a/src/mtc/results/dummy/-827862775.yaml b/src/mtc/results/dummy/880346008.yaml similarity index 100% rename from src/mtc/results/dummy/-827862775.yaml rename to src/mtc/results/dummy/880346008.yaml diff --git a/src/mtc/src/base_routine.cpp b/src/mtc/src/base_routine.cpp index e462fcf3abc9daa562bf3fe1d6f408c50c2b9940..f63e1d405fcc5ccb8c40a5526d6852c7de134669 100644 --- a/src/mtc/src/base_routine.cpp +++ b/src/mtc/src/base_routine.cpp @@ -14,28 +14,12 @@ #include "impl/base_by_rotation.h" #include <xmlrpcpp/XmlRpc.h> #include <filesystem> +#include "reader/abstract_param_reader.h" +#include "reader/robot_reader.h" +#include "reader/wing_reader.h" + + -float value_caster(XmlRpc::XmlRpcValue& val){ - float t = 0; - try{ - switch (val.getType()){ - case XmlRpc::XmlRpcValue::TypeInt: - t = static_cast<int>(val); - break; - case XmlRpc::XmlRpcValue::TypeDouble: - t = static_cast<double>(val); - break; - case XmlRpc::XmlRpcValue::TypeString: - t = std::stof(val); - break; - default: - ROS_INFO("value type is some unknown type"); - } - } catch (XmlRpc::XmlRpcException){ - ROS_INFO("Something went wrong, returning 0"); - } - return t; -} int main(int argc, char **argv){ @@ -64,316 +48,24 @@ int main(int argc, char **argv){ mediator->set_result_vector(results); mediator->set_dirname(filename); - float a = 0; float b = 0; - std::vector<std::vector<wing_BP>> blueprints_per_robot(2); - std::vector<wing_BP> blueprints(3); - - blueprints[0] = {std::string(""), tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}; - blueprints[1] = {std::string(""), tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}; - blueprints[2] = {std::string(""), tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}; - blueprints_per_robot[0] = blueprints; - blueprints_per_robot[1] = blueprints; - for (int i = 0; i < resources.size(); i++){ - if(resources[i]["id"] == "table1_table_top"){ - ROS_INFO("=> Robot: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; + std::unique_ptr<Abstract_param_reader> robot_reader(new Robot_reader(n)); + robot_reader->read(); + std::vector<object_data> rd = static_cast<Robot_reader*>(robot_reader.get())->robot_data(); + for (int i = 0; i < rd.size() ;i++) mediator->connect_robots(new Robot(rd[i].name_, rd[i].pose_, rd[i].size_)); - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); + std::unique_ptr<Abstract_param_reader> wing_reader(new Wing_reader(n)); + wing_reader->read(); + auto wd = static_cast<Wing_reader*>(wing_reader.get())->wing_data(); - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ((value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) /2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> Robot: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> Robot: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> Robot: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - std::string name("panda_arm1"); - mediator->connect_robots(new Robot(name, tf2::Transform(rot, pos), size)); - ROS_INFO("=> Robot:loading SUCCESS"); - } - - if(resources[i]["id"] == "table2_table_top"){ - ROS_INFO("=> Robot: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ((value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) /2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> Robot: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> Robot: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> Robot: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - std::string name("panda_arm2"); - mediator->connect_robots(new Robot(name, tf2::Transform(rot, pos), size)); - ROS_INFO("=> Robot:loading SUCCESS"); + for (int i = 0; i < mediator->robots().size(); i++){ + for(object_data& w : wd[i].first){ + w.pose_ = mediator->robots()[i]->tf().inverse() * w.pose_; } + mediator->robots()[i]->set_observer_mask(static_cast<wing_config>(wd[i].second)); } - - for (int i = 0; i < resources.size(); i++){ - if(resources[i]["id"] == "table1_right_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - /* - Wing* w = dynamic_cast<Wing*>(blueprints_per_robot[0][0]); - w->set_name("table1_right_panel"); - w->set_relative_tf(mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos)); - w->set_set(size); - - blueprints_per_robot[0][0] = new Wing_rviz_decorator(w); - */ - - blueprints_per_robot[0][0].name_ = "table1_right_panel"; - blueprints_per_robot[0][0].pos_ = mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[0][0].size_ = size; - - - a += std::pow(2, 0); - ROS_INFO("=> WING:loading SUCCESS"); - } - - if(resources[i]["id"] == "table1_front_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - /* - Abstract_robot_element* are = new Wing(std::string(""), tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)); - Wing* w = dynamic_cast<Wing*>(are); - w->set_name("table1_front_panel"); - w->set_relative_tf(mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos)); - w->set_set(size); - - Abstract_robot_element* wrd = new Wing_rviz_decorator(w); - blueprints_per_robot[0][1] = wrd; - - */ - a += std::pow(2, 1); - - blueprints_per_robot[0][1].name_ = std::string("table1_front_panel"); - ROS_INFO("uzguzg"); - blueprints_per_robot[0][1].pos_ = mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[0][1].size_ = size; - ROS_INFO("=> WING:loading SUCCESS"); - } - - if(resources[i]["id"] == "table1_left_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - /* - Abstract_robot_element* are = new Wing(std::string(""), tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)); - Wing* w = dynamic_cast<Wing*>(are); - w->set_name("table1_left_panel"); - w->set_relative_tf(mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos)); - w->set_set(size); - - Abstract_robot_element* wrd = new Wing_rviz_decorator(are); - blueprints_per_robot[0][2] = wrd; - */ - blueprints_per_robot[0][2].name_ = "table1_left_panel"; - blueprints_per_robot[0][2].pos_ = mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[0][2].size_ = size; - a += std::pow(2, 2); - ROS_INFO("=> WING:loading SUCCESS"); - - } - - if(resources[i]["id"] == "table2_right_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - /* - Abstract_robot_element* are = new Wing(std::string(""), tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)); - Wing* w = dynamic_cast<Wing*>(are); - w->set_name("table2_right_panel"); - w->set_relative_tf(mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos)); - w->set_set(size); - - blueprints_per_robot[1][0] = new Wing_rviz_decorator(w); - */ - blueprints_per_robot[1][0].name_ = "table2_right_panel"; - blueprints_per_robot[1][0].pos_ = mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[1][0].size_ = size; - b += std::pow(2, 0); - ROS_INFO("=> WING:loading SUCCESS"); - } - - if(resources[i]["id"] == "table2_front_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - /* - Wing* w = dynamic_cast<Wing*>(blueprints_per_robot[1][1]); - w->set_name("table2_front_panel"); - w->set_relative_tf(mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos)); - w->set_set(size); - blueprints_per_robot[1][1] = new Wing_rviz_decorator(w); - */ - blueprints_per_robot[1][1].name_ = "table2_front_panel"; - blueprints_per_robot[1][1].pos_ = mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[1][1].size_ = size; - ROS_INFO("=> WING:loading SUCCESS"); - b += std::pow(2, 1); - - } - - if(resources[i]["id"] == "table2_left_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - /* - Wing* w = dynamic_cast<Wing*>(blueprints_per_robot[1][2]); - w->set_name("table2_left_panel"); - w->set_relative_tf(mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos)); - w->set_set(size); - blueprints_per_robot[1][2] = new Wing_rviz_decorator(w); - */ - - blueprints_per_robot[1][2].name_ = "table2_left_panel"; - blueprints_per_robot[1][2].pos_ = mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[1][2].size_ = size; - ROS_INFO("=> WING:loading SUCCESS"); - b += std::pow(2, 2); - } - } - mediator->robots()[0]->set_observer_mask(static_cast<wing_config>(a)); - mediator->robots()[1]->set_observer_mask(static_cast<wing_config>(b)); - - - ROS_INFO("ist durch"); - mediator->set_wings(blueprints_per_robot); + mediator->set_wings(wd); mediator->mediate(); diff --git a/src/mtc/src/cell_routine.cpp b/src/mtc/src/cell_routine.cpp index b9a4c3387b9ac9857ee84112dc98d60a0b68ab5d..e56dc02f4144c36b12638e2f8635f5e685e09749 100644 --- a/src/mtc/src/cell_routine.cpp +++ b/src/mtc/src/cell_routine.cpp @@ -10,28 +10,10 @@ #include "impl/moveit_robot.h" #include "impl/collision_helper.h" #include <xmlrpcpp/XmlRpc.h> +#include "reader/abstract_param_reader.h" +#include "reader/robot_reader.h" +#include "reader/wing_reader.h" -float value_caster(XmlRpc::XmlRpcValue& val){ - float t = 0; - try{ - switch (val.getType()){ - case XmlRpc::XmlRpcValue::TypeInt: - t = static_cast<int>(val); - break; - case XmlRpc::XmlRpcValue::TypeDouble: - t = static_cast<double>(val); - break; - case XmlRpc::XmlRpcValue::TypeString: - t = std::stof(val); - break; - default: - ROS_INFO("value type is some unknown type"); - } - } catch (XmlRpc::XmlRpcException){ - ROS_INFO("Something went wrong, returning 0"); - } - return t; -} int main(int argc, char **argv){ ros::init(argc, argv, "cell_routine"); @@ -57,280 +39,34 @@ int main(int argc, char **argv){ moveit_mediator->load_robot_description(); - std::vector<std::vector<wing_BP>> blueprints_per_robot(2); - std::vector<wing_BP> blueprints(3); - blueprints[0] = {"", tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}; - blueprints[1] = {"", tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}; - blueprints[2] = {"", tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}; - blueprints_per_robot[0] = blueprints; - blueprints_per_robot[1] = blueprints; - int a = 0; int b = 0; - -for (int i = 0; i < resources.size(); i++){ - if(resources[i]["id"] == "table1_table_top"){ - ROS_INFO("=> Robot: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ((value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) /2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - ROS_INFO("=> Robot: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> Robot: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> Robot: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - std::string name("panda_arm1"); - moveit_mediator->task_map().insert({name, std::vector<moveit::task_constructor::Task>()}); - Abstract_robot* robot1 = new Moveit_robot(name, tf2::Transform(rot, pos), size); - Moveit_robot* ceti1 = dynamic_cast<Moveit_robot*>(robot1); - ceti1->set_observer_mask(wing_config::RML); - mediator->connect_robots(robot1); - ROS_INFO("=> Robot:loading SUCCESS"); - } - - if(resources[i]["id"] == "table2_table_top"){ - ROS_INFO("=> Robot: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ((value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) /2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> Robot: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> Robot: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> Robot: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); + std::unique_ptr<Abstract_param_reader> robot_reader(new Robot_reader(nnh)); + robot_reader->read(); + std::vector<object_data> rd = static_cast<Robot_reader*>(robot_reader.get())->robot_data(); + for (int i = 0; i < rd.size() ;i++) mediator->connect_robots(new Moveit_robot(rd[i].name_, rd[i].pose_, rd[i].size_)); - std::string name("panda_arm2"); - moveit_mediator->task_map().insert({name, std::vector<moveit::task_constructor::Task>()}); - Abstract_robot* robot2 = new Moveit_robot(name, tf2::Transform(rot, pos), size); - Moveit_robot* ceti2 = dynamic_cast<Moveit_robot*>(robot2); - ceti2->set_observer_mask(wing_config::RML); - mediator->connect_robots(robot2); + std::unique_ptr<Abstract_param_reader> wing_reader(new Wing_reader(nnh)); + wing_reader->read(); + auto wd = static_cast<Wing_reader*>(wing_reader.get())->wing_data(); - ROS_INFO("=> Robot:loading SUCCESS"); + for (int i = 0; i < mediator->robots().size(); i++){ + for(object_data& w : wd[i].first){ + w.pose_ = mediator->robots()[i]->tf().inverse() * w.pose_; } + mediator->robots()[i]->set_observer_mask(static_cast<wing_config>(wd[i].second)); } - - for (int i = 0; i < resources.size(); i++){ - if(resources[i]["id"] == "table1_right_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"])+ size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - blueprints_per_robot[0][0].name_ = "table1_right_panel"; - blueprints_per_robot[0][0].pos_ = mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[0][0].size_ = size; - - - a += std::pow(2, 0); - ROS_INFO("=> WING:loading SUCCESS"); - } - - if(resources[i]["id"] == "table1_front_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - a += std::pow(2, 1); - - blueprints_per_robot[0][1].name_ = std::string("table1_front_panel"); - blueprints_per_robot[0][1].pos_ = mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[0][1].size_ = size; - ROS_INFO("=> WING:loading SUCCESS"); - } - - if(resources[i]["id"] == "table1_left_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - blueprints_per_robot[0][2].name_ = "table1_left_panel"; - blueprints_per_robot[0][2].pos_ = mediator->robots()[0]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[0][2].size_ = size; - a += std::pow(2, 2); - ROS_INFO("=> WING:loading SUCCESS"); - - } - - if(resources[i]["id"] == "table2_right_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"])+ size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - blueprints_per_robot[1][0].name_ = "table2_right_panel"; - blueprints_per_robot[1][0].pos_ = mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[1][0].size_ = size; - b += std::pow(2, 0); - ROS_INFO("=> WING:loading SUCCESS"); - } - - if(resources[i]["id"] == "table2_front_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"])+ size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - blueprints_per_robot[1][1].name_ = "table2_front_panel"; - blueprints_per_robot[1][1].pos_ = mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[1][1].size_ = size; - ROS_INFO("=> WING:loading SUCCESS"); - b += std::pow(2, 1); - - } - - if(resources[i]["id"] == "table2_left_panel" ) { - ROS_INFO("=> WING: description found, loading..."); - tf2::Vector3 pos; - tf2::Vector3 size; - tf2::Quaternion rot; - - (resources[i]["size"].hasMember("length")) ? size.setX(value_caster(resources[i]["size"]["length"])) :size.setX(0); - (resources[i]["size"].hasMember("width")) ? size.setY(value_caster(resources[i]["size"]["width"])) :size.setY(0); - (resources[i]["size"].hasMember("height")) ? size.setZ(value_caster(resources[i]["size"]["height"])) :size.setZ(0); - - - (resources[i]["pos"].hasMember("x")) ? pos.setX(value_caster(resources[i]["pos"]["x"])) :pos.setX(0); - (resources[i]["pos"].hasMember("y")) ? pos.setY(value_caster(resources[i]["pos"]["y"])) :pos.setY(0); - (resources[i]["pos"].hasMember("z")) ? pos.setZ(value_caster(resources[i]["pos"]["z"])+ size.getZ()/2) :pos.setZ(0); - (resources[i]["orientation"].hasMember("x")) ? rot.setX(value_caster(resources[i]["orientation"]["x"])) :rot.setX(0); - (resources[i]["orientation"].hasMember("y")) ? rot.setY(value_caster(resources[i]["orientation"]["y"])) :rot.setY(0); - (resources[i]["orientation"].hasMember("z")) ? rot.setZ(value_caster(resources[i]["orientation"]["z"])) :rot.setZ(0); - (resources[i]["orientation"].hasMember("w")) ? rot.setW(value_caster(resources[i]["orientation"]["w"])) :rot.setW(0); - + moveit_mediator->set_wings(wd); + Moveit_robot* ceti1 = dynamic_cast<Moveit_robot*>(mediator->robots()[0]); + Moveit_robot* ceti2 = dynamic_cast<Moveit_robot*>(mediator->robots()[1]); + - ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); - ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); - ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); - - blueprints_per_robot[1][2].name_ = "table2_left_panel"; - blueprints_per_robot[1][2].pos_ = mediator->robots()[1]->tf().inverse() * tf2::Transform(rot.normalized(), pos); - blueprints_per_robot[1][2].size_ = size; - ROS_INFO("=> WING:loading SUCCESS"); - b += std::pow(2, 2); - } + for (int i = 0; i < mediator->robots().size(); i++){ + std::bitset<3> bs = wd[i].second; + moveit_mediator->build_wings(bs, i); } - - moveit_mediator->set_wings(blueprints_per_robot); - Moveit_robot* ceti1 = dynamic_cast<Moveit_robot*>(mediator->robots()[0]); - Moveit_robot* ceti2 = dynamic_cast<Moveit_robot*>(mediator->robots()[1]); - - std::bitset<3> ia = a; - std::bitset<3> ib = b; - int r1 = 0; int r2 = 1; - moveit_mediator->build_wings(ia, r1); - moveit_mediator->build_wings(ib, r2); //moveit::planning_interface::PlanningSceneInterface::applyCollisionObject() ceti1->notify(); ceti2->notify(); diff --git a/src/mtc/src/impl/mediator.cpp b/src/mtc/src/impl/mediator.cpp index a530e8ac37415b6b4b0e3a67e478b5bf686c4cfa..b3c1ffcd5599c1c37734ccf9cdabca84cf386297 100644 --- a/src/mtc/src/impl/mediator.cpp +++ b/src/mtc/src/impl/mediator.cpp @@ -37,12 +37,12 @@ void Mediator::setup_rviz(){ //pub_->publish(ma); } -void Mediator::set_wings(std::vector<std::vector<wing_BP>>& wbp){ +void Mediator::set_wings(std::vector<std::pair<std::vector<object_data>, int>>& wbp){ for (int i =0; i < wbp.size(); i++){ std::vector<Abstract_robot_element*> v; - for (int j =0; j < wbp[i].size(); j++){ - Abstract_robot_element* are = new Wing_rviz_decorator( new Wing(wbp[i][j].name_, wbp[i][j].pos_,wbp[i][j].size_)); + for (int j =0; j < wbp[i].first.size(); j++){ + Abstract_robot_element* are = new Wing_rviz_decorator( new Wing(wbp[i].first[j].name_, wbp[i].first[j].pose_,wbp[i].first[j].size_)); v.push_back(are); } wings_.push_back(v); diff --git a/src/mtc/src/impl/moveit_mediator.cpp b/src/mtc/src/impl/moveit_mediator.cpp index 0f1e9ce05f75b4d85e2f83fb60bddc10f0eb8475..2071a411b7239548b442ec985705d6d7f28ee78e 100644 --- a/src/mtc/src/impl/moveit_mediator.cpp +++ b/src/mtc/src/impl/moveit_mediator.cpp @@ -71,18 +71,20 @@ void Moveit_mediator::mediate(){ void Moveit_mediator::build_wings(std::bitset<3>& wing, int& robot){ std::bitset<3> result = robots_[robot]->observer_mask() & wing; Robot* ceti = dynamic_cast<Robot*>(robots_[robot]); + for (std::size_t i = 0; i < result.size(); i++){ if (result[i]){ + ROS_INFO("%i", i); ceti->register_observers(wings_[robot][i]); } } } -void Moveit_mediator::set_wings(std::vector<std::vector<wing_BP>>& wbp){ +void Moveit_mediator::set_wings(std::vector<std::pair<std::vector<object_data>, int>>& wbp){ for (int i =0; i < wbp.size(); i++){ std::vector<Abstract_robot_element*> v; - for (int j =0; j < wbp[i].size(); j++){ - Abstract_robot_element* are = new Wing_moveit_decorator( new Wing(wbp[i][j].name_, wbp[i][j].pos_,wbp[i][j].size_)); + for (int j =0; j < wbp[i].first.size(); j++){ + Abstract_robot_element* are = new Wing_moveit_decorator( new Wing(wbp[i].first[j].name_, wbp[i].first[j].pose_,wbp[i].first[j].size_)); v.push_back(are); } wings_.push_back(v); diff --git a/src/mtc/src/mtc2taskspace.cpp b/src/mtc/src/mtc2taskspace.cpp index bff2f439a519fe1549833d4f1879b108f8826e14..e1b78f574d5fff8c1ecafe3b0f77c75f8e21390d 100644 --- a/src/mtc/src/mtc2taskspace.cpp +++ b/src/mtc/src/mtc2taskspace.cpp @@ -1,12 +1,13 @@ #include "reader/abstract_param_reader.h" #include "reader/task_space_reader.h" +#include "reader/robot_reader.h" #include <regex> int main(int argc, char **argv){ ros::init(argc, argv, "mtc2taskspace"); std::shared_ptr<ros::NodeHandle> n(new ros::NodeHandle); - std::unique_ptr<Abstract_param_reader> task_space_reader(new Task_space_reader(n)); - task_space_reader->read(); + std::unique_ptr<Abstract_param_reader> ts_reader(new Task_space_reader(n)); + ts_reader->read(); return 0; } \ No newline at end of file diff --git a/src/mtc/src/reader/robot_reader.cpp b/src/mtc/src/reader/robot_reader.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a2e3b5703c95169828120e8137bdc08049b75680 --- /dev/null +++ b/src/mtc/src/reader/robot_reader.cpp @@ -0,0 +1,43 @@ +#include "reader/robot_reader.h" + +void Robot_reader::read(){ + std::string filename = "dummy.yaml"; + //nh_->getParam("/resource_name", filename); + + ROS_INFO("--- ROBOT_READER ---"); + XmlRpc::XmlRpcValue resources; + nh_->getParam("/objects", resources); + std::regex rx("table([0-9]+)_table_top"); + std::smatch match; + + for (int i = 0; i < resources.size(); i++){ + std::string str = resources[i]["id"]; + if(std::regex_match(str, match, rx)){ + ROS_INFO("=> Robot: description found, loading..."); + std::stringstream ss; + ss << "panda_arm" << match[1]; + tf2::Vector3 pos; + tf2::Vector3 size; + tf2::Quaternion rot; + + (resources[i]["size"].hasMember("length")) ? size.setX(float_of(resources[i]["size"]["length"])) :size.setX(0); + (resources[i]["size"].hasMember("width")) ? size.setY(float_of(resources[i]["size"]["width"])) :size.setY(0); + (resources[i]["size"].hasMember("height")) ? size.setZ(float_of(resources[i]["size"]["height"])) :size.setZ(0); + + (resources[i]["pos"].hasMember("x")) ? pos.setX(float_of(resources[i]["pos"]["x"])) :pos.setX(0); + (resources[i]["pos"].hasMember("y")) ? pos.setY(float_of(resources[i]["pos"]["y"])) :pos.setY(0); + (resources[i]["pos"].hasMember("z")) ? pos.setZ((float_of(resources[i]["pos"]["z"]) + size.getZ()/2) /2) :pos.setZ(0); + (resources[i]["orientation"].hasMember("x")) ? rot.setX(float_of(resources[i]["orientation"]["x"])) :rot.setX(0); + (resources[i]["orientation"].hasMember("y")) ? rot.setY(float_of(resources[i]["orientation"]["y"])) :rot.setY(0); + (resources[i]["orientation"].hasMember("z")) ? rot.setZ(float_of(resources[i]["orientation"]["z"])) :rot.setZ(0); + (resources[i]["orientation"].hasMember("w")) ? rot.setW(float_of(resources[i]["orientation"]["w"])) :rot.setW(0); + + ROS_INFO("--- Robot: %s ---", ss.str().c_str()); + ROS_INFO("=> Robot: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); + ROS_INFO("=> Robot: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); + ROS_INFO("=> Robot: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); + + robot_data_.push_back({ss.str().c_str(), tf2::Transform(rot,pos), size}); + } + } +} \ No newline at end of file diff --git a/src/mtc/src/reader/task_space_reader.cpp b/src/mtc/src/reader/task_space_reader.cpp index fa623b8e0d553370b46865466d4b6ec1078af2bc..5fef734010a5cbc5e5210ae31dc38c0012cf576f 100644 --- a/src/mtc/src/reader/task_space_reader.cpp +++ b/src/mtc/src/reader/task_space_reader.cpp @@ -2,7 +2,7 @@ void Task_space_reader::read(){ - std::string filename = "penis"; + std::string filename = "dummy.yaml"; //nh_->getParam("/resource_name", filename); XmlRpc::XmlRpcValue resources; diff --git a/src/mtc/src/reader/wing_reader.cpp b/src/mtc/src/reader/wing_reader.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0af4e425971000a8c8b77b799f2896cc4930ed92 --- /dev/null +++ b/src/mtc/src/reader/wing_reader.cpp @@ -0,0 +1,133 @@ +#include "reader/wing_reader.h" + +void Wing_reader::read(){ + XmlRpc::XmlRpcValue resources; + nh_->getParam("/objects", resources); + + std::regex rx("table([0-9]+)_table_top"); + std::smatch match; + + ROS_INFO("--- WING_READER ---"); + for(int i = 0; i < resources.size(); i++){ + std::string str = resources[i]["id"]; + if(std::regex_match(str, match, rx)){ + std::vector<object_data> wd; + wd.push_back({"", tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}); + wd.push_back({"", tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}); + wd.push_back({"", tf2::Transform(tf2::Quaternion(0,0,0,1), tf2::Vector3(0,0,0)), tf2::Vector3(0,0,0)}); + std::pair<std::vector<object_data>, int> pair; + pair.first = wd; + pair.second = 0; + wing_data_.push_back(pair); + } + } + + + rx.assign("table([0-9]+)_right_panel"); + for(int i = 0; i < resources.size(); i++){ + std::string str = resources[i]["id"]; + if (std::regex_match(str, match, rx)){ + ROS_INFO("=> WING: description found, loading..."); + tf2::Vector3 pos; + tf2::Vector3 size; + tf2::Quaternion rot; + + + (resources[i]["size"].hasMember("length")) ? size.setX(float_of(resources[i]["size"]["length"])) :size.setX(0); + (resources[i]["size"].hasMember("width")) ? size.setY(float_of(resources[i]["size"]["width"])) :size.setY(0); + (resources[i]["size"].hasMember("height")) ? size.setZ(float_of(resources[i]["size"]["height"])) :size.setZ(0); + + (resources[i]["pos"].hasMember("x")) ? pos.setX(float_of(resources[i]["pos"]["x"])) :pos.setX(0); + (resources[i]["pos"].hasMember("y")) ? pos.setY(float_of(resources[i]["pos"]["y"])) :pos.setY(0); + (resources[i]["pos"].hasMember("z")) ? pos.setZ(float_of(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); + (resources[i]["orientation"].hasMember("x")) ? rot.setX(float_of(resources[i]["orientation"]["x"])) :rot.setX(0); + (resources[i]["orientation"].hasMember("y")) ? rot.setY(float_of(resources[i]["orientation"]["y"])) :rot.setY(0); + (resources[i]["orientation"].hasMember("z")) ? rot.setZ(float_of(resources[i]["orientation"]["z"])) :rot.setZ(0); + (resources[i]["orientation"].hasMember("w")) ? rot.setW(float_of(resources[i]["orientation"]["w"])) :rot.setW(0); + + ROS_INFO("--- Wing %s ---", str.c_str()); + ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); + ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); + ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); + + + wing_data_[std::atoi(match[1].str().c_str())-1].first[0].name_ = str.c_str(); + wing_data_[std::atoi(match[1].str().c_str())-1].first[0].pose_ = tf2::Transform(rot.normalized(), pos); // mediator->robots()[0]->tf().inverse() * + wing_data_[std::atoi(match[1].str().c_str())-1].first[0].size_ = size; + wing_data_[std::atoi(match[1].str().c_str())-1].second += std::pow(2, 0); + } + } + + rx.assign("table([0-9]+)_front_panel"); + for(int i = 0; i < resources.size(); i++){ + std::string str = resources[i]["id"]; + if (std::regex_match(str, match, rx)){ + ROS_INFO("=> WING: description found, loading..."); + tf2::Vector3 pos; + tf2::Vector3 size; + tf2::Quaternion rot; + + + (resources[i]["size"].hasMember("length")) ? size.setX(float_of(resources[i]["size"]["length"])) :size.setX(0); + (resources[i]["size"].hasMember("width")) ? size.setY(float_of(resources[i]["size"]["width"])) :size.setY(0); + (resources[i]["size"].hasMember("height")) ? size.setZ(float_of(resources[i]["size"]["height"])) :size.setZ(0); + + (resources[i]["pos"].hasMember("x")) ? pos.setX(float_of(resources[i]["pos"]["x"])) :pos.setX(0); + (resources[i]["pos"].hasMember("y")) ? pos.setY(float_of(resources[i]["pos"]["y"])) :pos.setY(0); + (resources[i]["pos"].hasMember("z")) ? pos.setZ(float_of(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); + (resources[i]["orientation"].hasMember("x")) ? rot.setX(float_of(resources[i]["orientation"]["x"])) :rot.setX(0); + (resources[i]["orientation"].hasMember("y")) ? rot.setY(float_of(resources[i]["orientation"]["y"])) :rot.setY(0); + (resources[i]["orientation"].hasMember("z")) ? rot.setZ(float_of(resources[i]["orientation"]["z"])) :rot.setZ(0); + (resources[i]["orientation"].hasMember("w")) ? rot.setW(float_of(resources[i]["orientation"]["w"])) :rot.setW(0); + + ROS_INFO("--- Wing %s ---", str.c_str()); + ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); + ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); + ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); + + + wing_data_[std::atoi(match[1].str().c_str())-1].first[1].name_ = str.c_str(); + wing_data_[std::atoi(match[1].str().c_str())-1].first[1].pose_ = tf2::Transform(rot.normalized(), pos); // mediator->robots()[0]->tf().inverse() * + wing_data_[std::atoi(match[1].str().c_str())-1].first[1].size_ = size; + wing_data_[std::atoi(match[1].str().c_str())-1].second += std::pow(2, 1); + + + } + } + + rx.assign("table([0-9]+)_left_panel"); + for(int i = 0; i < resources.size(); i++){ + std::string str = resources[i]["id"]; + if (std::regex_match(str, match, rx)){ + ROS_INFO("=> WING: description found, loading..."); + tf2::Vector3 pos; + tf2::Vector3 size; + tf2::Quaternion rot; + + + (resources[i]["size"].hasMember("length")) ? size.setX(float_of(resources[i]["size"]["length"])) :size.setX(0); + (resources[i]["size"].hasMember("width")) ? size.setY(float_of(resources[i]["size"]["width"])) :size.setY(0); + (resources[i]["size"].hasMember("height")) ? size.setZ(float_of(resources[i]["size"]["height"])) :size.setZ(0); + + (resources[i]["pos"].hasMember("x")) ? pos.setX(float_of(resources[i]["pos"]["x"])) :pos.setX(0); + (resources[i]["pos"].hasMember("y")) ? pos.setY(float_of(resources[i]["pos"]["y"])) :pos.setY(0); + (resources[i]["pos"].hasMember("z")) ? pos.setZ(float_of(resources[i]["pos"]["z"]) + size.getZ()/2) :pos.setZ(0); + (resources[i]["orientation"].hasMember("x")) ? rot.setX(float_of(resources[i]["orientation"]["x"])) :rot.setX(0); + (resources[i]["orientation"].hasMember("y")) ? rot.setY(float_of(resources[i]["orientation"]["y"])) :rot.setY(0); + (resources[i]["orientation"].hasMember("z")) ? rot.setZ(float_of(resources[i]["orientation"]["z"])) :rot.setZ(0); + (resources[i]["orientation"].hasMember("w")) ? rot.setW(float_of(resources[i]["orientation"]["w"])) :rot.setW(0); + + ROS_INFO("--- Wing %s ---", str.c_str()); + ROS_INFO("=> WING: pos('%f', '%f', '%f')", pos.getX(), pos.getY(), pos.getZ()); + ROS_INFO("=> WING: orientation('%f', '%f', '%f', '%f')", rot.getX(), rot.getY(), rot.getZ(), rot.getW()); + ROS_INFO("=> WING: size('%f', '%f', '%f')", size.getX(), size.getY(), size.getZ()); + + + wing_data_[std::atoi(match[1].str().c_str())-1].first[2].name_ = str.c_str(); + wing_data_[std::atoi(match[1].str().c_str())-1].first[2].pose_ = tf2::Transform(rot.normalized(), pos); // mediator->robots()[0]->tf().inverse() * + wing_data_[std::atoi(match[1].str().c_str())-1].first[2].size_ = size; + wing_data_[std::atoi(match[1].str().c_str())-1].second += std::pow(2, 2); + + } + } +}