GCC Code Coverage Report


Directory: ./
File: src/collision-object.cc
Date: 2025-05-04 12:09:19
Exec Total Coverage
Lines: 0 70 0.0%
Branches: 0 64 0.0%

Line Branch Exec Source
1 //
2 // Copyright (c) 2016 CNRS
3 // Author: NMansard
4 //
5 //
6
7 // Redistribution and use in source and binary forms, with or without
8 // modification, are permitted provided that the following conditions are
9 // met:
10 //
11 // 1. Redistributions of source code must retain the above copyright
12 // notice, this list of conditions and the following disclaimer.
13 //
14 // 2. Redistributions in binary form must reproduce the above copyright
15 // notice, this list of conditions and the following disclaimer in the
16 // documentation and/or other materials provided with the distribution.
17 //
18 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 // HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
29 // DAMAGE.
30
31 #include <hpp/pinocchio/collision-object.hh>
32 #include <hpp/pinocchio/device.hh>
33 #include <hpp/pinocchio/joint-collection.hh>
34 #include <hpp/pinocchio/joint.hh>
35 #include <pinocchio/multibody/geometry.hpp>
36 #include <pinocchio/multibody/model.hpp>
37 #include <pinocchio/spatial/fcl-pinocchio-conversions.hpp>
38
39 namespace hpp {
40 namespace pinocchio {
41
42 ✗ CollisionObject::CollisionObject(DevicePtr_t device,
43 ✗ const GeomIndex geomInModel)
44 ✗ : devicePtr(device),
45 ✗ geomModel_(devicePtr->geomModelPtr()),
46 ✗ jointIndex_(0),
47 ✗ geomInModelIndex(geomInModel) {
48 ✗ jointIndex_ = pinocchio().parentJoint;
49 ✗ selfAssert();
50 }
51
52 ✗ CollisionObject::CollisionObject(GeomModelPtr_t geomModel,
53 GeomDataPtr_t geomData,
54 ✗ const GeomIndex geomInModel)
55 ✗ : devicePtr(),
56 ✗ geomModel_(geomModel),
57 ✗ geomData_(geomData),
58 ✗ jointIndex_(0),
59 ✗ geomInModelIndex(geomInModel) {
60 ✗ jointIndex_ = pinocchio().parentJoint;
61 ✗ selfAssert();
62 }
63
64 ✗ const std::string& CollisionObject::name() const { return pinocchio().name; }
65
66 // This function should rather return a shared_ptr<const>
67 ✗ const ::pinocchio::GeometryObject& CollisionObject::pinocchio() const {
68 ✗ return geomModel_->geometryObjects[geomInModelIndex];
69 }
70 ✗ ::pinocchio::GeometryObject& CollisionObject::pinocchio() {
71 ✗ return geomModel_->geometryObjects[geomInModelIndex];
72 }
73
74 ✗ CollisionGeometryPtr_t CollisionObject::geometry() const {
75 ✗ return pinocchio().geometry;
76 }
77
78 ✗ FclCollisionObjectPtr_t CollisionObject::fcl(GeomData& geomData) const {
79 return FclCollisionObjectPtr_t(new FclCollisionObject(
80 ✗ geometry(), toFclTransform3f(geomData.oMg[geomInModelIndex])));
81 }
82
83 ✗ FclConstCollisionObjectPtr_t CollisionObject::fcl(
84 const GeomData& geomData) const {
85 return FclCollisionObjectPtr_t(new FclCollisionObject(
86 ✗ geometry(), toFclTransform3f(geomData.oMg[geomInModelIndex])));
87 }
88
89 ✗ FclConstCollisionObjectPtr_t CollisionObject::fcl() const {
90 ✗ return fcl(geomData());
91 }
92 ✗ FclCollisionObjectPtr_t CollisionObject::fcl() { return fcl(geomData()); }
93
94 ✗ FclCollisionObjectPtr_t CollisionObject::fcl(DeviceData& d) const {
95 return FclCollisionObjectPtr_t(new FclCollisionObject(
96 ✗ geometry(), toFclTransform3f(geomData(d).oMg[geomInModelIndex])));
97 }
98
99 ✗ FclConstCollisionObjectPtr_t CollisionObject::fcl(const DeviceData& d) const {
100 return FclCollisionObjectPtr_t(new FclCollisionObject(
101 ✗ geometry(), toFclTransform3f(geomData(d).oMg[geomInModelIndex])));
102 }
103
104 ✗ JointPtr_t CollisionObject::joint() {
105 ✗ if (!devicePtr) return JointPtr_t();
106 ✗ return Joint::create(devicePtr, jointIndex_);
107 }
108
109 ✗ JointConstPtr_t CollisionObject::joint() const {
110 ✗ if (!devicePtr) return JointConstPtr_t();
111 ✗ return Joint::create(devicePtr, jointIndex_);
112 }
113
114 ✗ const Transform3s& CollisionObject::positionInJointFrame() const {
115 ✗ return pinocchio().placement;
116 }
117
118 ✗ fcl::Transform3s CollisionObject::getFclTransform() const {
119 ✗ return ::pinocchio::toFclTransform3f(geomData().oMg[geomInModelIndex]);
120 }
121 ✗ const Transform3s& CollisionObject::getTransform() const {
122 ✗ return geomData().oMg[geomInModelIndex];
123 }
124 ✗ const Transform3s& CollisionObject::getTransform(const DeviceData& d) const {
125 ✗ return geomData(d).oMg[geomInModelIndex];
126 }
127
128 ✗ void CollisionObject::move(const Transform3s& position) {
129 // move does not work but for object attached to the universe (joint 0)
130 ✗ assert(jointIndex_ == 0);
131 ✗ geomData().oMg[geomInModelIndex] = position;
132 ✗ pinocchio().placement = position;
133 }
134
135 ✗ void CollisionObject::selfAssert() const {
136 ✗ assert(geomModel_);
137 ✗ assert(devicePtr || geomData_);
138 ✗ assert(!devicePtr ||
139 devicePtr->model().joints.size() > std::size_t(jointIndex_));
140 ✗ assert(geomModel_->geometryObjects.size() > geomInModelIndex);
141 }
142
143 ✗ GeomData& CollisionObject::geomData() const {
144 ✗ if (devicePtr) // Object of the robot.
145 ✗ return geomData(devicePtr->d());
146 else // Object of the environment.
147 ✗ return *geomData_;
148 }
149
150 ✗ GeomData& CollisionObject::geomData(DeviceData& d) const {
151 ✗ if (geomData_)
152 ✗ return *geomData_;
153 else
154 ✗ return *d.geomData_;
155 }
156
157 ✗ const GeomData& CollisionObject::geomData(const DeviceData& d) const {
158 ✗ if (geomData_)
159 ✗ return *geomData_;
160 else
161 ✗ return *d.geomData_;
162 }
163 } // namespace pinocchio
164 } // namespace hpp
165