├── .gitignore ├── CMakeLists.txt ├── LICENSE ├── README.md ├── _config.yml ├── launch ├── collision_viewer.launch ├── joint_state_pub.launch ├── preprocessing.launch ├── relaxed_ik.launch ├── robot_state_pub.launch ├── sample.launch └── urdf_viewer.launch ├── msg ├── EEPoseGoals.msg └── JointAngles.msg ├── package.xml ├── rviz ├── collision_viewer.rviz └── joint_viewer.rviz ├── setup.py └── src ├── .idea ├── misc.xml ├── modules.xml ├── src.iml └── workspace.xml ├── RelaxedIK ├── .idea │ ├── RelaxedIK.iml │ ├── misc.xml │ ├── modules.xml │ └── workspace.xml ├── Config │ ├── __init__.py │ └── collision_example.yaml ├── GROOVE │ ├── .idea │ │ ├── GROOVE.iml │ │ ├── misc.xml │ │ ├── modules.xml │ │ ├── vcs.xml │ │ └── workspace.xml │ ├── GROOVE_Utils │ │ ├── __init__.py │ │ ├── __init__.pyc │ │ ├── colors.py │ │ ├── colors.pyc │ │ ├── constraint.py │ │ ├── constraint.pyc │ │ ├── groove_type.py │ │ ├── groove_type.pyc │ │ ├── objective.py │ │ ├── objective.pyc │ │ ├── vars.py │ │ ├── vars.pyc │ │ ├── weight_function.py │ │ └── weight_function.pyc │ ├── README.md │ ├── __init__.py │ ├── __init__.pyc │ ├── groove.py │ ├── groove.pyc │ └── setup_cython.py ├── GROOVE_RelaxedIK │ ├── __init__.py │ ├── __init__.pyc │ ├── boost │ │ ├── Makefile │ │ ├── __init__.py │ │ ├── objectives.cpp │ │ └── objectives_ext.so │ ├── objectives_ext.so │ ├── relaxedIK_constraint.py │ ├── relaxedIK_constraint.pyc │ ├── relaxedIK_objective.py │ ├── relaxedIK_objective.pyc │ ├── relaxedIK_vars.py │ ├── relaxedIK_vars.pyc │ ├── relaxedIK_weight_function.py │ └── relaxedIK_weight_function.pyc ├── LICENSE ├── README.md ├── Spacetime │ ├── __init__.py │ ├── __init__.pyc │ ├── adInterface.py │ ├── adInterface.pyc │ ├── arm.py │ ├── arm.pyc │ ├── boost │ │ ├── Arm.cpp │ │ ├── Arm_ext.so │ │ ├── Makefile │ │ ├── __init__.py │ │ ├── hello.so │ │ ├── test.cpp │ │ └── world.cpp │ ├── robot.py │ ├── robot.pyc │ ├── robot_function.py │ ├── robot_function.pyc │ ├── setup_cython.py │ └── tester.py ├── Utils │ ├── __init__.py │ ├── __init__.pyc │ ├── _transformations.so │ ├── collision_graph.py │ ├── collision_graph.pyc │ ├── collision_utils.py │ ├── collision_utils.pyc │ ├── colors.py │ ├── colors.pyc │ ├── config_engine.py │ ├── config_engine.pyc │ ├── filter.py │ ├── geometry_utils.py │ ├── geometry_utils.pyc │ ├── ik_task.py │ ├── ik_task.pyc │ ├── joint_utils.py │ ├── joint_utils.pyc │ ├── neural_net_trainer.py │ ├── neural_net_trainer.pyc │ ├── tf_fast.py │ ├── tf_fast.pyc │ ├── transformations.c │ ├── transformations.py │ ├── transformations.pyc │ ├── urdf_load.py │ └── urdf_load.pyc ├── __init__.py ├── __init__.pyc ├── relaxedIK.py ├── relaxedIK.pyc └── urdfs │ ├── hubo_description.urdf │ ├── mico.urdf │ └── ur5.urdf ├── broadcaster.py ├── collision_viewer.py ├── preprocessing.py ├── relaxed_ik_node.py ├── sample.py ├── start_here.py └── urdf_viewer.py /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | # *.so 8 | 9 | start_here_*.py 10 | keras_test2.py 11 | keras_test.py 12 | sample2.py 13 | *.config 14 | collision_hubo.yaml 15 | collision_hubo_l.yaml 16 | collision_hubo_r.yaml 17 | 18 | # Distribution / packaging 19 | .Python 20 | build/ 21 | develop-eggs/ 22 | dist/ 23 | downloads/ 24 | eggs/ 25 | .eggs/ 26 | lib/ 27 | lib64/ 28 | parts/ 29 | sdist/ 30 | var/ 31 | wheels/ 32 | *.egg-info/ 33 | .installed.cfg 34 | *.egg 35 | MANIFEST 36 | 37 | # PyInstaller 38 | # Usually these files are written by a python script from a template 39 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 40 | *.manifest 41 | *.spec 42 | 43 | # Installer logs 44 | pip-log.txt 45 | pip-delete-this-directory.txt 46 | 47 | # Unit test / coverage reports 48 | htmlcov/ 49 | .tox/ 50 | .coverage 51 | .coverage.* 52 | .cache 53 | nosetests.xml 54 | coverage.xml 55 | *.cover 56 | .hypothesis/ 57 | .pytest_cache/ 58 | 59 | # Translations 60 | *.mo 61 | *.pot 62 | 63 | # Django stuff: 64 | *.log 65 | local_settings.py 66 | db.sqlite3 67 | 68 | # Flask stuff: 69 | instance/ 70 | .webassets-cache 71 | 72 | # Scrapy stuff: 73 | .scrapy 74 | 75 | # Sphinx documentation 76 | docs/_build/ 77 | 78 | # PyBuilder 79 | target/ 80 | 81 | # Jupyter Notebook 82 | .ipynb_checkpoints 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # celery beat schedule file 88 | celerybeat-schedule 89 | 90 | # SageMath parsed files 91 | *.sage.py 92 | 93 | # Environments 94 | .env 95 | .venv 96 | env/ 97 | venv/ 98 | ENV/ 99 | env.bak/ 100 | venv.bak/ 101 | 102 | # Spyder project settings 103 | .spyderproject 104 | .spyproject 105 | 106 | # Rope project settings 107 | .ropeproject 108 | 109 | # mkdocs documentation 110 | /site 111 | 112 | # mypy 113 | .mypy_cache/ 114 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(relaxed_ik) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS std_msgs message_generation geometry_msgs) 11 | 12 | ## System dependencies are found with CMake's conventions 13 | # find_package(Boost REQUIRED COMPONENTS system) 14 | 15 | 16 | ## Uncomment this if the package has a setup.py. This macro ensures 17 | ## modules and global scripts declared therein get installed 18 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 19 | catkin_python_setup() 20 | 21 | ################################################ 22 | ## Declare ROS messages, services and actions ## 23 | ################################################ 24 | 25 | ## To declare and build messages, services or actions from within this 26 | ## package, follow these steps: 27 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 28 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 29 | ## * In the file package.xml: 30 | ## * add a build_depend tag for "message_generation" 31 | ## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET 32 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 33 | ## but can be declared for certainty nonetheless: 34 | ## * add a run_depend tag for "message_runtime" 35 | ## * In this file (CMakeLists.txt): 36 | ## * add "message_generation" and every package in MSG_DEP_SET to 37 | ## find_package(catkin REQUIRED COMPONENTS ...) 38 | ## * add "message_runtime" and every package in MSG_DEP_SET to 39 | ## catkin_package(CATKIN_DEPENDS ...) 40 | ## * uncomment the add_*_files sections below as needed 41 | ## and list every .msg/.srv/.action file to be processed 42 | ## * uncomment the generate_messages entry below 43 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 44 | 45 | ## Generate messages in the 'msg' folder 46 | # add_message_files( 47 | # FILES 48 | # Message1.msg 49 | # Message2.msg 50 | # ) 51 | add_message_files( 52 | FILES 53 | EEPoseGoals.msg 54 | JointAngles.msg 55 | ) 56 | 57 | ## Generate services in the 'srv' folder 58 | # add_service_files( 59 | # FILES 60 | # Service1.srv 61 | # Service2.srv 62 | # ) 63 | 64 | ## Generate actions in the 'action' folder 65 | # add_action_files( 66 | # FILES 67 | # Action1.action 68 | # Action2.action 69 | # ) 70 | 71 | ## Generate added messages and services with any dependencies listed here 72 | # generate_messages( 73 | # DEPENDENCIES 74 | # std_msgs # Or other packages containing msgs 75 | # ) 76 | generate_messages( 77 | DEPENDENCIES 78 | geometry_msgs # Or other packages containing msgs 79 | std_msgs 80 | ) 81 | 82 | ################################################ 83 | ## Declare ROS dynamic reconfigure parameters ## 84 | ################################################ 85 | 86 | ## To declare and build dynamic reconfigure parameters within this 87 | ## package, follow these steps: 88 | ## * In the file package.xml: 89 | ## * add a build_depend and a run_depend tag for "dynamic_reconfigure" 90 | ## * In this file (CMakeLists.txt): 91 | ## * add "dynamic_reconfigure" to 92 | ## find_package(catkin REQUIRED COMPONENTS ...) 93 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 94 | ## and list every .cfg file to be processed 95 | 96 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 97 | # generate_dynamic_reconfigure_options( 98 | # cfg/DynReconf1.cfg 99 | # cfg/DynReconf2.cfg 100 | # ) 101 | 102 | ################################### 103 | ## catkin specific configuration ## 104 | ################################### 105 | ## The catkin_package macro generates cmake config files for your package 106 | ## Declare things to be passed to dependent projects 107 | ## INCLUDE_DIRS: uncomment this if your package contains header files 108 | ## LIBRARIES: libraries you create in this project that dependent projects also need 109 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 110 | ## DEPENDS: system dependencies of this project that dependent projects also need 111 | catkin_package( 112 | # INCLUDE_DIRS include 113 | # LIBRARIES RelaxedIK-MC 114 | # CATKIN_DEPENDS other_catkin_pkg 115 | # DEPENDS system_lib 116 | ) 117 | 118 | ########### 119 | ## Build ## 120 | ########### 121 | 122 | ## Specify additional locations of header files 123 | ## Your package locations should be listed before other locations 124 | include_directories( 125 | # include 126 | # ${catkin_INCLUDE_DIRS} 127 | ) 128 | 129 | ## Declare a C++ library 130 | # add_library(${PROJECT_NAME} 131 | # src/${PROJECT_NAME}/RelaxedIK-MC.cpp 132 | # ) 133 | 134 | ## Add cmake target dependencies of the library 135 | ## as an example, code may need to be generated before libraries 136 | ## either from message generation or dynamic reconfigure 137 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 138 | 139 | ## Declare a C++ executable 140 | ## With catkin_make all packages are built within a single CMake context 141 | ## The recommended prefix ensures that target names across packages don't collide 142 | # add_executable(${PROJECT_NAME}_node src/RelaxedIK-MC_node.cpp) 143 | 144 | ## Rename C++ executable without prefix 145 | ## The above recommended prefix causes long target names, the following renames the 146 | ## target back to the shorter version for ease of user use 147 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 148 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 149 | 150 | ## Add cmake target dependencies of the executable 151 | ## same as for the library above 152 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 153 | 154 | ## Specify libraries to link a library or executable target against 155 | # target_link_libraries(${PROJECT_NAME}_node 156 | # ${catkin_LIBRARIES} 157 | # ) 158 | 159 | ############# 160 | ## Install ## 161 | ############# 162 | 163 | # all install targets should use catkin DESTINATION variables 164 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 165 | 166 | ## Mark executable scripts (Python etc.) for installation 167 | ## in contrast to setup.py, you can choose the destination 168 | # install(PROGRAMS 169 | # scripts/my_python_script 170 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 171 | # ) 172 | 173 | ## Mark executables and/or libraries for installation 174 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node 175 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 176 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 177 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 178 | # ) 179 | 180 | ## Mark cpp header files for installation 181 | # install(DIRECTORY include/${PROJECT_NAME}/ 182 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 183 | # FILES_MATCHING PATTERN "*.h" 184 | # PATTERN ".svn" EXCLUDE 185 | # ) 186 | 187 | ## Mark other files for installation (e.g. launch and bag files, etc.) 188 | # install(FILES 189 | # # myfile1 190 | # # myfile2 191 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 192 | # ) 193 | 194 | ############# 195 | ## Testing ## 196 | ############# 197 | 198 | ## Add gtest based cpp test target and link libraries 199 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_RelaxedIK-MC.cpp) 200 | # if(TARGET ${PROJECT_NAME}-test) 201 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 202 | # endif() 203 | 204 | ## Add folders to be run by python nosetests 205 | # catkin_add_nosetests(test) 206 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 UW Graphics Group 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # relaxed_ik 2 | 3 | :pushpin: We provide a seperate repository called [**relaxed_ik_core**](https://github.com/uwgraphics/relaxed_ik_core), which is complitable with more recent Rust version and Ubuntu 20.04 / ROS Noetic. 4 | 5 | Development update 10/26/21 6 | 7 | Hi all, we are excited to share some updates to our relaxed_ik library. Apologies for the delay, I have been attending to many unforeseen circumstances over the past few months. 8 | 9 | * The original RelaxedIK code was written as somewhat messy “research code” in 2016, and each iteration of the code after that focused on code cleanup and computation speed (e.g., the port to Julia, and subsequently to Rust). This long-term development on a single codebase has been nice for some use cases, e.g., everything is connected well with ROS, everything has maintained compatibility with legacy code in Python and Julia, etc, but this large monolithic structure has also made it difficult to port the RelaxedIK solver to other applications in a lightweight manner. Thus, much of our recent development has focused on improving the portability of RelaxedIK. To this end, we introduce a new repository called [relaxed_ik_core](https://github.com/uwgraphics/relaxed_ik_core) which contains just the central kernel of the RelaxedIK runtime without the extra ROS and robot setup baggage. The relaxed_ik_core repo comes prepackaged with a common set of pre-compiled and pre-trained robot models (UR5, Sawyer, etc.), allowing users with one of those robots to completely skip the setup steps. We are also hoping to grow that set of pre-compiled robots in that repo, so feel free to make pull requests with additional robot info files. The lightweight relaxed_ik_core package has allowed us to port the code to other applications and languates, such as the [Unity game engine](https://github.com/uwgraphics/relaxed_ik_unity), [Mujoco](https://github.com/uwgraphics/relaxed_ik_mujoco), [CoppeliaSim](https://github.com/uwgraphics/relaxed_ik_coppeliasim), [Python 2 & 3](https://github.com/uwgraphics/relaxed_ik_python), [ROS1](https://github.com/uwgraphics/relaxed_ik_ros1), and ongoing development for ROS2. Note that going forward, this current repository (i.e., github/uwgraphics/relaxed_ik) should ONLY be used for robot setup and compilation or to maintain any older legacy setups. For anything else, it is essentially deprecated and further development will shift over to [relaxed_ik_core](https://github.com/uwgraphics/relaxed_ik_core). For additional information, please consult the [documentation](https://pages.graphics.cs.wisc.edu/relaxed_ik_core/) 10 | 11 | * We recently presented a paper at ICRA 2021 on a new method called [CollisionIK](https://arxiv.org/abs/2102.13187) ([video](https://youtu.be/rdMl1gOPNoM)). CollisionIK is a per-instant pose optimization method that can generate configurations that achieve specified pose or motion objectives as best as possible over a sequence of solutions, while also simultaneously avoiding collisions with static or dynamic obstacles in the environment. This is in contrast to RelaxedIK, which could only avoid self-collisions. The current research code for CollisionIK is available on [relaxed_ik_core](https://github.com/uwgraphics/relaxed_ik_core), and I am also working on an improved implementation of collisionIK that will be released in the coming months. The citation for this paper is: 12 | ``` 13 | @article{rakita2021collisionik, 14 | title={CollisionIK: A Per-Instant Pose Optimization Method for Generating Robot Motions with Environment Collision Avoidance}, 15 | author={Rakita, Daniel and Shi, Haochen and Mutlu, Bilge and Gleicher, Michael}, 16 | journal={arXiv preprint arXiv:2102.13187}, 17 | year={2021} 18 | } 19 | ``` 20 | 21 | Please email or post here if any questions come up! 22 | 23 | 24 | 25 | ----------------------------------------- 26 | 27 | Development update 1/3/20 28 | 29 | RelaxedIK has been substantially rewritten in the Rust programming language. Everything is still completely ROS compatible and should serve as a drop-in replacement for older versions of the solver. 30 | 31 | The Rust relaxedIK solver is MUCH faster than its python and julia alternatives. Testing on my laptop has indicated that the solver can run at over 3000Hz for single arm robots (tested on ur3, ur5, jaco, sawyer, panda, kuka iiwa, etc) and about 2500Hz for bimanual robots (tested on ABB Yumi and Rainbow Robotics DRC-Hubo+). All of the new code has been pushed to the Development branch, and will be pushed to the main branch after a brief testing phase. It is highly recommended that the development branch be used at this point, as it has many more features and options than the main branch. 32 | 33 |
 git clone -b dev https://github.com/uwgraphics/relaxed_ik.git 
34 | 35 | If you are working with an older version of relaxedIK, note that you will have to start from a fresh repo and go through the start_here.py procedures again to work with the Rust version of the solver. 36 | 37 | If you have any comments or questions on any of this, or if you encounter any bugs in the new rust version of the solver, feel free to post an issue or email me directly at rakita@cs.wisc.edu 38 | 39 | 40 | ------------------------------------------ 41 | 42 | RelaxedIK Solver 43 | 44 | Welcome to RelaxedIK! This solver implements the methods discussed in our paper RelaxedIK: Real-time Synthesis of Accurate and Feasible Robot Arm Motion (http://www.roboticsproceedings.org/rss14/p43.html) 45 | 46 | Video of presentation at RSS 2018 (RelaxedIK part starts around 12:00) : 47 | https://youtu.be/bih5e9MHc88?t=737 48 | 49 | Video explaining relaxedIK 50 | https://youtu.be/AhsQFJzB8WQ 51 | 52 | RelaxedIK is an inverse kinematics (IK) solver designed for robot platforms such that the conversion 53 | between Cartesian end-effector pose goals (such as "move the robot's right arm end-effector to position X, while maintaining an end-effector 54 | orientation Y") to Joint-Space (i.e., the robot's rotation values for each joint degree-of-freedom at a particular time-point) is 55 | done both ACCURATELY and FEASIBLY. By this, we mean that RelaxedIK attempts to find the closest possible solution to the 56 | desired end-effector pose goals without exhibiting negative effects such as self-collisions, environment collisions, 57 | kinematic-singularities, or joint-space discontinuities. 58 | 59 | To start using the solver, please follow the step-by-step instructions in the file start_here.py (in the root directory) 60 | 61 | If anything with the solver is not working as expected, or if you have any feedback, feel free to let us know! (email: rakita@cs.wisc.edu, website: http://pages.cs.wisc.edu/~rakita) 62 | We are actively supporting and extending this code, so we are interested to hear about how the solver is being used and any positive or negative experiences in using it. 63 | 64 | Citation 65 | 66 | If you use our solver, please cite our RSS paper RelaxedIK: Real-time Synthesis of Accurate and Feasible Robot Arm Motion 67 | http://www.roboticsproceedings.org/rss14/p43.html 68 | 69 |
 70 | @INPROCEEDINGS{Rakita-RSS-18, 
 71 |     AUTHOR    = {Daniel Rakita AND Bilge Mutlu AND Michael Gleicher}, 
 72 |     TITLE     = {{RelaxedIK: Real-time Synthesis of Accurate and Feasible Robot Arm Motion}}, 
 73 |     BOOKTITLE = {Proceedings of Robotics: Science and Systems}, 
 74 |     YEAR      = {2018}, 
 75 |     ADDRESS   = {Pittsburgh, Pennsylvania}, 
 76 |     MONTH     = {June}, 
 77 |     DOI       = {10.15607/RSS.2018.XIV.043} 
 78 | } 
 79 | 
80 | 81 | If you use our solver for a robot teleoperation interface, also consider citing our prior work that shows the effectiveness of RelaxedIK in this setting: 82 | 83 | 84 | A Motion Retargeting Method for Effective Mimicry-based Teleoperation of Robot Arms 85 | https://dl.acm.org/citation.cfm?id=3020254 86 |
 87 | @inproceedings{rakita2017motion,
 88 |   title={A motion retargeting method for effective mimicry-based teleoperation of robot arms},
 89 |   author={Rakita, Daniel and Mutlu, Bilge and Gleicher, Michael},
 90 |   booktitle={Proceedings of the 2017 ACM/IEEE International Conference on Human-Robot Interaction},
 91 |   pages={361--370},
 92 |   year={2017},
 93 |   organization={ACM}
 94 | }
 95 | 
96 | 97 | 98 | An Autonomous Dynamic Camera Method for Effective Remote Teleoperation 99 | https://dl.acm.org/citation.cfm?id=3171221.3171279 100 |
101 | @inproceedings{rakita2018autonomous,
102 |   title={An autonomous dynamic camera method for effective remote teleoperation},
103 |   author={Rakita, Daniel and Mutlu, Bilge and Gleicher, Michael},
104 |   booktitle={Proceedings of the 2018 ACM/IEEE International Conference on Human-Robot Interaction},
105 |   pages={325--333},
106 |   year={2018},
107 |   organization={ACM}
108 | }
109 | 
110 | 
111 | 112 | Dependencies 113 | 114 | kdl urdf parser: 115 |
>> sudo apt-get install ros-[your ros distro]-urdfdom-py
116 |
>> sudo apt-get install ros-[your ros distro]-kdl-parser-py
117 |
>> sudo apt-get install ros-[your ros distro]-kdl-conversions
118 | 119 |
120 | 121 | fcl collision library: 122 | https://github.com/BerkeleyAutomation/python-fcl 123 | 124 | 128 | 129 | 130 | scikit learn: 131 | http://scikit-learn.org/stable/index.html 132 | 133 | 134 | Tutorial 135 | 136 | For full setup and usage details, please refer to start_here.py in the src directory. 137 | 138 | 139 | 140 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-tactile -------------------------------------------------------------------------------- /launch/collision_viewer.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /launch/joint_state_pub.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /launch/preprocessing.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /launch/relaxed_ik.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /launch/robot_state_pub.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /launch/sample.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /launch/urdf_viewer.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /msg/EEPoseGoals.msg: -------------------------------------------------------------------------------- 1 | std_msgs/Header header 2 | geometry_msgs/Pose[] ee_poses 3 | -------------------------------------------------------------------------------- /msg/JointAngles.msg: -------------------------------------------------------------------------------- 1 | std_msgs/Header header 2 | std_msgs/Float32[] angles 3 | -------------------------------------------------------------------------------- /package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | relaxed_ik 4 | 0.0.0 5 | The relaxed_ik package 6 | 7 | 8 | 9 | 10 | rakita 11 | 12 | 13 | 14 | 15 | 16 | TODO 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | catkin 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /rviz/joint_viewer.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /TF1/Frames1 9 | - /TF1/Tree1 10 | Splitter Ratio: 0.592391312 11 | Tree Height: 749 12 | - Class: rviz/Selection 13 | Name: Selection 14 | - Class: rviz/Tool Properties 15 | Expanded: 16 | - /2D Pose Estimate1 17 | - /2D Nav Goal1 18 | - /Publish Point1 19 | Name: Tool Properties 20 | Splitter Ratio: 0.588679016 21 | - Class: rviz/Views 22 | Expanded: 23 | - /Current View1 24 | Name: Views 25 | Splitter Ratio: 0.5 26 | - Class: rviz/Time 27 | Experimental: false 28 | Name: Time 29 | SyncMode: 0 30 | SyncSource: "" 31 | Visualization Manager: 32 | Class: "" 33 | Displays: 34 | - Alpha: 0.5 35 | Cell Size: 1 36 | Class: rviz/Grid 37 | Color: 160; 160; 164 38 | Enabled: true 39 | Line Style: 40 | Line Width: 0.0299999993 41 | Value: Lines 42 | Name: Grid 43 | Normal Cell Count: 0 44 | Offset: 45 | X: 0 46 | Y: 0 47 | Z: 0 48 | Plane: XY 49 | Plane Cell Count: 10 50 | Reference Frame: 51 | Value: true 52 | - Alpha: 1 53 | Class: rviz/RobotModel 54 | Collision Enabled: false 55 | Enabled: true 56 | Links: 57 | All Links Enabled: true 58 | Expand Joint Details: false 59 | Expand Link Details: false 60 | Expand Tree: false 61 | Link Tree Style: Links in Alphabetic Order 62 | base: 63 | Alpha: 1 64 | Show Axes: false 65 | Show Trail: false 66 | base_link: 67 | Alpha: 1 68 | Show Axes: false 69 | Show Trail: false 70 | Value: true 71 | ee_link: 72 | Alpha: 1 73 | Show Axes: false 74 | Show Trail: false 75 | Value: true 76 | forearm_link: 77 | Alpha: 1 78 | Show Axes: false 79 | Show Trail: false 80 | Value: true 81 | shoulder_link: 82 | Alpha: 1 83 | Show Axes: false 84 | Show Trail: false 85 | Value: true 86 | tool0: 87 | Alpha: 1 88 | Show Axes: false 89 | Show Trail: false 90 | upper_arm_link: 91 | Alpha: 1 92 | Show Axes: false 93 | Show Trail: false 94 | Value: true 95 | world: 96 | Alpha: 1 97 | Show Axes: false 98 | Show Trail: false 99 | wrist_1_link: 100 | Alpha: 1 101 | Show Axes: false 102 | Show Trail: false 103 | Value: true 104 | wrist_2_link: 105 | Alpha: 1 106 | Show Axes: false 107 | Show Trail: false 108 | Value: true 109 | wrist_3_link: 110 | Alpha: 1 111 | Show Axes: false 112 | Show Trail: false 113 | Value: true 114 | Name: RobotModel 115 | Robot Description: robot_description 116 | TF Prefix: "" 117 | Update Interval: 0 118 | Value: true 119 | Visual Enabled: true 120 | - Class: rviz/TF 121 | Enabled: true 122 | Frame Timeout: 15 123 | Frames: 124 | All Enabled: true 125 | base: 126 | Value: true 127 | base_link: 128 | Value: true 129 | common_world: 130 | Value: true 131 | ee_link: 132 | Value: true 133 | forearm_link: 134 | Value: true 135 | shoulder_link: 136 | Value: true 137 | tool0: 138 | Value: true 139 | upper_arm_link: 140 | Value: true 141 | world: 142 | Value: true 143 | wrist_1_link: 144 | Value: true 145 | wrist_2_link: 146 | Value: true 147 | wrist_3_link: 148 | Value: true 149 | Marker Scale: 0.5 150 | Name: TF 151 | Show Arrows: true 152 | Show Axes: true 153 | Show Names: true 154 | Tree: 155 | common_world: 156 | base_link: 157 | base: 158 | {} 159 | shoulder_link: 160 | upper_arm_link: 161 | forearm_link: 162 | wrist_1_link: 163 | wrist_2_link: 164 | wrist_3_link: 165 | ee_link: 166 | {} 167 | tool0: 168 | {} 169 | Update Interval: 0 170 | Value: true 171 | Enabled: true 172 | Global Options: 173 | Background Color: 48; 48; 48 174 | Default Light: true 175 | Fixed Frame: common_world 176 | Frame Rate: 30 177 | Name: root 178 | Tools: 179 | - Class: rviz/Interact 180 | Hide Inactive Objects: true 181 | - Class: rviz/MoveCamera 182 | - Class: rviz/Select 183 | - Class: rviz/FocusCamera 184 | - Class: rviz/Measure 185 | - Class: rviz/SetInitialPose 186 | Topic: /initialpose 187 | - Class: rviz/SetGoal 188 | Topic: /move_base_simple/goal 189 | - Class: rviz/PublishPoint 190 | Single click: true 191 | Topic: /clicked_point 192 | Value: true 193 | Views: 194 | Current: 195 | Class: rviz/Orbit 196 | Distance: 4.00203943 197 | Enable Stereo Rendering: 198 | Stereo Eye Separation: 0.0599999987 199 | Stereo Focal Distance: 1 200 | Swap Stereo Eyes: false 201 | Value: false 202 | Focal Point: 203 | X: 0 204 | Y: 0 205 | Z: 0 206 | Focal Shape Fixed Size: true 207 | Focal Shape Size: 0.0500000007 208 | Invert Z Axis: false 209 | Name: Current View 210 | Near Clip Distance: 0.00999999978 211 | Pitch: 0.520399034 212 | Target Frame: 213 | Value: Orbit (rviz) 214 | Yaw: 5.82990456 215 | Saved: ~ 216 | Window Geometry: 217 | Displays: 218 | collapsed: false 219 | Height: 1056 220 | Hide Left Dock: false 221 | Hide Right Dock: true 222 | QMainWindow State: 000000ff00000000fd00000004000000000000016a0000037cfc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c00610079007301000000280000037c000000d700fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000016c0000037cfc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a0056006900650077007300000000280000037c000000ad00fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073f00000058fc0100000002fb0000000800540069006d006501000000000000073f0000030000fffffffb0000000800540069006d00650100000000000004500000000000000000000005cf0000037c00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 223 | Selection: 224 | collapsed: false 225 | Time: 226 | collapsed: false 227 | Tool Properties: 228 | collapsed: false 229 | Views: 230 | collapsed: true 231 | Width: 1855 232 | X: 65 233 | Y: 24 234 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from distutils.core import setup 2 | from catkin_pkg.python_setup import generate_distutils_setup 3 | 4 | d = generate_distutils_setup( 5 | packages=['bimanual_hubo'], 6 | scripts=[''], 7 | package_dir={'': 'src'} 8 | ) 9 | 10 | setup(**d) 11 | -------------------------------------------------------------------------------- /src/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/.idea/src.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /src/RelaxedIK/.idea/RelaxedIK.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 11 | -------------------------------------------------------------------------------- /src/RelaxedIK/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/RelaxedIK/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/RelaxedIK/.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 12 | 13 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 |