collision_checking.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5
6#include <VirtualRobot/VirtualRobot.h>
7
9
12
14{
16 {
17 const VirtualRobot::SceneObjectSetPtr staticObjects;
18 const std::vector<VirtualRobot::RobotPtr> articulatedObjects;
19 };
20
21 struct Robot3D
22 {
23 struct Params
24 {
25 std::string collisionModelName;
26 Eigen::Vector3f scaleFactor = Eigen::Vector3f::Ones();
27 std::set<std::string> primitiveApproximationIDs;
28
29 std::string rootNode;
30 };
31
33 std::vector<VirtualRobot::CollisionModelPtr> collisionModels;
34
35 bool isInitialized() const;
37 };
38
40 {
41 public:
43
44 bool isRobotInitialized() const;
45 void setRobot(Robot3D& robot);
47
48 float distanceToObstacles(const core::Pose2D& pose2d) const;
49
50 private:
51 Robot3D robot;
53 };
54
56
57 class Robot2D
58 {
59 private:
60 // This robot_polygon is centered around the rotationPoint
61 CollisionPolygon robot_polygon;
62
63 public:
64 Robot2D(VirtualRobot::RobotPtr& collisionRobot,
65 const VirtualRobot::CollisionModelPtr& robotCollisionModel);
66 Robot2D(VirtualRobot::RobotPtr& collisionRobot,
67 const std::vector<VirtualRobot::CollisionModelPtr>& robotCollisionModels);
68 Robot2D(const Robot2D&) = default;
69 Robot2D() = delete;
70 CollisionPolygon getOrientedRobot(float orientationRad) const;
72 };
73
74 class Scene2D
75 {
76 private:
77 std::vector<CollisionPolygon> obstacles;
78
79 public:
80 Scene2D(std::vector<VirtualRobot::CollisionModelPtr>& collisionModels,
81 float ignoreVerticesOver);
82 Scene2D(const SceneRepresentation& scene, float ignoreVerticesOver);
83 float distance(const CollisionPolygon& robot) const;
84 std::vector<CollisionPolygon>& getCollisionPolygons();
85
86 private:
87 void
88 initializeFromCollisionModels(std::vector<VirtualRobot::CollisionModelPtr>& collisionModels,
89 float ignoreVerticesOver);
90 };
91} // 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