Skip to content

Commit

Permalink
dartpy: Add BallJoint, RevoluteJoint, joint properties, and chain tut…
Browse files Browse the repository at this point in the history
…orial (incomplete) (dartsim#1335)
  • Loading branch information
jslee02 authored May 24, 2019
1 parent e22c8c8 commit 0ed33f0
Show file tree
Hide file tree
Showing 30 changed files with 2,665 additions and 205 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
* Added collision APIs: [#1329](https://github.com/dartsim/dart/pull/1329)
* Added DegreeOfFreedom and ShapeNode: [#1332](https://github.com/dartsim/dart/pull/1332)
* Added constraint APIs: [#1333](https://github.com/dartsim/dart/pull/1333)
* Added BallJoint, RevoluteJoint, joint properties, and chain tutorial (incomplete): [#1335](https://github.com/dartsim/dart/pull/1335)

### [DART 6.8.4 (2019-05-03)](https://github.com/dartsim/dart/milestone/56?closed=1)

Expand Down
1 change: 1 addition & 0 deletions python/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,4 @@ set(DART_DARTPY_BUILD_DIR "${CMAKE_CURRENT_BINARY_DIR}/dartpy")
add_subdirectory(dartpy)
add_subdirectory(tests)
add_subdirectory(examples)
add_subdirectory(tutorials)
102 changes: 102 additions & 0 deletions python/dartpy/common/Composite.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
/*
* Copyright (c) 2011-2019, The DART development contributors
* All rights reserved.
*
* The list of contributors can be found at:
* https://github.com/dartsim/dart/blob/master/LICENSE
*
* This file is provided under the following "BSD-style" License:
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

#include <dart/dart.hpp>
#include <pybind11/pybind11.h>

namespace dart {
namespace python {

void Composite(pybind11::module& m)
{
::pybind11::
class_<dart::common::Composite, std::shared_ptr<dart::common::Composite>>(
m, "Composite")
.def(::pybind11::init<>())
.def(
"setCompositeState",
+[](dart::common::Composite* self,
const dart::common::Composite::State& newStates) {
self->setCompositeState(newStates);
},
::pybind11::arg("newStates"))
.def(
"getCompositeState",
+[](const dart::common::Composite* self)
-> dart::common::Composite::State {
return self->getCompositeState();
})
.def(
"copyCompositeStateTo",
+[](const dart::common::Composite* self,
dart::common::Composite::State& outgoingStates) {
self->copyCompositeStateTo(outgoingStates);
},
::pybind11::arg("outgoingStates"))
.def(
"setCompositeProperties",
+[](dart::common::Composite* self,
const dart::common::Composite::Properties& newProperties) {
self->setCompositeProperties(newProperties);
},
::pybind11::arg("newProperties"))
.def(
"getCompositeProperties",
+[](const dart::common::Composite* self)
-> dart::common::Composite::Properties {
return self->getCompositeProperties();
})
.def(
"copyCompositePropertiesTo",
+[](const dart::common::Composite* self,
dart::common::Composite::Properties& outgoingProperties) {
self->copyCompositePropertiesTo(outgoingProperties);
},
::pybind11::arg("outgoingProperties"))
.def(
"duplicateAspects",
+[](dart::common::Composite* self,
const dart::common::Composite* fromComposite) {
self->duplicateAspects(fromComposite);
},
::pybind11::arg("fromComposite"))
.def(
"matchAspects",
+[](dart::common::Composite* self,
const dart::common::Composite* otherComposite) {
self->matchAspects(otherComposite);
},
::pybind11::arg("otherComposite"));
}

} // namespace python
} // namespace dart
2 changes: 2 additions & 0 deletions python/dartpy/common/module.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ namespace python {
void Observer(pybind11::module& sm);
void Subject(pybind11::module& sm);
void Uri(pybind11::module& sm);
void Composite(pybind11::module& sm);

void dart_common(pybind11::module& m)
{
Expand All @@ -46,6 +47,7 @@ void dart_common(pybind11::module& m)
Observer(sm);
Subject(sm);
Uri(sm);
Composite(sm);
}

} // namespace python
Expand Down
112 changes: 112 additions & 0 deletions python/dartpy/dynamics/BallJoint.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
/*
* Copyright (c) 2011-2019, The DART development contributors
* All rights reserved.
*
* The list of contributors can be found at:
* https://github.com/dartsim/dart/blob/master/LICENSE
*
* This file is provided under the following "BSD-style" License:
* Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
* CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

#include <dart/dart.hpp>
#include <eigen_geometry_pybind.h>
#include <pybind11/eigen.h>
#include <pybind11/pybind11.h>

namespace dart {
namespace python {

void BallJoint(pybind11::module& m)
{
::pybind11::class_<
dart::dynamics::BallJoint::Properties,
dart::dynamics::detail::GenericJointProperties<dart::math::SO3Space>>(
m, "BallJointProperties")
.def(::pybind11::init<>())
.def(
::pybind11::init<const dart::dynamics::GenericJoint<
dart::math::SO3Space>::Properties&>(),
::pybind11::arg("properties"));

::pybind11::class_<
dart::dynamics::BallJoint,
dart::dynamics::GenericJoint<dart::math::SO3Space>,
std::shared_ptr<dart::dynamics::BallJoint>>(m, "BallJoint")
.def(
"getType",
+[](const dart::dynamics::BallJoint* self) -> const std::string& {
return self->getType();
},
::pybind11::return_value_policy::reference_internal)
.def(
"isCyclic",
+[](const dart::dynamics::BallJoint* self,
std::size_t _index) -> bool { return self->isCyclic(_index); },
::pybind11::arg("index"))
.def(
"getBallJointProperties",
+[](const dart::dynamics::BallJoint* self)
-> dart::dynamics::BallJoint::Properties {
return self->getBallJointProperties();
})
.def(
"getRelativeJacobianStatic",
+[](const dart::dynamics::BallJoint* self,
const Eigen::Vector3d& _positions)
-> Eigen::Matrix<double, 6, 3> {
return self->getRelativeJacobianStatic(_positions);
},
::pybind11::arg("positions"))
.def(
"getPositionDifferencesStatic",
+[](const dart::dynamics::BallJoint* self,
const Eigen::Vector3d& _q2,
const Eigen::Vector3d& _q1) -> Eigen::Vector3d {
return self->getPositionDifferencesStatic(_q2, _q1);
},
::pybind11::arg("q2"),
::pybind11::arg("q1"))
.def_static(
"getStaticType",
+[]() -> const std::string& {
return dart::dynamics::BallJoint::getStaticType();
},
::pybind11::return_value_policy::reference_internal)
.def_static(
"convertToTransform",
+[](const Eigen::Vector3d& _positions) -> Eigen::Isometry3d {
return dart::dynamics::BallJoint::convertToTransform(_positions);
},
::pybind11::arg("positions"))
.def_static(
"convertToRotation",
+[](const Eigen::Vector3d& _positions) -> Eigen::Matrix3d {
return dart::dynamics::BallJoint::convertToRotation(_positions);
},
::pybind11::arg("positions"));
}

} // namespace python
} // namespace dart
107 changes: 107 additions & 0 deletions python/dartpy/dynamics/BodyNode.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,83 @@ namespace python {

void BodyNode(pybind11::module& m)
{
::pybind11::class_<dart::dynamics::detail::BodyNodeAspectProperties>(
m, "BodyNodeAspectProperties")
.def(::pybind11::init<>())
.def(::pybind11::init<const std::string&>(), ::pybind11::arg("name"))
.def(
::pybind11::
init<const std::string&, const dart::dynamics::Inertia&>(),
::pybind11::arg("name"),
::pybind11::arg("inertia"))
.def(
::pybind11::
init<const std::string&, const dart::dynamics::Inertia&, bool>(),
::pybind11::arg("name"),
::pybind11::arg("inertia"),
::pybind11::arg("isCollidable"))
.def(
::pybind11::init<
const std::string&,
const dart::dynamics::Inertia&,
bool,
double>(),
::pybind11::arg("name"),
::pybind11::arg("inertia"),
::pybind11::arg("isCollidable"),
::pybind11::arg("frictionCoeff"))
.def(
::pybind11::init<
const std::string&,
const dart::dynamics::Inertia&,
bool,
double,
double>(),
::pybind11::arg("name"),
::pybind11::arg("inertia"),
::pybind11::arg("isCollidable"),
::pybind11::arg("frictionCoeff"),
::pybind11::arg("restitutionCoeff"))
.def(
::pybind11::init<
const std::string&,
const dart::dynamics::Inertia&,
bool,
double,
double,
bool>(),
::pybind11::arg("name"),
::pybind11::arg("inertia"),
::pybind11::arg("isCollidable"),
::pybind11::arg("frictionCoeff"),
::pybind11::arg("restitutionCoeff"),
::pybind11::arg("gravityMode"))
.def_readwrite(
"mName", &dart::dynamics::detail::BodyNodeAspectProperties::mName)
.def_readwrite(
"mInertia",
&dart::dynamics::detail::BodyNodeAspectProperties::mInertia)
.def_readwrite(
"mIsCollidable",
&dart::dynamics::detail::BodyNodeAspectProperties::mIsCollidable)
.def_readwrite(
"mFrictionCoeff",
&dart::dynamics::detail::BodyNodeAspectProperties::mFrictionCoeff)
.def_readwrite(
"mRestitutionCoeff",
&dart::dynamics::detail::BodyNodeAspectProperties::mRestitutionCoeff)
.def_readwrite(
"mGravityMode",
&dart::dynamics::detail::BodyNodeAspectProperties::mGravityMode);

::pybind11::class_<dart::dynamics::BodyNode::Properties>(
m, "BodyNodeProperties")
.def(::pybind11::init<>())
.def(
::pybind11::init<
const dart::dynamics::detail::BodyNodeAspectProperties&>(),
::pybind11::arg("aspectProperties"));

::pybind11::class_<
dart::dynamics::TemplatedJacobianNode<dart::dynamics::BodyNode>,
dart::dynamics::JacobianNode,
Expand Down Expand Up @@ -774,6 +851,18 @@ void BodyNode(pybind11::module& m)
-> dart::dynamics::ConstSkeletonPtr {
return self->getSkeleton();
})
.def(
"getParentJoint",
+[](dart::dynamics::BodyNode* self) -> dart::dynamics::Joint* {
return self->getParentJoint();
},
::pybind11::return_value_policy::reference_internal)
.def(
"getParentBodyNode",
+[](dart::dynamics::BodyNode* self) -> dart::dynamics::BodyNode* {
return self->getParentBodyNode();
},
::pybind11::return_value_policy::reference_internal)
.def(
"getNumChildBodyNodes",
+[](const dart::dynamics::BodyNode* self) -> std::size_t {
Expand All @@ -797,6 +886,24 @@ void BodyNode(pybind11::module& m)
},
::pybind11::return_value_policy::reference_internal,
::pybind11::arg("index"))
.def(
"createShapeNode",
+[](dart::dynamics::BodyNode* self,
dart::dynamics::ShapePtr shape) -> dart::dynamics::ShapeNode* {
return self->createShapeNode(shape);
},
::pybind11::return_value_policy::reference_internal,
::pybind11::arg("shape"))
.def(
"createShapeNode",
+[](dart::dynamics::BodyNode* self,
dart::dynamics::ShapePtr shape,
const std::string& name) -> dart::dynamics::ShapeNode* {
return self->createShapeNode(shape, name);
},
::pybind11::return_value_policy::reference_internal,
::pybind11::arg("shape"),
::pybind11::arg("name"))
.def(
"getShapeNodes",
+[](dart::dynamics::BodyNode* self)
Expand Down
9 changes: 5 additions & 4 deletions python/dartpy/dynamics/FreeJoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,9 @@ namespace python {

void FreeJoint(pybind11::module& m)
{
::pybind11::class_<dart::dynamics::FreeJoint::Properties>(
::pybind11::class_<
dart::dynamics::FreeJoint::Properties,
dart::dynamics::GenericJoint<math::SE3Space>::Properties>(
m, "FreeJointProperties")
.def(::pybind11::init<>())
.def(
Expand All @@ -50,9 +52,8 @@ void FreeJoint(pybind11::module& m)

::pybind11::class_<
dart::dynamics::FreeJoint,
dart::dynamics::Joint
// dart::dynamics::GenericJoint<dart::math::SE3Space>
>(m, "FreeJoint")
dart::dynamics::GenericJoint<dart::math::SE3Space>,
std::shared_ptr<dart::dynamics::FreeJoint>>(m, "FreeJoint")
.def(
"getFreeJointProperties",
+[](const dart::dynamics::FreeJoint* self)
Expand Down
Loading

0 comments on commit 0ed33f0

Please sign in to comment.