diff --git a/.gitignore b/.gitignore index 001de9a..d08736a 100644 --- a/.gitignore +++ b/.gitignore @@ -36,4 +36,6 @@ __pycache__ .idea/ # python -dist/ \ No newline at end of file +dist/ + +uv.lock diff --git a/pyproject.toml b/pyproject.toml index 07de284..c3b11c5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,30 @@ +[project] +name = "unitree_sdk2py" +version = "1.0.1" +description = "Unitree robot sdk version 2 for python" +readme = { file = "README.md", content-type = "text/markdown" } +requires-python = ">=3.9" +license = { text = "BSD-3-Clause" } +authors = [ + { name = "UnitreeRobotics", email = "unitree@unitree.com" } +] +dependencies = [ + "cyclonedds @ https://github.com/carlosdp/cyclonedds-python/releases/download/0.10.5/cyclonedds-0.10.5-cp312-cp312-macosx_10_9_x86_64.whl ; platform_system == 'Darwin' and platform_machine == 'x86_64'", + "cyclonedds @ https://github.com/carlosdp/cyclonedds-python/releases/download/0.10.5/cyclonedds-0.10.5-cp312-cp312-macosx_11_0_arm64.whl ; platform_system == 'Darwin' and platform_machine == 'arm64'", + "cyclonedds @ https://github.com/carlosdp/cyclonedds-python/releases/download/0.10.5/cyclonedds-0.10.5-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl ; sys_platform == 'linux' and platform_machine == 'aarch64'", + "cyclonedds @ https://github.com/carlosdp/cyclonedds-python/releases/download/0.10.5/cyclonedds-0.10.5-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl ; sys_platform == 'linux' and platform_machine == 'x86_64'", + "fastcrc>=0.3.2", + "numpy", + "opencv-python", +] + +[project.urls] +"Source Code" = "https://github.com/unitreerobotics/unitree_sdk2_python" + [build-system] -requires = ["setuptools", "wheel"] -build-backend = "setuptools.build_meta" \ No newline at end of file +requires = ["setuptools>=64", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.setuptools.packages.find] +include = ["unitree_sdk2py", "unitree_sdk2py.*"] + diff --git a/setup.py b/setup.py deleted file mode 100644 index 54d8cac..0000000 --- a/setup.py +++ /dev/null @@ -1,21 +0,0 @@ -from setuptools import setup, find_packages - -setup(name='unitree_sdk2py', - version='1.0.1', - author='UnitreeRobotics', - author_email='unitree@unitree.com', - long_description=open('README.md').read(), - long_description_content_type="text/markdown", - license="BSD-3-Clause", - packages=find_packages(include=['unitree_sdk2py','unitree_sdk2py.*']), - description='Unitree robot sdk version 2 for python', - project_urls={ - "Source Code": "https://github.com/unitreerobotics/unitree_sdk2_python", - }, - python_requires='>=3.8', - install_requires=[ - "cyclonedds==0.10.2", - "numpy", - "opencv-python", - ], - ) \ No newline at end of file diff --git a/unitree_sdk2py/b2/__init__.py b/unitree_sdk2py/b2/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/b2/back_video/__init__.py b/unitree_sdk2py/b2/back_video/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/b2/front_video/__init__.py b/unitree_sdk2py/b2/front_video/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/b2/robot_state/__init__.py b/unitree_sdk2py/b2/robot_state/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/b2/sport/__init__.py b/unitree_sdk2py/b2/sport/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/b2/vui/__init__.py b/unitree_sdk2py/b2/vui/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/comm/__init__.py b/unitree_sdk2py/comm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/g1/__init__.py b/unitree_sdk2py/g1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/g1/arm/__init__.py b/unitree_sdk2py/g1/arm/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/g1/audio/__init__.py b/unitree_sdk2py/g1/audio/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/g1/loco/__init__.py b/unitree_sdk2py/g1/loco/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/h1/__init__.py b/unitree_sdk2py/h1/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/h1/loco/__init__.py b/unitree_sdk2py/h1/loco/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/test/__init__.py b/unitree_sdk2py/test/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/test/client/__init__.py b/unitree_sdk2py/test/client/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/test/crc/__init__.py b/unitree_sdk2py/test/crc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/test/helloworld/__init__.py b/unitree_sdk2py/test/helloworld/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/test/lowlevel/__init__.py b/unitree_sdk2py/test/lowlevel/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/test/rpc/__init__.py b/unitree_sdk2py/test/rpc/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/unitree_sdk2py/utils/crc.py b/unitree_sdk2py/utils/crc.py index c250706..118f5f2 100644 --- a/unitree_sdk2py/utils/crc.py +++ b/unitree_sdk2py/utils/crc.py @@ -1,6 +1,6 @@ import struct -import cyclonedds import cyclonedds.idl as idl +from fastcrc import crc32 from .singleton import Singleton from ..idl.unitree_go.msg.dds_ import LowCmd_ @@ -8,9 +8,6 @@ from ..idl.unitree_hg.msg.dds_ import LowCmd_ as HGLowCmd_ from ..idl.unitree_hg.msg.dds_ import LowState_ as HGLowState_ -import ctypes -import os -import platform class CRC(Singleton): def __init__(self): @@ -25,17 +22,6 @@ def __init__(self): self.__packFmtHGLowState = '<2I2B2xI' + '13fh2x' + 'B3x4f2hf7I' * 35 + '40B5I' - script_dir = os.path.dirname(os.path.abspath(__file__)) - self.platform = platform.system() - if self.platform == "Linux": - if platform.machine()=="x86_64": - self.crc_lib = ctypes.CDLL(script_dir + '/lib/crc_amd64.so') - elif platform.machine()=="aarch64": - self.crc_lib = ctypes.CDLL(script_dir + '/lib/crc_aarch64.so') - - self.crc_lib.crc32_core.argtypes = (ctypes.POINTER(ctypes.c_uint32), ctypes.c_uint32) - self.crc_lib.crc32_core.restype = ctypes.c_uint32 - def Crc(self, msg: idl.IdlStruct): if msg.__idl_typename__ == 'unitree_go.msg.dds_.LowCmd_': return self.__Crc32(self.__PackLowCmd(msg)) @@ -192,37 +178,14 @@ def __Trans(self, packData): return calcData - def _crc_py(self, data): - bit = 0 - crc = 0xFFFFFFFF - polynomial = 0x04c11db7 - - for i in range(len(data)): - bit = 1 << 31 - current = data[i] - - for b in range(32): - if crc & 0x80000000: - crc = (crc << 1) & 0xFFFFFFFF - crc ^= polynomial - else: - crc = (crc << 1) & 0xFFFFFFFF + def __Crc32(self, data): + return crc32.mpeg_2(words_to_bytes(data)) - if current & bit: - crc ^= polynomial - bit >>= 1 - - return crc +def words_to_bytes(data): + """ + Convert a list of 32-bit integers (data[i]) into bytes, + in big-endian order, matching the _crc_py bit processing. + """ + return b"".join(word.to_bytes(4, byteorder="big") for word in data) - def _crc_ctypes(self, data): - uint32_array = (ctypes.c_uint32 * len(data))(*data) - length = len(data) - crc=self.crc_lib.crc32_core(uint32_array, length) - return crc - - def __Crc32(self, data): - if self.platform == "Linux": - return self._crc_ctypes(data) - else: - return self._crc_py(data) diff --git a/unitree_sdk2py/utils/lib/crc_aarch64.so b/unitree_sdk2py/utils/lib/crc_aarch64.so deleted file mode 100644 index 878df74..0000000 Binary files a/unitree_sdk2py/utils/lib/crc_aarch64.so and /dev/null differ diff --git a/unitree_sdk2py/utils/lib/crc_amd64.so b/unitree_sdk2py/utils/lib/crc_amd64.so deleted file mode 100644 index 258055d..0000000 Binary files a/unitree_sdk2py/utils/lib/crc_amd64.so and /dev/null differ