flexible-collision-library / fcl

Flexible Collision Library
https://flexible-collision-library.github.io/
Other
1.35k stars 414 forks source link

Error using fcl::continuousCollide<float> function #538

Open HeJian0515 opened 3 years ago

HeJian0515 commented 3 years ago
    auto g1 = std::make_shared<fcl::Boxf>(1, 2, 3);
    auto t1 = fcl::Transform3f::Identity();
    auto o1 = new fcl::CollisionObjectf(g1, t1);
    auto t1_final = fcl::Transform3f::Identity();
    t1_final.translation() = fcl::Vector3f(1, 0, 0);

    auto g2 = std::make_shared<fcl::Conef>(1, 3);
    auto t2 = fcl::Transform3f::Identity();
    auto o2 = new fcl::CollisionObjectf(g2, t2);
    auto t2_final = fcl::Transform3f::Identity();
    t2_final.translation() = fcl::Vector3f(-1, 0, 0);

    fcl::ContinuousCollisionRequestf request;
    fcl::ContinuousCollisionResultf result;
    std::cout << fcl::continuousCollide<float>(o1, t1_final, o2, t2_final, request, result);

    delete o1;
    delete o2;

Error infomation

Error   C2259   'fcl::InterpMotion<S>': cannot instantiate abstract class
Error   C2259   'fcl::ScrewMotion<S>': cannot instantiate abstract class

but fcl::continuousCollide<doule> ok

    auto g1 = std::make_shared<fcl::Boxd>(1, 2, 3);
    auto t1 = fcl::Transform3d::Identity();
    auto o1 = new fcl::CollisionObjectd(g1, t1);
    auto t1_final = fcl::Transform3d::Identity();
    t1_final.translation() = fcl::Vector3d(1, 0, 0);

    auto g2 = std::make_shared<fcl::Coned>(1, 3);
    auto t2 = fcl::Transform3d::Identity();
    auto o2 = new fcl::CollisionObjectd(g2, t2);
    auto t2_final = fcl::Transform3d::Identity();
    t2_final.translation() = fcl::Vector3d(-1, 0, 0);

    fcl::ContinuousCollisionRequestd request;
    fcl::ContinuousCollisionResultd result;
    std::cout << fcl::continuousCollide(o1, t1_final, o2, t2_final, request, result);

    delete o1;
    delete o2;
HeJian0515 commented 3 years ago

"fcl/math/motion/interp_motion-inl.h" "fcl/math/motion/screw_motion-inl.h"

I had to change double to S.

template <typename S>
bool InterpMotion<S>::integrate(double dt) const

template <typename S>
bool InterpMotion<S>::integrate(S dt) const