Skip to content

Commit 7856432

Browse files
committed
add an SDF to the planar terrain model
1 parent 5ecd333 commit 7856432

File tree

5 files changed

+65
-1
lines changed

5 files changed

+65
-1
lines changed

common/ocs2_switched_model_interface/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ add_library(${PROJECT_NAME}
7777
src/logic/DynamicsParametersSynchronizedModule.cpp
7878
src/logic/SwitchedModelModeScheduleManager.cpp
7979
src/ros_msg_conversions/RosMsgConversions.cpp
80+
src/terrain/PlanarSignedDistanceField.cpp
8081
src/terrain/PlanarTerrainModel.cpp
8182
src/terrain/PlaneFitting.cpp
8283
src/terrain/TerrainPlane.cpp
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#pragma once
2+
3+
#include "ocs2_switched_model_interface/core/SwitchedModel.h"
4+
#include "ocs2_switched_model_interface/terrain/SignedDistanceField.h"
5+
#include "ocs2_switched_model_interface/terrain/TerrainModel.h"
6+
7+
namespace switched_model {
8+
9+
/**
10+
* Implements a flat terrain signed distance field
11+
*/
12+
class PlanarSignedDistanceField : public SignedDistanceField {
13+
public:
14+
EIGEN_MAKE_ALIGNED_OPERATOR_NEW
15+
16+
explicit PlanarSignedDistanceField(TerrainPlane terrainPlane);
17+
18+
~PlanarSignedDistanceField() override = default;
19+
PlanarSignedDistanceField* clone() const override { return new PlanarSignedDistanceField(*this); };
20+
21+
scalar_t value(const vector3_t& position) const override;
22+
23+
vector3_t derivative(const vector3_t& position) const override;
24+
25+
std::pair<scalar_t, vector3_t> valueAndDerivative(const vector3_t& position) const override;
26+
27+
protected:
28+
PlanarSignedDistanceField(const PlanarSignedDistanceField& other);
29+
30+
private:
31+
TerrainPlane terrainPlane_;
32+
};
33+
34+
} // namespace switched_model

common/ocs2_switched_model_interface/include/ocs2_switched_model_interface/terrain/PlanarTerrainModel.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
#pragma once
66

77
#include "ocs2_switched_model_interface/core/SwitchedModel.h"
8+
#include "ocs2_switched_model_interface/terrain/PlanarSignedDistanceField.h"
89
#include "ocs2_switched_model_interface/terrain/TerrainModel.h"
910

1011
namespace switched_model {
@@ -25,8 +26,11 @@ class PlanarTerrainModel : public TerrainModel {
2526

2627
std::vector<vector2_t> getHeightProfileAlongLine(const vector3_t& position1InWorld, const vector3_t& position2InWorld) const override;
2728

29+
const SignedDistanceField* getSignedDistanceField() const override { return &sdf_; }
30+
2831
private:
2932
TerrainPlane terrainPlane_;
33+
PlanarSignedDistanceField sdf_;
3034
};
3135

3236
} // namespace switched_model
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
//
2+
// Created by rgrandia on 08.09.22.
3+
//
4+
5+
#include "ocs2_switched_model_interface/terrain/PlanarSignedDistanceField.h"
6+
7+
namespace switched_model {
8+
9+
PlanarSignedDistanceField::PlanarSignedDistanceField(TerrainPlane terrainPlane) : terrainPlane_(std::move(terrainPlane)) {}
10+
11+
PlanarSignedDistanceField::PlanarSignedDistanceField(const PlanarSignedDistanceField& other) : terrainPlane_(other.terrainPlane_) {}
12+
13+
scalar_t PlanarSignedDistanceField::value(const vector3_t& position) const {
14+
return terrainSignedDistanceFromPositionInWorld(position, terrainPlane_);
15+
}
16+
17+
vector3_t PlanarSignedDistanceField::derivative(const vector3_t& position) const {
18+
return surfaceNormalInWorld(terrainPlane_);
19+
}
20+
21+
std::pair<scalar_t, vector3_t> PlanarSignedDistanceField::valueAndDerivative(const vector3_t& position) const {
22+
return {value(position), derivative(position)};
23+
}
24+
25+
} // namespace switched_model

common/ocs2_switched_model_interface/src/terrain/PlanarTerrainModel.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace switched_model {
88

9-
PlanarTerrainModel::PlanarTerrainModel(TerrainPlane terrainPlane) : terrainPlane_(std::move(terrainPlane)) {}
9+
PlanarTerrainModel::PlanarTerrainModel(TerrainPlane terrainPlane) : terrainPlane_(terrainPlane), sdf_(std::move(terrainPlane)) {}
1010

1111
TerrainPlane PlanarTerrainModel::getLocalTerrainAtPositionInWorldAlongGravity(
1212
const vector3_t& positionInWorld, std::function<scalar_t(const vector3_t&)> penaltyFunction) const {

0 commit comments

Comments
 (0)