From ded8a81b55b049805f518efd9ca94e8512b4f1ce Mon Sep 17 00:00:00 2001 From: memnone Date: Mon, 23 Nov 2015 16:08:20 +0000 Subject: [PATCH] POrting to Linux and MacOS completed --- CMakeLists.txt | 242 +++++++++++++--- LICENSE | 340 +++++++++++++++++++++++ include/Spam/App/R2GPlanner/R2GPlanner.h | 25 +- src/Spam/App/R2GPlanner/R2GPlanner.cpp | 12 +- 4 files changed, 570 insertions(+), 49 deletions(-) create mode 100644 LICENSE diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e4d706..ff7cf5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,7 +57,7 @@ option(BUILD_SPAM_DATA_R2GTRAJECTORY "Build Spam data R2G trajectory library" YE ############################################################################### # Demos -option(BUILD_SPAM_DEMO_RAG "Build Spam demo reach-to-grasp library" YES) +option(BUILD_SPAM_DEMO_R2G "Build Spam demo reach-to-grasp library" YES) ############################################################################### @@ -319,6 +319,7 @@ IF (BUILD_SPAM_CORE) #optimized GraspGrasp${CMAKE_RELEASE_POSTFIX} debug GraspGrasp${CMAKE_DEBUG_POSTFIX} optimized GraspApp${CMAKE_RELEASE_POSTFIX} debug GraspApp${CMAKE_DEBUG_POSTFIX} optimized GraspActiveCtrl${CMAKE_RELEASE_POSTFIX} debug GraspActiveCtrl${CMAKE_DEBUG_POSTFIX} + optimized GraspDataPointsCurv${CMAKE_RELEASE_POSTFIX} debug GraspDataPointsCurv${CMAKE_DEBUG_POSTFIX} optimized GraspArmHandForce${CMAKE_RELEASE_POSTFIX} debug GraspArmHandForce${CMAKE_DEBUG_POSTFIX} #NxCharacter64 PhysXCooking64 PhysXCore64 PhysXLoader64 expat freeglut Gdiplus @@ -332,6 +333,8 @@ IF (BUILD_SPAM_CORE) optimized GolemUICtrl${CMAKE_RELEASE_POSTFIX} debug GolemUICtrl${CMAKE_DEBUG_POSTFIX} optimized GolemDeviceSM${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSM${CMAKE_DEBUG_POSTFIX} optimized GolemDeviceSingleCtrl${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSingleCtrl${CMAKE_DEBUG_POSTFIX} + optimized GolemDeviceMultiCtrl${CMAKE_RELEASE_POSTFIX} debug GolemDeviceMultiCtrl${CMAKE_DEBUG_POSTFIX} + ${CMAKE_DL_LIBS} optimized CamcalbCalb${CMAKE_RELEASE_POSTFIX} debug CamcalbCalb${CMAKE_DEBUG_POSTFIX} optimized CamcalbMatas${CMAKE_RELEASE_POSTFIX} debug CamcalbMatas${CMAKE_DEBUG_POSTFIX} ${PCL_LIBRARIES} ${Boost_LIBRARIES} ${OpenCV_LIBS} @@ -346,19 +349,21 @@ IF (BUILD_SPAM_CORE) optimized GraspCore${CMAKE_RELEASE_POSTFIX} debug GraspCore${CMAKE_DEBUG_POSTFIX} optimized GraspContact${CMAKE_RELEASE_POSTFIX} debug GraspContact${CMAKE_DEBUG_POSTFIX} #optimized GraspGrasp${CMAKE_RELEASE_POSTFIX} debug GraspGrasp${CMAKE_DEBUG_POSTFIX} - optimized GraspApp${CMAKE_RELEASE_POSTFIX} debug GraspApp${CMAKE_DEBUG_POSTFIX} - optimized GraspActiveCtrl${CMAKE_RELEASE_POSTFIX} debug GraspActiveCtrl${CMAKE_DEBUG_POSTFIX} - optimized GraspArmHandForce${CMAKE_RELEASE_POSTFIX} debug GraspArmHandForce${CMAKE_DEBUG_POSTFIX} + ##optimized GraspApp${CMAKE_RELEASE_POSTFIX} debug GraspApp${CMAKE_DEBUG_POSTFIX} + ##optimized GraspActiveCtrl${CMAKE_RELEASE_POSTFIX} debug GraspActiveCtrl${CMAKE_DEBUG_POSTFIX} + ##optimized GraspDataPointsCurv${CMAKE_RELEASE_POSTFIX} debug GraspDataPointsCurv${CMAKE_DEBUG_POSTFIX} + ##optimized GraspArmHandForce${CMAKE_RELEASE_POSTFIX} debug GraspArmHandForce${CMAKE_DEBUG_POSTFIX} ${Boost_LIBRARIES} optimized GolemDefs${CMAKE_RELEASE_POSTFIX} debug GolemDefs${CMAKE_DEBUG_POSTFIX} optimized GolemSys${CMAKE_RELEASE_POSTFIX} debug GolemSys${CMAKE_DEBUG_POSTFIX} optimized GolemTools${CMAKE_RELEASE_POSTFIX} debug GolemTools${CMAKE_DEBUG_POSTFIX} optimized GolemCtrl${CMAKE_RELEASE_POSTFIX} debug GolemCtrl${CMAKE_DEBUG_POSTFIX} - optimized GolemPlan${CMAKE_RELEASE_POSTFIX} debug GolemPlan${CMAKE_DEBUG_POSTFIX} - optimized GolemUICtrl${CMAKE_RELEASE_POSTFIX} debug GolemUICtrl${CMAKE_DEBUG_POSTFIX} - optimized GolemDeviceSM${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSM${CMAKE_DEBUG_POSTFIX} - optimized GolemDeviceSingleCtrl${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSingleCtrl${CMAKE_DEBUG_POSTFIX} + ##optimized GolemPlan${CMAKE_RELEASE_POSTFIX} debug GolemPlan${CMAKE_DEBUG_POSTFIX} + ##optimized GolemUICtrl${CMAKE_RELEASE_POSTFIX} debug GolemUICtrl${CMAKE_DEBUG_POSTFIX} + ##optimized GolemDeviceSM${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSM${CMAKE_DEBUG_POSTFIX} + ##optimized GolemDeviceSingleCtrl${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSingleCtrl${CMAKE_DEBUG_POSTFIX} ${CMAKE_DL_LIBS} + ##optimized GolemDeviceMultiCtrl${CMAKE_RELEASE_POSTFIX} debug GolemDeviceMultiCtrl${CMAKE_DEBUG_POSTFIX} optimized GolemMath${CMAKE_RELEASE_POSTFIX} debug GolemMath${CMAKE_DEBUG_POSTFIX} optimized GolemUI${CMAKE_RELEASE_POSTFIX} debug GolemUI${CMAKE_DEBUG_POSTFIX} GL @@ -411,7 +416,13 @@ IF (BUILD_SPAM_HBPLAN) if (WIN32) TARGET_LINK_LIBRARIES(SpamHBPlan SpamCore) elseif (UNIX) - TARGET_LINK_LIBRARIES(SpamHBPlan SpamCore) + TARGET_LINK_LIBRARIES(SpamHBPlan SpamCore + optimized GolemPlan${CMAKE_RELEASE_POSTFIX} debug GolemPlan${CMAKE_DEBUG_POSTFIX} + optimized GolemUICtrl${CMAKE_RELEASE_POSTFIX} debug GolemUICtrl${CMAKE_DEBUG_POSTFIX} + optimized GolemDeviceSM${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSM${CMAKE_DEBUG_POSTFIX} + optimized GolemDeviceSingleCtrl${CMAKE_RELEASE_POSTFIX} debug GolemDeviceSingleCtrl${CMAKE_DEBUG_POSTFIX} + optimized GolemDeviceMultiCtrl${CMAKE_RELEASE_POSTFIX} debug GolemDeviceMultiCtrl${CMAKE_DEBUG_POSTFIX} + ) endif() SET_PROPERTY(TARGET SpamHBPlan PROPERTY RELEASE_POSTFIX ${CMAKE_RELEASE_POSTFIX}) SET_PROPERTY(TARGET SpamHBPlan PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) @@ -460,7 +471,13 @@ IF (BUILD_SPAM_APP) if (WIN32) TARGET_LINK_LIBRARIES(SpamApp SpamHBPlan) elseif (UNIX) - TARGET_LINK_LIBRARIES(SpamApp SpamHBPlan) + TARGET_LINK_LIBRARIES(SpamApp SpamHBPlan + optimized GraspApp${CMAKE_RELEASE_POSTFIX} debug GraspApp${CMAKE_DEBUG_POSTFIX} + optimized GraspActiveCtrl${CMAKE_RELEASE_POSTFIX} debug GraspActiveCtrl${CMAKE_DEBUG_POSTFIX} + optimized GraspDataPointsCurv${CMAKE_RELEASE_POSTFIX} debug GraspDataPointsCurv${CMAKE_DEBUG_POSTFIX} + optimized GraspArmHandForce${CMAKE_RELEASE_POSTFIX} debug GraspArmHandForce${CMAKE_DEBUG_POSTFIX} + + ) endif() SET_PROPERTY(TARGET SpamApp PROPERTY RELEASE_POSTFIX ${CMAKE_RELEASE_POSTFIX}) @@ -651,14 +668,14 @@ ENDIF (BUILD_SPAM_DATA_R2GTRAJECTORY) # Spam demo # ############################################################################### -IF(BUILD_SPAM_DEMO_RAG) - SET(DEMO_RAG_SOURCES +IF(BUILD_SPAM_DEMO_R2G) + SET(DEMO_R2G_SOURCES ${PROJECT_ROOT}/src/Spam/Demo/R2GPlanner/R2GDemo.cpp ) - SET(DEMO_RAG_HEADERS + SET(DEMO_R2G_HEADERS ${PROJECT_ROOT}/include/Spam/Demo/R2GPlanner/R2GDemo.h ) - SET(DEMO_RAG_FILES + SET(DEMO_R2G_FILES ${PROJECT_ROOT}/resources/Spam/Demo/SpamDemoR2G_RobotBoris.xml ${PROJECT_ROOT}/resources/Spam/Demo/GraspCameraDepthSimDemoRag.xml ${PROJECT_ROOT}/resources/Spam/Demo/GraspCameraKinectDemoRag.xml @@ -675,24 +692,187 @@ IF(BUILD_SPAM_DEMO_RAG) ${PROJECT_ROOT}/resources/Spam/Demo/GraspDataVideoDemoRag.xml ) - ADD_EXECUTABLE(SpamDemoRag ${DEMO_RAG_SOURCES} ${DEMO_RAG_HEADERS} ${DEMO_RAG_FILES}) + ADD_EXECUTABLE(SpamDemoR2G ${DEMO_R2G_SOURCES} ${DEMO_R2G_HEADERS} ${DEMO_R2G_FILES}) if (WIN32) - SET_TARGET_PROPERTIES(SpamDemoRag PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}") + SET_TARGET_PROPERTIES(SpamDemoR2G PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS}") elseif (UNIX) - SET_TARGET_PROPERTIES(SpamDemoRag PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof") + SET_TARGET_PROPERTIES(SpamDemoR2G PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof") endif() - TARGET_LINK_LIBRARIES(SpamDemoRag SpamApp) - COPY_FILES(SpamDemoRag ${RUNTIME_OUTPUT_DIRECTORY} ${DEMO_RAG_FILES}) - SET_PROPERTY(TARGET SpamDemoRag PROPERTY RELEASE_POSTFIX ${CMAKE_RELEASE_POSTFIX}) - SET_PROPERTY(TARGET SpamDemoRag PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) + TARGET_LINK_LIBRARIES(SpamDemoR2G SpamApp) + COPY_FILES(SpamDemoR2G ${RUNTIME_OUTPUT_DIRECTORY} ${DEMO_R2G_FILES}) + SET_PROPERTY(TARGET SpamDemoR2G PROPERTY RELEASE_POSTFIX ${CMAKE_RELEASE_POSTFIX}) + SET_PROPERTY(TARGET SpamDemoR2G PROPERTY DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}) + + INSTALL(TARGETS SpamDemoR2G RUNTIME DESTINATION bin COMPONENT demo_execs) + INSTALL(FILES ${DEMO_R2G_HEADERS} DESTINATION include/Spam/Demo/Rag/ COMPONENT demo_headers) + INSTALL(FILES ${DEMO_R2G_SOURCES} DESTINATION src/Spam/Demo/Rag/ COMPONENT demo_sources) + INSTALL(FILES ${DEMO_R2G_FILES} DESTINATION bin COMPONENT demo_configs) + + SET_PROPERTY(TARGET SpamDemoR2G PROPERTY PROJECT_LABEL "Spam") + SET_PROPERTY(TARGET SpamDemoR2G PROPERTY FOLDER "Spam/Demo") + SOURCE_GROUP("Include Files" FILES ${DEMO_R2G_HEADERS}) + SOURCE_GROUP("Resource Files" FILES ${DEMO_R2G_FILES}) +ENDIF(BUILD_SPAM_DEMO_R2G) + +############################################################################### +# +# Packaging +# +############################################################################### + +# Windows 32/64 bit +if (WIN32) + OPTION(CPACK_USE_PACKAGE_SH "Build shell-installable package (.sh)." OFF) + OPTION(CPACK_USE_PACKAGE_TGZ "Build gziped tarball (.tar.gz)." OFF) + OPTION(CPACK_USE_PACKAGE_TBZ2 "Build bzip2'd tarball (.tar.bz2)." OFF) + OPTION(CPACK_USE_PACKAGE_DEB "Build DEB package (.deb)." OFF) + OPTION(CPACK_USE_PACKAGE_RPM "Build RPM package (.rpm)." OFF) + OPTION(CPACK_USE_PACKAGE_NSIS "Build NSIS package (.exe)." ON) +# Unix Linux/Apple +elseif (UNIX) + OPTION(CPACK_USE_PACKAGE_SH "Build shell-installable package (.sh)." OFF) + OPTION(CPACK_USE_PACKAGE_TGZ "Build gziped tarball (.tar.gz)." OFF) + OPTION(CPACK_USE_PACKAGE_TBZ2 "Build bzip2'd tarball (.tar.bz2)." OFF) + OPTION(CPACK_USE_PACKAGE_DEB "Build DEB package (.deb)." ON) + OPTION(CPACK_USE_PACKAGE_RPM "Build RPM package (.rpm)." OFF) + OPTION(CPACK_USE_PACKAGE_NSIS "Build NSIS package (.exe)." OFF) +endif() + +if (CPACK_USE_PACKAGE_SH OR CPACK_USE_PACKAGE_TGZ OR CPACK_USE_PACKAGE_TBZ2 OR CPACK_USE_PACKAGE_DEB OR CPACK_USE_PACKAGE_RPM OR CPACK_USE_PACKAGE_NSIS) + # components + SET(CPACK_COMPONENT_CORE_LIBS_DISPLAY_NAME "C++ libraries") + SET(CPACK_COMPONENT_CORE_HEADERS_DISPLAY_NAME "C++ headers") + SET(CPACK_COMPONENT_CORE_CONFIGS_DISPLAY_NAME "Configuration files") + SET(CPACK_COMPONENT_CORE_LIBS_DESCRIPTION "Spam Core C++ libraries") + SET(CPACK_COMPONENT_CORE_HEADERS_DESCRIPTION "Spam Core C++ headers") + SET(CPACK_COMPONENT_CORE_CONFIGS_DESCRIPTION "Spam Core Configuration files") + SET(CPACK_COMPONENT_CORE_LIBS_GROUP "Core") + SET(CPACK_COMPONENT_CORE_HEADERS_GROUP "Core") + SET(CPACK_COMPONENT_CORE_CONFIGS_GROUP "Core") + SET(CPACK_COMPONENT_GROUP_CORE_DESCRIPTION "Spam Core libraries") + + #SET(CPACK_COMPONENT_DATA_LIBS_DISPLAY_NAME "C++ libraries") + SET(CPACK_COMPONENT_DATA_HEADERS_DISPLAY_NAME "C++ headers") + SET(CPACK_COMPONENT_DATA_EXECS_DISPLAY_NAME "Executables") + SET(CPACK_COMPONENT_DATA_CONFIGS_DISPLAY_NAME "Configuration files") + SET(CPACK_COMPONENT_DATA_HEADERS_DESCRIPTION "Spam Data C++ headers") + SET(CPACK_COMPONENT_DATA_EXECS_DESCRIPTION "Spam Data executables") + SET(CPACK_COMPONENT_DATA_CONFIGS_DESCRIPTION "Spam Data configuration files") + SET(CPACK_COMPONENT_DATA_HEADERS_GROUP "Data") + SET(CPACK_COMPONENT_DATA_EXECS_GROUP "Data") + SET(CPACK_COMPONENT_DATA_CONFIGS_GROUP "Data") + SET(CPACK_COMPONENT_GROUP_DATA_DESCRIPTION "Spam Data plugins") + + SET(CPACK_COMPONENT_APPS_LIBS_DISPLAY_NAME "C++ libraries") + SET(CPACK_COMPONENT_APPS_HEADERS_DISPLAY_NAME "C++ headers") + SET(CPACK_COMPONENT_APPS_EXECS_DISPLAY_NAME "Executables") + SET(CPACK_COMPONENT_APPS_CONFIGS_DISPLAY_NAME "Configuration files") + SET(CPACK_COMPONENT_APPS_LIBS_DESCRIPTION "Spam Application C++ libraries") + SET(CPACK_COMPONENT_APPS_HEADERS_DESCRIPTION "Spam Application C++ headers") + SET(CPACK_COMPONENT_APPS_EXECS_DESCRIPTION "Spam Application executables") + SET(CPACK_COMPONENT_APPS_CONFIGS_DESCRIPTION "Spam Application configuration files") + SET(CPACK_COMPONENT_APPS_LIBS_GROUP "Applications") + SET(CPACK_COMPONENT_APPS_HEADERS_GROUP "Applications") + SET(CPACK_COMPONENT_APPS_EXECS_GROUP "Applications") + SET(CPACK_COMPONENT_APPS_CONFIGS_GROUP "Applications") + SET(CPACK_COMPONENT_GROUP_APPS_DESCRIPTION "Spam Applications") + + SET(CPACK_COMPONENT_DEMO_HEADERS_DISPLAY_NAME "C++ headers") + SET(CPACK_COMPONENT_DEMO_SOURCES_DISPLAY_NAME "C++ sources") + SET(CPACK_COMPONENT_DEMO_EXECS_DISPLAY_NAME "Executables") + SET(CPACK_COMPONENT_DEMO_CONFIGS_DISPLAY_NAME "Configuration files") + SET(CPACK_COMPONENT_DEMO_HEADERS_DESCRIPTION "Spam Demonstration C++ headers") + SET(CPACK_COMPONENT_DEMO_SOURCES_DESCRIPTION "Spam Demonstration C++ sources") + SET(CPACK_COMPONENT_DEMO_EXECS_DESCRIPTION "Spam Demonstration executables") + SET(CPACK_COMPONENT_DEMO_CONFIGS_DESCRIPTION "Spam Demonstration configuration files") + + # install types + SET(CPACK_ALL_INSTALL_TYPES Complete Developer) + + SET(CPACK_COMPONENT_CORE_LIBS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_CORE_HEADERS_INSTALL_TYPES Complete Developer) + #SET(CPACK_COMPONENT_CORE_EXECS_INSTALL_TYPES Complete) + SET(CPACK_COMPONENT_CORE_CONFIGS_INSTALL_TYPES Complete Developer) + + #SET(CPACK_COMPONENT_DATA_LIBS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_DATA_HEADERS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_DATA_EXECS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_DATA_CONFIGS_INSTALL_TYPES Complete Developer) + + SET(CPACK_COMPONENT_APPS_LIBS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_APPS_HEADERS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_APPS_EXECS_INSTALL_TYPES Complete) + SET(CPACK_COMPONENT_APPS_CONFIGS_INSTALL_TYPES Complete Developer) + + #SET(CPACK_COMPONENT_DEMO_LIBS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_DEMO_HEADERS_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_DEMO_SOURCES_INSTALL_TYPES Complete Developer) + SET(CPACK_COMPONENT_DEMO_EXECS_INSTALL_TYPES Complete) + SET(CPACK_COMPONENT_DEMO_CONFIGS_INSTALL_TYPES Complete Developer) + + # name + SET(CPACK_PACKAGE_NAME "${PROJECT_NAME}") + + # description + SET(CPACK_PACKAGE_VENDOR "Claudio Zito") + SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simultaneous Perception and Manipulation (SPAM) framework") + SET(CPACK_PACKAGE_DESCRIPTION_FILE "${PROJECT_ROOT}/Readme.md") + SET(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_ROOT}/LICENSE") + set(CPACK_PACKAGE_CONTACT "Claudio Zito ") + + # version + SET(CPACK_PACKAGE_VERSION_2 "1" CACHE STRING "version 2.0") + SET(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_2}") + + if (WIN32) + if(X86_64) + SET(CPACK_ARCH "x64") + else(X86_64) + SET(CPACK_ARCH "x86") + endif(X86_64) + elseif (UNIX) + if(X86_64) + SET(CPACK_ARCH "amd64") + else(X86_64) + SET(CPACK_ARCH "i386") + endif(X86_64) + SET(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + endif () + SET(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-v${CPACK_PACKAGE_VERSION}-${CPACK_ARCH}") + #SET(CPACK_PACKAGE_INSTALL_DIRECTORY "${PROJECT_NAME}") + SET(CPACK_PACKAGE_INSTALL_DIRECTORY "Spam") - INSTALL(TARGETS SpamDemoRag RUNTIME DESTINATION bin COMPONENT demo_execs) - INSTALL(FILES ${DEMO_RAG_HEADERS} DESTINATION include/Spam/Demo/Rag/ COMPONENT demo_headers) - INSTALL(FILES ${DEMO_RAG_SOURCES} DESTINATION src/Spam/Demo/Rag/ COMPONENT demo_sources) - INSTALL(FILES ${DEMO_RAG_FILES} DESTINATION bin COMPONENT demo_configs) - - SET_PROPERTY(TARGET SpamDemoRag PROPERTY PROJECT_LABEL "Spam") - SET_PROPERTY(TARGET SpamDemoRag PROPERTY FOLDER "Spam/Demo") - SOURCE_GROUP("Include Files" FILES ${DEMO_RAG_HEADERS}) - SOURCE_GROUP("Resource Files" FILES ${DEMO_RAG_FILES}) -ENDIF(BUILD_SPAM_DEMO_RAG) + # Package generators + if (CPACK_USE_PACKAGE_SH) + LIST(APPEND CPACK_GENERATOR "STGZ") + endif () + if (CPACK_USE_PACKAGE_TGZ) + LIST(APPEND CPACK_GENERATOR "TGZ") + endif () + if (CPACK_USE_PACKAGE_TBZ2) + LIST(APPEND CPACK_GENERATOR "TBZ2") + endif () + if (CPACK_USE_PACKAGE_DEB) + LIST(APPEND CPACK_GENERATOR "DEB") + SET(CPACK_DEB_COMPONENT_INSTALL ON) + SET(CPACK_DEBIAN_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") + SET(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "${CPACK_ARCH}") + SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + SET(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) + endif () + if (CPACK_USE_PACKAGE_RPM) + LIST(APPEND CPACK_GENERATOR "RPM") + SET(CPACK_RPM_COMPONENT_INSTALL ON) + SET(CPACK_RPM_PACKAGE_NAME "${CPACK_PACKAGE_NAME}") + SET(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) + endif () + if (CPACK_USE_PACKAGE_NSIS) + LIST(APPEND CPACK_GENERATOR "NSIS") + SET(CPACK_NSIS_COMPONENT_INSTALL ON) + SET(CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_NAME}") + SET(CPACK_COMPONENTS_ALL_IN_ONE_PACKAGE ON) + endif () + + # CPack + INCLUDE(CPack) +endif () diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8cdb845 --- /dev/null +++ b/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + {description} + Copyright (C) {year} {fullname} + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + {signature of Ty Coon}, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. + diff --git a/include/Spam/App/R2GPlanner/R2GPlanner.h b/include/Spam/App/R2GPlanner/R2GPlanner.h index f987f99..4a169f9 100644 --- a/include/Spam/App/R2GPlanner/R2GPlanner.h +++ b/include/Spam/App/R2GPlanner/R2GPlanner.h @@ -216,7 +216,7 @@ class R2GPlanner : public PosePlanner, protected golem::Profile::CallbackDist { template inline _Real N(const _Real x, const _Real stdev) { const _Real norm = golem::numeric_const<_Real>::ONE / (stdev*golem::Math::sqrt(2 * golem::numeric_const<_Real>::PI)); return norm*golem::Math::exp(-.5*golem::Math::sqr(_Real(x) / _Real(stdev))); // gaussian - } + }; // computes guassian on a vector template inline std::vector<_Real> N(_Ptr begin, _Ptr end, const size_t dim, const _Real stdev) { std::vector<_Real> output; @@ -226,7 +226,7 @@ class R2GPlanner : public PosePlanner, protected golem::Profile::CallbackDist { output[idx++] = N(*i, stdev); } return output; - } + }; /** Input force at sensor, sequence */ std::vector forceInpSensorSeq; @@ -280,15 +280,15 @@ class R2GPlanner : public PosePlanner, protected golem::Profile::CallbackDist { /** Select index */ template void selectIndex(const _Seq& seq, _Index& index, const std::string& name) { if (seq.empty()) - throw Cancel("Empty!"); + throw grasp::Cancel("Empty!"); // select index within the range std::stringstream str; golem::Math::clamp(index, (_Index)1, (_Index)seq.size()); str << "Enter " << name << " index <1.." << seq.size() << ">: "; readNumber(str.str().c_str(), index); if (size_t(index) < 1 || size_t(index) > seq.size()) - throw Cancel("Invalid index"); - } + throw grasp::Cancel("Invalid index"); + }; bool printing; @@ -324,16 +324,17 @@ class R2GPlanner : public PosePlanner, protected golem::Profile::CallbackDist { size_t iterations; /** Checks the validity of a sample */ - template bool isValidSample(const grasp::RBPose::Sample &sample, _PTR begin, _PTR end, golem::Real eps = golem::REAL_EPS) const { +// template bool isValidSample(const grasp::RBPose::Sample &sample, _PTR begin, _PTR end, golem::Real eps = golem::REAL_EPS) const { // std::printf("particle frame<%.4f,%.4f,%.4f> w=%.5f\n", sample.p.x, sample.p.y, sample.p.z, sample.weight); //if (sample.weight < theta) // return false; - for (_PTR i = begin; i != end; ++i) { - if (pRBPose->distance(sample, *i) < eps) - return false; - } - return true; - } +// for (_PTR i = begin; i != end; ++i) { + //if (pRBPose->distance(sample, *i) < eps) +// if (grasp::RBPose::Sample::distance(sample, *i) < eps) +// return false; +// } +// return true; +// }; /** Get current points transformed */ // grasp::Cloud::PointSeqMap::iterator getTrnPoints(Data::Map::iterator dataPtr, const golem::Mat34 &trn); diff --git a/src/Spam/App/R2GPlanner/R2GPlanner.cpp b/src/Spam/App/R2GPlanner/R2GPlanner.cpp index 5148f2e..37b003a 100644 --- a/src/Spam/App/R2GPlanner/R2GPlanner.cpp +++ b/src/Spam/App/R2GPlanner/R2GPlanner.cpp @@ -596,14 +596,14 @@ bool R2GPlanner::create(const Desc& desc) { // grasp enableForceReading = false; //grasp::to(dataPtr)->actionType = action::GRASP; - context.write("execute trajectory (%s)\n", actionToString(grasp::to(dataCurrentPtr)->actionType)); + context.write("execute trajectory (%s)\n", actionToString(grasp::to(dataCurrentPtr)->actionType).c_str()); if (!execute(dataCurrentPtr, inp)) return; // lifting enableForceReading = false; //grasp::to(dataPtr)->actionType = action::IG_PLAN_LIFT; - context.write("execute trajectory (%s)\n", actionToString(grasp::to(dataCurrentPtr)->actionType)); + context.write("execute trajectory (%s)\n", actionToString(grasp::to(dataCurrentPtr)->actionType).c_str()); if (execute(dataCurrentPtr, inp)) return; @@ -784,7 +784,7 @@ bool R2GPlanner::create(const Desc& desc) { break; results = grasp::makeString("%u\t%u\t%u", modelViews, queryViews, trial + 1); - context.write("execute %s trajectory (%s)\n", strategy(grasp::to(dataCurrentPtr)->stratType).c_str(), actionToString(grasp::to(dataCurrentPtr)->actionType)); + context.write("execute %s trajectory (%s)\n", strategy(grasp::to(dataCurrentPtr)->stratType).c_str(), actionToString(grasp::to(dataCurrentPtr)->actionType).c_str()); logFile << grasp::makeString("Strategy: %s\n", strategy(grasp::to(dataCurrentPtr)->stratType).c_str()); // Setup trial data TrialData::Ptr tdata = createTrialData(); @@ -2224,7 +2224,7 @@ bool R2GPlanner::execute(data::Data::Map::iterator dataPtr, grasp::Waypoint::Seq // open hand and release the object // pre-grasp pose w.r.t. query frame - std::Sleep(1000); + ::sleep(1000); Controller::State openfingers = lookupState(); Controller::State cnow = lookupState(); for (auto i = handInfo.getChains().begin(); i != handInfo.getChains().end(); ++i) { @@ -2490,12 +2490,12 @@ void R2GPlanner::updateAndResample(Data::Map::iterator dataPtr) { recordingWaitToStart(); printf("Recording started\n"); - std::Sleep(1000); + ::sleep(1000); pBelief->createUpdate(collisionPtr, w, triggeredGuards, trialPtr != trialDataMap.end() ? grasp::to(trialPtr)->queryPointsTrn : grasp::RBCoord()); // render the mismatch between estimate and ground truth before resampling to(dataCurrentPtr)->createRender(); - std::Sleep(5000); + ::sleep(5000); context.debug("resample (wheel algorithm)...\n");