Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ICAROS Python Bindings #48

Merged
merged 38 commits into from
Apr 1, 2021
Merged
Show file tree
Hide file tree
Changes from 20 commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
7e76de5
[WIP] Add ICAROS's adapy
egordon Feb 24, 2021
7097a8f
update dependencies in package.xml
egordon Feb 24, 2021
51d6fe9
Downgrade 3.8 -> 3.6 python version.
evil-sherdil Feb 26, 2021
b40932c
Fix rviz search in CMake.
evil-sherdil Feb 26, 2021
5bbeeed
Think we've found pybind11 the right way?
evil-sherdil Feb 26, 2021
7002618
Manage to fight to some odd bug in ada_py.cpp.
evil-sherdil Feb 27, 2021
fe49436
Revert to pbind11 2.2.
evil-sherdil Feb 27, 2021
bbbcb2c
Add two ICAROS methods for computing joint-space paths, but I don't like
evil-sherdil Feb 27, 2021
9dbad3f
Run make format for my OCD.
evil-sherdil Feb 27, 2021
8a419ec
Think I fixed ada_py -> compute_retime_path.
evil-sherdil Feb 28, 2021
53bb3b6
Add ICAROS executePreshape().
evil-sherdil Feb 28, 2021
fecacab
Holy cow, think it builds?
evil-sherdil Feb 28, 2021
bf923c9
Move to Python 2.7 because current stack.
evil-sherdil Feb 28, 2021
9fbe0e7
Fix exec waiting in bindings, clean up simple_trajectories.
evil-sherdil Feb 28, 2021
7fbecd6
Run make format.
evil-sherdil Mar 2, 2021
2075654
Fix wait() in execute_preshape().
evil-sherdil Mar 2, 2021
aba5d3f
Fixed warnings, now works and tested on real robot at PRL, see PR com…
egordon Mar 12, 2021
222fc4f
Resolved Hejia's Comments
egordon Mar 12, 2021
3d1c230
Removed unused Boost library requirement
egordon Mar 12, 2021
8b6ca6e
Moved python bindings to proper subfolder
egordon Mar 15, 2021
f02d54f
Address comments in PR
egordon Mar 16, 2021
2642059
Ran simple autopep8 on python scripts
egordon Mar 16, 2021
5f6b6ad
Renamed as per PR comments
egordon Mar 16, 2021
97892ad
Set default in python simple_trajectories to sim.
evil-sherdil Mar 26, 2021
ee5f712
Add python binding cpp files back to format search.
evil-sherdil Mar 27, 2021
42939c9
Run make format.
evil-sherdil Mar 27, 2021
cd3e5ec
Start rewriting ada_bindings.cpp without lambdas.
evil-sherdil Mar 28, 2021
53e2bb8
Finish rewriting Ada in ada_bindings.cpp without lambdas.
evil-sherdil Mar 28, 2021
2697e19
Finish re-writing ada_bindings.cpp without lambdas.
evil-sherdil Mar 28, 2021
6c5e7fd
Rewrite World bindings without lambdas.
evil-sherdil Mar 28, 2021
308bade
Finish re-writing aikido_bindings.cpp without lambdas.
evil-sherdil Mar 28, 2021
24f545f
Un-lambda SKeleton bindings.
evil-sherdil Mar 28, 2021
6a300e0
Finish rewriting dart_bindings.cpp to remove lambdas.
evil-sherdil Mar 28, 2021
606cc29
Finish rewriting ik_bindings.cpp without lambdas.
evil-sherdil Mar 28, 2021
b689e47
Finish rewriting TSR bindings without lambdas.
evil-sherdil Mar 28, 2021
e0cbb30
Spacing in python bindings.
evil-sherdil Mar 28, 2021
76936fe
Add comments for new cpp methods.
evil-sherdil Mar 28, 2021
42c8e36
Fix test_collisions.py.
evil-sherdil Mar 28, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 67 additions & 7 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,13 +1,41 @@
cmake_minimum_required(VERSION 3.10.0)
project(libada)
set(library_VERSION 0.2.0)
set(library_VERSION 0.3.0)

option(LIBADA_TREAT_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
set(CMAKE_CXX_STANDARD 14)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")

#================================================================================
# Python setup
#

set(ADAPY_PYTHON_VERSION 3.8)
find_package(PythonInterp ${ADAPY_PYTHON_VERSION})

if(PythonInterp_FOUND)
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c
"from distutils.sysconfig import get_python_lib;\
print(get_python_lib(plat_specific=True, prefix=''))"
OUTPUT_VARIABLE PYTHON_SITE_PACKAGES
OUTPUT_STRIP_TRAILING_WHITESPACE
)

find_package(PythonLibs ${ADAPY_PYTHON_VERSION})

# Find pybind11
# Needs to set PYBIND11_PYTHON_VERSION before finding pybind11
set(PYBIND11_PYTHON_VERSION ${ADAPY_PYTHON_VERSION} CACHE STRING "")
find_package(pybind11 2.2.0)
endif()

if(NOT pybind11_FOUND)
message(WARNING "Could not load pybind11. Cannot build python bindings.")
return()
endif()

#================================================================================
# CodeCov setup
#
Expand All @@ -28,7 +56,6 @@ include(ExternalProject)

find_package(DART 6.8.5 REQUIRED
COMPONENTS utils utils-urdf optimizer-nlopt

)

find_package(aikido 0.3.0 REQUIRED
Expand All @@ -47,6 +74,7 @@ find_package(aikido 0.3.0 REQUIRED
robot
statespace
io
rviz
)

find_package(ada_description REQUIRED)
Expand Down Expand Up @@ -75,11 +103,11 @@ endif()
#

set(sources
src/AdaFingerKinematicSimulationPositionCommandExecutor.cpp
src/AdaHandKinematicSimulationPositionCommandExecutor.cpp
src/AdaHand.cpp
src/Ada.cpp
src/util.cpp
src/libada/AdaFingerKinematicSimulationPositionCommandExecutor.cpp
src/libada/AdaHandKinematicSimulationPositionCommandExecutor.cpp
src/libada/AdaHand.cpp
src/libada/Ada.cpp
src/libada/util.cpp
)

add_library(libada SHARED ${sources})
Expand Down Expand Up @@ -116,6 +144,34 @@ target_link_libraries(libada
${urdf_LIBRARIES}
)

#=============================================================================
#Pybind
if(pybind11_FOUND)
pybind11_add_module(adapy
MODULE
python/adapy/adapy.cpp
python/adapy/ada_py.cpp
python/adapy/aikido_py.cpp
python/adapy/dart_py.cpp
python/adapy/pr_tsr_py.cpp
python/adapy/ik_py.cpp
)

target_include_directories(adapy
SYSTEM PUBLIC
${PYTHON_INCLUDE_DIRS}
${pybind11_INCLUDE_DIRS}
PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
)

target_link_libraries(adapy PUBLIC
libada
${libaikidopy_LIBRARIES}
${DART_LIBRARIES}
)
endif()

#================================================================================
# Testing
#
Expand Down Expand Up @@ -164,6 +220,10 @@ install(FILES "package.xml"
DESTINATION "share/libada")

#install(DIRECTORY resources DESTINATION share)
if(pybind11_FOUND)
install(TARGETS adapy
LIBRARY DESTINATION lib/python3/dist-packages)
endif()


#================================================================================
Expand Down
12 changes: 11 additions & 1 deletion include/libada/Ada.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ class Ada final : public aikido::robot::Robot
const dart::common::Uri& adaUrdfUri = defaultAdaUrdfUri,
const dart::common::Uri& adaSrdfUri = defaultAdaSrdfUri,
const std::string& endEffectorName = "j2n6s200_end_effector",
const std::string& armTrajectoryExecutorName = "trajectory_controller",
const std::string& armTrajectoryExecutorName = "rewd_trajectory_controller",
const ::ros::NodeHandle* node = nullptr,
aikido::common::RNG::result_type rngSeed = std::random_device{}(),
const dart::common::ResourceRetrieverPtr& retriever
Expand Down Expand Up @@ -176,6 +176,16 @@ class Ada final : public aikido::robot::Robot
// Runs step with current time.
void update();

aikido::trajectory::TrajectoryPtr computeRetimedJointSpacePath(
const aikido::statespace::dart::MetaSkeletonStateSpacePtr& stateSpace,
const std::vector<std::pair<double, Eigen::VectorXd>>& waypoints);

aikido::trajectory::TrajectoryPtr computeSmoothJointSpacePath(
const aikido::statespace::dart::MetaSkeletonStateSpacePtr& stateSpace,
const std::vector<std::pair<double, Eigen::VectorXd>>& waypoints,
const aikido::constraint::dart::CollisionFreePtr& collisionFree
= nullptr);

/// \copydoc Robot::planToConfiguration.
aikido::trajectory::TrajectoryPtr planToConfiguration(
const aikido::statespace::dart::MetaSkeletonStateSpacePtr& stateSpace,
Expand Down
2 changes: 2 additions & 0 deletions include/libada/AdaHand.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ class AdaHand : public aikido::robot::Hand
// Documentation inherited.
std::future<void> executePreshape(const std::string& preshapeName) override;

std::future<void> executePreshape(const Eigen::Vector2d& preshape);

// Documentation inherited.
void step(const std::chrono::system_clock::time_point& timepoint) override;

Expand Down
8 changes: 6 additions & 2 deletions include/libada/detail/Ada-impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,21 @@ aikido::trajectory::UniqueSplinePtr Ada::postProcessPath(
const Eigen::VectorXd& velocityLimits,
const Eigen::VectorXd& accelerationLimits)
{
// Don't plan above 70% hard velocity limit
// Unless requested explicitly
const double DEFAULT_LIMITS_BUFFER = 0.7;

bool velLimitsInvalid
= (velocityLimits.squaredNorm() == 0.0)
|| velocityLimits.size() != getVelocityLimits().size();
auto sentVelocityLimits
= velLimitsInvalid ? getVelocityLimits() : velocityLimits;
= velLimitsInvalid ? DEFAULT_LIMITS_BUFFER * getVelocityLimits() : velocityLimits;

bool accLimitsInvalid
= (accelerationLimits.squaredNorm() == 0.0)
|| accelerationLimits.size() != getAccelerationLimits().size();
auto sentAccelerationLimits
= accLimitsInvalid ? getAccelerationLimits() : accelerationLimits;
= accLimitsInvalid ? DEFAULT_LIMITS_BUFFER * getAccelerationLimits() : accelerationLimits;

return mRobot->postProcessPath<PostProcessor>(
sentVelocityLimits,
Expand Down
1 change: 1 addition & 0 deletions package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
<depend>roslib</depend>
<depend>srdfdom</depend>
<depend>urdf</depend>
<depend>roscpp_initializer</depend>

<!-- Workaround to build DART with optional features enabled. -->
<depend>nlopt</depend>
Expand Down
Loading