Source code for concepts.simulator.pybullet.ikfast.compile

import fnmatch
import importlib
import os
import shutil

from distutils.core import setup
from distutils.dir_util import copy_tree
from distutils.extension import Extension

# Build C++ extension by running: 'python setup.py build'
# see: https://docs.python.org/3/extending/building.html

# http://openrave.org/docs/0.8.2/openravepy/ikfast/
# https://github.com/rdiankov/openrave/blob/master/python/ikfast.py#L92
# http://wiki.ros.org/Industrial/Tutorials/Create_a_Fast_IK_Solution

# Yijiang
# https://github.com/yijiangh/ikfast_pybind
# https://github.com/yijiangh/conrob_pybullet/tree/master/utils/ikfast
# https://github.com/yijiangh/choreo/blob/bc777069b8eb7283c74af26e5461532aec3d9e8a/framefab_robot/abb/framefab_irb6600/framefab_irb6600_support/doc/ikfast_tutorial.rst


[docs]def compile_ikfast(module_name, cpp_filename, remove_build=False, link_lapack=False): ikfast_module = Extension(module_name, sources=[cpp_filename], extra_link_args=['-llapack'] if link_lapack else []) setup( name=module_name, version='1.0', description="ikfast module {}".format(module_name), ext_modules=[ikfast_module], script_args=['build'], ) build_lib_path = None for root, dirnames, filenames in os.walk(os.getcwd()): if fnmatch.fnmatch(root, os.path.join(os.getcwd(), "*build", "lib*")): build_lib_path = root break assert build_lib_path is not None copy_tree(build_lib_path, os.getcwd()) if remove_build: # TODO: error when compiling multiple arms for python2 # error: unable to open output file 'build/temp.macosx-10.15-x86_64-2.7/movo_right_arm_ik.o': 'No such file or directory' shutil.rmtree(os.path.join(os.getcwd(), 'build')) try: importlib.import_module(module_name) print('\nikfast module {} imported successful'.format(module_name)) except ImportError as e: print('\nikfast module {} imported failed'.format(module_name)) raise e return True