@@ -35,3 +35,58 @@ void pyVelocityOmniWheels4X(py::module& m) {
3535 .def (" getIsGlobalVelocity" , &OmniWheels4X::getIsGlobalVelocity);
3636
3737}
38+
39+ using CollisionAvoidanceC = OpenSoT::constraints::velocity::CollisionAvoidance;
40+
41+ std::shared_ptr<CollisionAvoidanceC> make_collision_avoidance (
42+ const XBot::ModelInterface& model, int max_pairs,
43+ std::string collision_urdf_str, std::string collision_srdf_str)
44+ {
45+ urdf::ModelSharedPtr collision_urdf;
46+ if (!collision_urdf_str.empty ()){
47+ collision_urdf = std::make_shared<urdf::Model>();
48+ if (!collision_urdf->initString (collision_urdf_str)){
49+ throw std::runtime_error (" Failed to parse collision_urdf string" );
50+ }
51+ }
52+
53+ srdf::ModelSharedPtr collision_srdf;
54+ if (!collision_srdf_str.empty ()){
55+ collision_srdf = std::make_shared<srdf::Model>();
56+ urdf::ModelConstSharedPtr active_urdf = collision_urdf ? collision_urdf : model.getUrdf ();
57+ if (!collision_srdf->initString (*active_urdf, collision_srdf_str)){
58+ throw std::runtime_error (" Failed to parse collision_srdf string" );
59+ }
60+ }
61+
62+ return std::make_shared<CollisionAvoidanceC>(model, max_pairs, collision_urdf, collision_srdf);
63+ }
64+
65+
66+ void pyVelocityCollisionAvoidance (py::module & m) {
67+
68+ using CollisionAvoidance = OpenSoT::constraints::velocity::CollisionAvoidance;
69+
70+ py::class_<CollisionAvoidance, std::shared_ptr<CollisionAvoidance>, OpenSoT::Constraint<Eigen::MatrixXd, Eigen::VectorXd>>(m, " CollisionAvoidance" )
71+ .def (py::init (&make_collision_avoidance),
72+ py::arg (), py::arg (" max_pairs" ) = -1 , py::arg (" collision_urdf" ) = " " , py::arg (" collision_srdf" ) = " " )
73+ .def (" setInfeasiblePairWeight" , &CollisionAvoidance::setInfeasiblePairWeight)
74+ .def (" getLinkPairThreshold" , &CollisionAvoidance::getLinkPairThreshold)
75+ .def (" getDetectionThreshold" , &CollisionAvoidance::getDetectionThreshold)
76+ .def (" setLinkPairThreshold" , &CollisionAvoidance::setLinkPairThreshold)
77+ .def (" setDetectionThreshold" , &CollisionAvoidance::setDetectionThreshold)
78+ .def (" update" , &CollisionAvoidance::update)
79+ .def (" setMaxPairs" , &CollisionAvoidance::setMaxPairs)
80+ .def (" setCollisionList" , &CollisionAvoidance::setCollisionList)
81+ .def (" collisionModelUpdated" , &CollisionAvoidance::collisionModelUpdated)
82+ .def (" addCollisionShape" , &CollisionAvoidance::addCollisionShape)
83+ .def (" moveCollisionShape" , &CollisionAvoidance::moveCollisionShape)
84+ .def (" setBoundScaling" , &CollisionAvoidance::setBoundScaling)
85+ .def (" setLinksVsEnvironment" , &CollisionAvoidance::setLinksVsEnvironment)
86+ .def (" getCollisionModel" , (const XBot::Collision::CollisionModel& (CollisionAvoidance::*)() const ) &CollisionAvoidance::getCollisionModel)
87+ .def (" getOrderedWitnessPointVector" , &CollisionAvoidance::getOrderedWitnessPointVector)
88+ .def (" getOrderedLinkPairVector" , &CollisionAvoidance::getOrderedLinkPairVector)
89+ .def (" getOrderedDistanceVector" , &CollisionAvoidance::getOrderedDistanceVector)
90+ .def (" getCollisionJacobian" , &CollisionAvoidance::getCollisionJacobian);
91+ }
92+
0 commit comments