hpp-core 6.0.0
Implement basic classes for canonical path planning for kinematic chains.
Loading...
Searching...
No Matches
body-pair-collision.hh
Go to the documentation of this file.
1//
2// Copyright (c) 2014,2015,2016,2018 CNRS
3// Authors: Florent Lamiraux, Joseph Mirabel, Diane Bury
4//
5
6// Redistribution and use in source and binary forms, with or without
7// modification, are permitted provided that the following conditions are
8// met:
9//
10// 1. Redistributions of source code must retain the above copyright
11// notice, this list of conditions and the following disclaimer.
12//
13// 2. Redistributions in binary form must reproduce the above copyright
14// notice, this list of conditions and the following disclaimer in the
15// documentation and/or other materials provided with the distribution.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
28// DAMAGE.
29
30#ifndef HPP_CORE_CONTINUOUS_VALIDATION_BODY_PAIR_COLLISION_HH
31#define HPP_CORE_CONTINUOUS_VALIDATION_BODY_PAIR_COLLISION_HH
32
33#include <coal/collision_data.h>
34
35#include <boost/icl/continuous_interval.hpp>
36#include <boost/icl/interval_set.hpp>
40
41namespace hpp {
42namespace core {
43namespace continuousValidation {
63 public:
77 const pinocchio::DeviceData& data);
78
79 // Get pairs checked for collision
80 const CollisionPairs_t& pairs() const { return m_->pairs; }
81
82 // Get pairs checked for collision
83 CollisionPairs_t& pairs() { return m_->pairs; }
84
85 // Get requests checked for collision
86 const CollisionRequests_t& requests() const { return m_->requests; }
87
88 // Get requests checked for collision
89 CollisionRequests_t& requests() { return m_->requests; }
90
91 // Get maximal velocity
92 value_type maximalVelocity() const { return maximalVelocity_; }
93
95 virtual size_type indexJointA() const { return -1; }
97 virtual size_type indexJointB() const { return -1; }
98
99 virtual bool removeObjectTo_b(const CollisionObjectConstPtr_t& /*object*/) {
100 return false;
101 }
102 virtual void addCollisionPair(const CollisionObjectConstPtr_t& /*left*/,
103 const CollisionObjectConstPtr_t& /*right*/) {}
104
105 virtual std::string name() const = 0;
106 virtual std::ostream& print(std::ostream& os) const = 0;
107
110
112 value_type securityMargin() const { return m_->requests[0].security_margin; }
115 for (auto& request : m_->requests) request.security_margin = securityMargin;
116 }
118 protected:
123 : IntervalValidation(tolerance), m_(new Model), maximalVelocity_(0) {}
124
127 : IntervalValidation(other),
128 m_(other.m_),
129 maximalVelocity_(other.maximalVelocity_) {}
130
131 virtual void setReport(ValidationReportPtr_t& report,
132 coal::CollisionResult result,
133 CollisionPair_t _pair) const {
135 new CollisionValidationReport(_pair, result));
136 }
137
138 private:
139 struct Model {
140 CollisionPairs_t pairs;
143 CollisionRequests_t requests;
144 };
145 shared_ptr<Model> m_;
146
147 mutable vector_t Vb_;
148 value_type maximalVelocity_;
149
152 virtual value_type computeMaximalVelocity(vector_t& Vb) const = 0;
153
156 virtual void setupPath();
157
163 value_type collisionFreeInterval(const value_type& t,
164 const value_type& distanceLowerBound,
165 value_type& maxVelocity) const;
166
171 virtual bool computeDistanceLowerBound(value_type& distanceLowerBound,
172 ValidationReportPtr_t& report,
173 const pinocchio::DeviceData& data);
174
175}; // class BodyPairCollision
176
177inline std::ostream& operator<<(std::ostream& os,
178 const BodyPairCollision& pair) {
179 return pair.print(os);
180}
181} // namespace continuousValidation
182} // namespace core
183} // namespace hpp
184#endif // HPP_CORE_CONTINUOUS_VALIDATION_BODY_PAIR_COLLISION_HH
Definition body-pair-collision.hh:62
virtual void setReport(ValidationReportPtr_t &report, coal::CollisionResult result, CollisionPair_t _pair) const
Definition body-pair-collision.hh:131
bool validateConfiguration(const value_type &t, interval_t &interval, ValidationReportPtr_t &report, const pinocchio::DeviceData &data)
virtual void addCollisionPair(const CollisionObjectConstPtr_t &, const CollisionObjectConstPtr_t &)
Definition body-pair-collision.hh:102
virtual bool removeObjectTo_b(const CollisionObjectConstPtr_t &)
Definition body-pair-collision.hh:99
const CollisionRequests_t & requests() const
Definition body-pair-collision.hh:86
CollisionPairs_t & pairs()
Definition body-pair-collision.hh:83
value_type securityMargin() const
Get security margin of the first pair of object.
Definition body-pair-collision.hh:112
const CollisionPairs_t & pairs() const
Definition body-pair-collision.hh:80
BodyPairCollision(value_type tolerance)
Definition body-pair-collision.hh:122
virtual size_type indexJointA() const
Returns joint A index or -1 if no such joint exists.
Definition body-pair-collision.hh:95
void securityMargin(const value_type &securityMargin)
Set security margin.
Definition body-pair-collision.hh:114
BodyPairCollision(const BodyPairCollision &other)
Copy constructor.
Definition body-pair-collision.hh:126
virtual std::ostream & print(std::ostream &os) const =0
CollisionRequests_t & requests()
Definition body-pair-collision.hh:89
virtual size_type indexJointB() const
Returns joint B index or -1 if no such joint exists.
Definition body-pair-collision.hh:97
value_type maximalVelocity() const
Definition body-pair-collision.hh:92
Definition interval-validation.hh:67
value_type tolerance() const
Definition interval-validation.hh:95
std::ostream & operator<<(std::ostream &os, const BodyPairCollision &pair)
Definition body-pair-collision.hh:177
std::vector< CollisionPair_t > CollisionPairs_t
Definition fwd.hh:239
pinocchio::value_type value_type
Definition fwd.hh:174
std::vector< coal::CollisionRequest > CollisionRequests_t
Definition collision-pair.hh:43
pinocchio::vector_t vector_t
Definition fwd.hh:220
std::pair< value_type, value_type > interval_t
Definition fwd.hh:175
pinocchio::size_type size_type
Definition fwd.hh:173
shared_ptr< ValidationReport > ValidationReportPtr_t
Definition fwd.hh:225
shared_ptr< CollisionValidationReport > CollisionValidationReportPtr_t
Definition fwd.hh:96
pinocchio::CollisionObjectConstPtr_t CollisionObjectConstPtr_t
Definition fwd.hh:100
Definition bi-rrt-planner.hh:35
Definition collision-pair.hh:45
Definition collision-validation-report.hh:47