diff --git a/external-control/CMakeLists.txt b/external-control/CMakeLists.txt index 2d678022bf6..ae4c014fa8a 100644 --- a/external-control/CMakeLists.txt +++ b/external-control/CMakeLists.txt @@ -3,10 +3,9 @@ set(CMAKE_CXX_STANDARD 17) project(external-control CXX) -set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") -set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") +#set(INSTALL_LIB_DIR "lib" CACHE PATH "Installation directory for libraries") +#set(INSTALL_INC_DIR "include" CACHE PATH "Installation directory for headers") -find_package(Catch2 2 REQUIRED) find_package(Eigen3 REQUIRED) include_directories(${EIGEN3_INCLUDE_DIR}) @@ -26,11 +25,8 @@ target_link_libraries(external-wrapper PUBLIC Eigen3::Eigen) install(TARGETS external-wrapper - EXPORT targets - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - RUNTIME DESTINATION bin) -install(DIRECTORY - src/main/cpp/ - DESTINATION "${INSTALL_INC_DIR}" - FILES_MATCHING PATTERN "*.hpp") \ No newline at end of file + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + INCLUDES DESTINATION include) +install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.hpp") diff --git a/external-control/src/main/cpp/controllers/constant-position-controller.cpp b/external-control/src/main/cpp/controllers/constant-position-controller.cpp index b3fc2a6dea7..8fa31142882 100644 --- a/external-control/src/main/cpp/controllers/constant-position-controller.cpp +++ b/external-control/src/main/cpp/controllers/constant-position-controller.cpp @@ -7,10 +7,10 @@ namespace ihmc ConstantPositionController::ConstantPositionController(const double default_stiffness, const double default_damping, const int number_of_joints) { number_of_joints_ = number_of_joints; - desired_joint_velocities_ = Eigen::VectorXd(number_of_joints_); - desired_joint_torques_ = Eigen::VectorXd(number_of_joints_); - desired_joint_stiffnesses_ = Eigen::VectorXd(number_of_joints_); - desired_joint_damping_ = Eigen::VectorXd(number_of_joints_); + desired_joint_velocities_.resize(number_of_joints_); + desired_joint_torques_.resize(number_of_joints_); + desired_joint_stiffnesses_.resize(number_of_joints_); + desired_joint_damping_.resize(number_of_joints_); desired_joint_velocities_.setZero(); desired_joint_torques_.setZero(); diff --git a/external-control/src/main/cpp/external-control.cpp b/external-control/src/main/cpp/external-control.cpp index 68090c896e7..7d2b0421a43 100644 --- a/external-control/src/main/cpp/external-control.cpp +++ b/external-control/src/main/cpp/external-control.cpp @@ -8,10 +8,10 @@ namespace ihmc ExternalControlImpl::ExternalControlImpl(const double default_stiffness, const double default_damping, const int number_of_joints) { constant_position_controller_ = ConstantPositionController(default_stiffness, default_damping, number_of_joints); - desired_state_data_ = Eigen::VectorXd(13 + 2 * number_of_joints); - desired_control_data_ = Eigen::VectorXd(number_of_joints); - p_gains_ = Eigen::VectorXd(number_of_joints); - d_gains_ = Eigen::VectorXd(number_of_joints); + desired_state_data_.resize(13 + 2 * number_of_joints); + desired_control_data_.resize(number_of_joints); + p_gains_.resize(number_of_joints); + d_gains_.resize(number_of_joints); number_of_joints_ = number_of_joints; } diff --git a/external-control/src/main/java/us/ihmc/externalControl/ExternalControllerState.java b/external-control/src/main/java/us/ihmc/externalControl/ExternalControllerState.java index 76f3e475d3c..0fcfb226467 100644 --- a/external-control/src/main/java/us/ihmc/externalControl/ExternalControllerState.java +++ b/external-control/src/main/java/us/ihmc/externalControl/ExternalControllerState.java @@ -53,6 +53,8 @@ public ExternalControllerState(String namePrefix, blendRatioCurrentValue = new YoDouble(namePrefix + "BlendRatioCurrentValue", registry); + ExternalWrapperNativeLibrary.load(); + externalControl = new ExternalControl(controllerToolbox.getFullRobotModel().getRootBody(), controlledJoints, 100.0, 25.0); lowLevelOneDoFJointDesiredDataHolder.registerJointsWithEmptyData(controlledJoints); diff --git a/external-control/src/main/java/us/ihmc/externalControl/ExternalWrapperNativeLibrary.java b/external-control/src/main/java/us/ihmc/externalControl/ExternalWrapperNativeLibrary.java new file mode 100644 index 00000000000..83673fd10c6 --- /dev/null +++ b/external-control/src/main/java/us/ihmc/externalControl/ExternalWrapperNativeLibrary.java @@ -0,0 +1,53 @@ +package us.ihmc.externalControl; + +import us.ihmc.log.LogTools; +import us.ihmc.tools.nativelibraries.NativeLibraryDescription; +import us.ihmc.tools.nativelibraries.NativeLibraryLoader; +import us.ihmc.tools.nativelibraries.NativeLibraryWithDependencies; + +public class ExternalWrapperNativeLibrary implements NativeLibraryDescription +{ + @Override + public String getPackage(OperatingSystem operatingSystem, Architecture architecture) + { + String architecturePackage = ""; + if (architecture == Architecture.x64) + { + architecturePackage = switch (operatingSystem) + { + case LINUX64 -> "linux-x86_64"; + default -> "unknown"; + }; + } + + return "externalWrapper." + architecturePackage; + } + + @Override + public NativeLibraryWithDependencies getLibraryWithDependencies(OperatingSystem operatingSystem, Architecture architecture) + { + switch (operatingSystem) + { + case LINUX64: + return NativeLibraryWithDependencies.fromFilename("jniExternalWrapper.so", + "libexternal-wrapper.so"); + default: + break; + } + + LogTools.warn("Unsupported platform: " + operatingSystem.name() + "-" + architecture.name()); + return null; + } + + private static boolean loaded = false; + + public static boolean load() + { + if (!loaded) + { + ExternalWrapperNativeLibrary nativeLibrary = new ExternalWrapperNativeLibrary(); + loaded = NativeLibraryLoader.loadLibrary(nativeLibrary); + } + return loaded; + } +} diff --git a/external-control/src/main/java/us/ihmc/externalControl/presets/ExternalControlInfoMapper.java b/external-control/src/main/java/us/ihmc/externalControl/presets/ExternalControlInfoMapper.java index 259424f33a2..48ffc40b5eb 100644 --- a/external-control/src/main/java/us/ihmc/externalControl/presets/ExternalControlInfoMapper.java +++ b/external-control/src/main/java/us/ihmc/externalControl/presets/ExternalControlInfoMapper.java @@ -13,7 +13,7 @@ include = {"external-control.hpp"}, linkpath = "../lib", link = "external-wrapper", - preload = {"external-wrapper", "jniExternalWrapper"} + preload = {"external-wrapper", "jniExternalControlWrapper"} ), target = "us.ihmc.externalControl.ExternalControlWrapper" ) diff --git a/external-control/src/main/resources/externalControl/linux-x86_64/libexternal-wrapper.so b/external-control/src/main/resources/externalControl/linux-x86_64/libexternal-wrapper.so index 9d5183ca1b8..522a4ee6900 100644 --- a/external-control/src/main/resources/externalControl/linux-x86_64/libexternal-wrapper.so +++ b/external-control/src/main/resources/externalControl/linux-x86_64/libexternal-wrapper.so @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bb201f02da858f8f08c4a417f0270b5e781bb8c9f5bd1806bda3e91565e96528 +oid sha256:c9207884c09a6dc6fbbe436d975afea627862dff67f98e57c622a57322d1ad91 size 61088