108 lines
3.1 KiB
C++
108 lines
3.1 KiB
C++
///@file Configuration for Inverse Dynamics Library,
|
|
/// such as choice of linear algebra library and underlying scalar type
|
|
#ifndef IDCONFIG_HPP_
|
|
#define IDCONFIG_HPP_
|
|
|
|
// If true, enable jacobian calculations.
|
|
// This adds a 3xN matrix to every body, + 2 3-Vectors.
|
|
// so it is not advised for large systems if it is not absolutely necessary.
|
|
// Also, this is not required for standard inverse dynamics calculations.
|
|
// Will only work with vector math libraries that support 3xN matrices.
|
|
#define BT_ID_WITH_JACOBIANS
|
|
|
|
// If we have a custom configuration, compile without using other parts of bullet.
|
|
#ifdef BT_CUSTOM_INVERSE_DYNAMICS_CONFIG_H
|
|
#include <cmath>
|
|
#define BT_ID_WO_BULLET
|
|
#define BT_ID_SQRT(x) std::sqrt(x)
|
|
#define BT_ID_FABS(x) std::fabs(x)
|
|
#define BT_ID_COS(x) std::cos(x)
|
|
#define BT_ID_SIN(x) std::sin(x)
|
|
#define BT_ID_ATAN2(x, y) std::atan2(x, y)
|
|
#define BT_ID_POW(x, y) std::pow(x, y)
|
|
#define BT_ID_SNPRINTF snprintf
|
|
#define BT_ID_PI M_PI
|
|
#define BT_ID_USE_DOUBLE_PRECISION
|
|
#else
|
|
#define BT_ID_SQRT(x) btSqrt(x)
|
|
#define BT_ID_FABS(x) btFabs(x)
|
|
#define BT_ID_COS(x) btCos(x)
|
|
#define BT_ID_SIN(x) btSin(x)
|
|
#define BT_ID_ATAN2(x, y) btAtan2(x, y)
|
|
#define BT_ID_POW(x, y) btPow(x, y)
|
|
#define BT_ID_PI SIMD_PI
|
|
#ifdef _WIN32
|
|
#define BT_ID_SNPRINTF _snprintf
|
|
#else
|
|
#define BT_ID_SNPRINTF snprintf
|
|
#endif //
|
|
#endif
|
|
// error messages
|
|
#include "IDErrorMessages.hpp"
|
|
|
|
#ifdef BT_CUSTOM_INVERSE_DYNAMICS_CONFIG_H
|
|
/*
|
|
#include "IDConfigEigen.hpp"
|
|
#include "IDConfigBuiltin.hpp"
|
|
*/
|
|
#define INVDYN_INCLUDE_HELPER_2(x) #x
|
|
#define INVDYN_INCLUDE_HELPER(x) INVDYN_INCLUDE_HELPER_2(x)
|
|
#include INVDYN_INCLUDE_HELPER(BT_CUSTOM_INVERSE_DYNAMICS_CONFIG_H)
|
|
#ifndef btInverseDynamics
|
|
#error "custom inverse dynamics config, but no custom namespace defined"
|
|
#endif
|
|
|
|
#define BT_ID_MAX(a,b) std::max(a,b)
|
|
#define BT_ID_MIN(a,b) std::min(a,b)
|
|
|
|
#else
|
|
#define btInverseDynamics btInverseDynamicsBullet3
|
|
// Use default configuration with bullet's types
|
|
// Use the same scalar type as rest of bullet library
|
|
#include "LinearMath/btScalar.h"
|
|
typedef btScalar idScalar;
|
|
#include "LinearMath/btMinMax.h"
|
|
#define BT_ID_MAX(a,b) btMax(a,b)
|
|
#define BT_ID_MIN(a,b) btMin(a,b)
|
|
|
|
#ifdef BT_USE_DOUBLE_PRECISION
|
|
#define BT_ID_USE_DOUBLE_PRECISION
|
|
#endif
|
|
|
|
#ifndef BT_USE_INVERSE_DYNAMICS_WITH_BULLET2
|
|
|
|
|
|
// use bullet types for arrays and array indices
|
|
#include "Bullet3Common/b3AlignedObjectArray.h"
|
|
// this is to make it work with C++2003, otherwise we could do this:
|
|
// template <typename T>
|
|
// using idArray = b3AlignedObjectArray<T>;
|
|
template <typename T>
|
|
struct idArray {
|
|
typedef b3AlignedObjectArray<T> type;
|
|
};
|
|
typedef int idArrayIdx;
|
|
#define ID_DECLARE_ALIGNED_ALLOCATOR() B3_DECLARE_ALIGNED_ALLOCATOR()
|
|
|
|
#else // BT_USE_INVERSE_DYNAMICS_WITH_BULLET2
|
|
|
|
#include "LinearMath/btAlignedObjectArray.h"
|
|
template <typename T>
|
|
struct idArray {
|
|
typedef btAlignedObjectArray<T> type;
|
|
};
|
|
typedef int idArrayIdx;
|
|
#define ID_DECLARE_ALIGNED_ALLOCATOR() BT_DECLARE_ALIGNED_ALLOCATOR()
|
|
|
|
#endif // BT_USE_INVERSE_DYNAMICS_WITH_BULLET2
|
|
|
|
|
|
// use bullet's allocator functions
|
|
#define idMalloc btAllocFunc
|
|
#define idFree btFreeFunc
|
|
|
|
#define ID_LINEAR_MATH_USE_BULLET
|
|
#include "details/IDLinearMathInterface.hpp"
|
|
#endif
|
|
#endif
|