123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- ///@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
|