collision_checking.h
Go to the documentation of this file.
1#include <string>
2#include <vector>
3
4#include <VirtualRobot/VirtualRobot.h>
5
7
10
12{
14 {
15 const VirtualRobot::SceneObjectSetPtr staticObjects;
16 const std::vector<VirtualRobot::RobotPtr> articulatedObjects;
17 };
18
19 struct Robot3D
20 {
21 struct Params
22 {
23 std::string collisionModelName;
24 Eigen::Vector3f scaleFactor = Eigen::Vector3f::Ones();
25 std::set<std::string> primitiveApproximationIDs;
26
27 std::string rootNode;
28 };
29
31 std::vector<VirtualRobot::CollisionModelPtr> collisionModels;
32
33 bool isInitialized() const;
35 };
36
38 {
39 public:
41
42 bool isRobotInitialized() const;
43 void setRobot(Robot3D& robot);
45
46 float distanceToObstacles(const core::Pose2D& pose2d) const;
47
48 private:
49 Robot3D robot;
51 };
52
54
55 class Robot2D
56 {
57 private:
58 // This robot_polygon is centered around the rotationPoint
59 CollisionPolygon robot_polygon;
60
61 public:
62 Robot2D(VirtualRobot::RobotPtr& collisionRobot,
63 const VirtualRobot::CollisionModelPtr& robotCollisionModel);
64 Robot2D(VirtualRobot::RobotPtr& collisionRobot,
65 const std::vector<VirtualRobot::CollisionModelPtr>& robotCollisionModels);
66 Robot2D(const Robot2D&) = default;
67 Robot2D() = delete;
68 CollisionPolygon getOrientedRobot(float orientationRad) const;
70 };
71
72 class Scene2D
73 {
74 private:
75 std::vector<CollisionPolygon> obstacles;
76
77 public:
78 Scene2D(std::vector<VirtualRobot::CollisionModelPtr>& collisionModels,
79 float ignoreVerticesOver);
80 Scene2D(const SceneRepresentation& scene, float ignoreVerticesOver);
81 float distance(const CollisionPolygon& robot) const;
82 std::vector<CollisionPolygon>& getCollisionPolygons();
83
84 private:
85 void
86 initializeFromCollisionModels(std::vector<VirtualRobot::CollisionModelPtr>& collisionModels,
87 float ignoreVerticesOver);
88 };
89} // namespace armarx::navigation::algorithms::orientation_aware
void initializeRobot(const VirtualRobot::RobotPtr &robot, Robot3D::Params params)
CollisionPolygon getRobotAtPose(const core::Pose2D &pose) const
CollisionPolygon getOrientedRobot(float orientationRad) const
Robot2D(VirtualRobot::RobotPtr &collisionRobot, const VirtualRobot::CollisionModelPtr &robotCollisionModel)
Scene2D(std::vector< VirtualRobot::CollisionModelPtr > &collisionModels, float ignoreVerticesOver)
std::shared_ptr< class Robot > RobotPtr
Definition Bus.h:19
Eigen::Isometry2f Pose2D
Definition basic_types.h:34
boost::geometry::model::polygon< point_type > polygon_type
Definition geometry.h:36
static Robot3D fromSimoxRobot(const VirtualRobot::RobotPtr &robot, Robot3D::Params params)
std::vector< VirtualRobot::CollisionModelPtr > collisionModels