xarm-python-sdk 1.15.3__tar.gz → 1.16.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/PKG-INFO +4 -1
  2. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/README.md +10 -2
  3. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/README.rst +3 -0
  4. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/ReleaseNotes.md +6 -0
  5. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/doc/api/xarm_api.md +47 -10
  6. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/thridparty/set_yinshi_gripper.py +8 -8
  7. xarm_python_sdk-1.16.0/example/wrapper/thridparty/set_yinshi_rh56_gripper.py +126 -0
  8. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/wrapper/uxbus_cmd.py +16 -12
  9. xarm_python_sdk-1.16.0/xarm/version.py +1 -0
  10. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/wrapper/xarm_api.py +56 -11
  11. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/base.py +23 -8
  12. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/ft_sensor.py +3 -2
  13. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/gripper.py +122 -36
  14. xarm_python_sdk-1.15.3/xarm/version.py +0 -1
  15. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/.github/workflows/python-publish.yml +0 -0
  16. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/.gitignore +0 -0
  17. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/LICENSE +0 -0
  18. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/doc/UF_ModbusTCP_Manual.md +0 -0
  19. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/doc/api/xarm_api_code.md +0 -0
  20. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/doc/tool/gen_api.py +0 -0
  21. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/doc/tool/markdown_doc.py +0 -0
  22. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/0000-template.py +0 -0
  23. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/0001-event_register.py +0 -0
  24. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/0002-get_property.py +0 -0
  25. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/0003-api_get.py +0 -0
  26. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/0004-servo_attach_detach.py +0 -0
  27. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1001-move_line.py +0 -0
  28. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1002-move_line.py +0 -0
  29. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1003-relative_move_line.py +0 -0
  30. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1004-move_arc_line.py +0 -0
  31. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1005-move_arc_line.py +0 -0
  32. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1006-move_tool_line.py +0 -0
  33. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1007-counter.py +0 -0
  34. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1008-move_line_aa.py +0 -0
  35. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1009-cartesian_velocity_control.py +0 -0
  36. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/1010-cartesian_online_trajectory_planning.py +0 -0
  37. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/2000-joint_velocity_control.py +0 -0
  38. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/2006-joint_online_trajectory_planning.py +0 -0
  39. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/3001-move_circle.py +0 -0
  40. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/3002-record_trajectory.py +0 -0
  41. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/3003-playback_trajectory.py +0 -0
  42. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/3004-get_report_data.py +0 -0
  43. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/3005-task_feedback.py +0 -0
  44. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/3006-standard_modbus_tcp.py +0 -0
  45. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5000-set_tgpio_modbus.py +0 -0
  46. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5001-get_tgpio_digital.py +0 -0
  47. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5002-get_tgpio_analog.py +0 -0
  48. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5003-set_tgpio_digital.py +0 -0
  49. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5004-set_gripper.py +0 -0
  50. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5005-get_cgpio_digital_analog.py +0 -0
  51. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5006-set_cgpio_digital_analog.py +0 -0
  52. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5007-set_cgpio_input_output_function.py +0 -0
  53. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5008-get_cgpio_state.py +0 -0
  54. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/5009-set_bio_gripper.py +0 -0
  55. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/6001-set_reduced_mode.py +0 -0
  56. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/6002-set_fense_mode.py +0 -0
  57. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/7001-servo_j.py +0 -0
  58. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/7002-servo_cartesian.py +0 -0
  59. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/7003-servo_cartesian_aa.py +0 -0
  60. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8000-load_identify_current.py +0 -0
  61. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8001-force_tech.py +0 -0
  62. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8002-impedance.py +0 -0
  63. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8003-force_control.py +0 -0
  64. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8004-load_identify.py +0 -0
  65. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8005-read_force_data.py +0 -0
  66. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8006-save_force_zero.py +0 -0
  67. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/8010-get_ft_sensor_config.py +0 -0
  68. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/9000-set_linear_track.py +0 -0
  69. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/common/get_report_data_with_protocol.py +0 -0
  70. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/thridparty/set_robotiq_gripper.py +0 -0
  71. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/tool/blockly_to_python.py +0 -0
  72. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/tool/example.xml +0 -0
  73. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm5/2001-move_joint.py +0 -0
  74. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm5/2002-move_joint.py +0 -0
  75. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm5/2003-move_joint.py +0 -0
  76. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm5/2004-move_joint.py +0 -0
  77. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm5/2005-move_arc_joint.py +0 -0
  78. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm6/2001-move_joint.py +0 -0
  79. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm6/2002-move_joint.py +0 -0
  80. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm6/2003-move_joint.py +0 -0
  81. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm6/2004-move_joint.py +0 -0
  82. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm6/2005-move_arc_joint.py +0 -0
  83. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm7/2001-move_joint.py +0 -0
  84. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm7/2002-move_joint.py +0 -0
  85. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm7/2003-move_joint.py +0 -0
  86. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm7/2004-move_joint.py +0 -0
  87. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/example/wrapper/xarm7/2005-move_arc_joint.py +0 -0
  88. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/pyproject.toml +0 -0
  89. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/requirements.txt +0 -0
  90. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/setup.py +0 -0
  91. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/__init__.py +0 -0
  92. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/build_backend.py +0 -0
  93. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/__init__.py +0 -0
  94. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/comm/__init__.py +0 -0
  95. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/comm/base.py +0 -0
  96. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/comm/serial_port.py +0 -0
  97. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/comm/socket_port.py +0 -0
  98. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/comm/uxbus_cmd_protocol.py +0 -0
  99. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/config/__init__.py +0 -0
  100. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/config/x_code.py +0 -0
  101. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/config/x_config.py +0 -0
  102. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/utils/__init__.py +0 -0
  103. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/utils/convert.py +0 -0
  104. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/utils/crc16.py +0 -0
  105. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/utils/debug_print.py +0 -0
  106. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/utils/log.py +0 -0
  107. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/version.py +0 -0
  108. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/wrapper/__init__.py +0 -0
  109. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/wrapper/uxbus_cmd_ser.py +0 -0
  110. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/core/wrapper/uxbus_cmd_tcp.py +0 -0
  111. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/__init__.py +0 -0
  112. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/blockly/__init__.py +0 -0
  113. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/blockly/_blockly_base.py +0 -0
  114. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/blockly/_blockly_handler.py +0 -0
  115. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/blockly/_blockly_highlight.py +0 -0
  116. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/blockly/_blockly_node.py +0 -0
  117. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/blockly/_blockly_tool.py +0 -0
  118. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/blockly_tool.py +0 -0
  119. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/gcode.py +0 -0
  120. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/list_ports.py +0 -0
  121. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/modbus_tcp.py +0 -0
  122. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/threads.py +0 -0
  123. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/tools/utils.py +0 -0
  124. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/wrapper/__init__.py +0 -0
  125. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/wrapper/studio_api.py +0 -0
  126. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/__init__.py +0 -0
  127. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/base_board.py +0 -0
  128. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/code.py +0 -0
  129. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/decorator.py +0 -0
  130. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/events.py +0 -0
  131. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/gpio.py +0 -0
  132. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/grammar_async.py +0 -0
  133. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/grammar_coroutine.py +0 -0
  134. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/modbus_tcp.py +0 -0
  135. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/parse.py +0 -0
  136. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/record.py +0 -0
  137. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/report.py +0 -0
  138. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/robotiq.py +0 -0
  139. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/servo.py +0 -0
  140. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/studio.py +0 -0
  141. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/track.py +0 -0
  142. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/utils.py +0 -0
  143. {xarm_python_sdk-1.15.3 → xarm_python_sdk-1.16.0}/xarm/x3/xarm.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: xarm-python-sdk
3
- Version: 1.15.3
3
+ Version: 1.16.0
4
4
  Summary: Python SDK for UFACTORY robotic arm 850, xArm 5/6/7, and Lite6.
5
5
  Project-URL: Homepage, https://www.ufactory.cc
6
6
  Project-URL: Documentation, https://github.com/xArm-Developer/xArm-Python-SDK/blob/master/doc/api/xarm_api.md
@@ -32,6 +32,9 @@ xarm-python-sdk
32
32
  .. image:: https://badge.fury.io/py/xarm-python-sdk.svg
33
33
  :target: https://pypi.org/project/xarm-python-sdk/
34
34
 
35
+ .. image:: https://static.pepy.tech/badge/xarm-python-sdk
36
+ :target: https://pepy.tech/projects/xarm-python-sdk
37
+
35
38
  .. image:: https://img.shields.io/github/license/xArm-Developer/xArm-Python-SDK.svg
36
39
  :target: https://github.com/xArm-Developer/xArm-Python-SDK/blob/main/LICENSE
37
40
 
@@ -1,5 +1,7 @@
1
1
  # xArm-Python-SDK
2
2
 
3
+ [![PyPI Downloads](https://static.pepy.tech/badge/xarm-python-sdk)](https://pepy.tech/projects/xarm-python-sdk)
4
+
3
5
  ## Overview
4
6
  xArm Python SDK
5
7
 
@@ -14,14 +16,14 @@ xArm Python SDK
14
16
  - download
15
17
  ```bash
16
18
  git clone https://github.com/xArm-Developer/xArm-Python-SDK.git
17
- cd cd xArm-Python-SDK
19
+ cd xArm-Python-SDK
18
20
  ```
19
21
  - install
20
22
  - install with build
21
23
  ```bash
22
24
  pip install build
23
25
  python -m build
24
- pip install dist/xarm_python_sdk-1.15.1-py3-none-any.whl
26
+ pip install dist/xarm_python_sdk-1.16.0-py3-none-any.whl
25
27
  ```
26
28
  - install with source code
27
29
  ```bash
@@ -40,6 +42,12 @@ xArm Python SDK
40
42
  - #### [UFACTORY ModbusTCP Manual](doc/UF_ModbusTCP_Manual.md)
41
43
 
42
44
  ## Update Summary
45
+ - > ### 1.16.0
46
+ - Added parameter to support get raw data of the Six-axis Force Torque Sensor
47
+ - Added an interface to control xArm Gripper G2
48
+ - Optimize the interface for controlling BIO Gripper G2
49
+ - Extend the get_joint_states interface
50
+
43
51
  - > ### 1.15.0
44
52
  - Added the Six-axis Force Torque Sensor collision detection related interfaces
45
53
  - Added support for the new version of BIO Gripper control interface
@@ -4,6 +4,9 @@ xarm-python-sdk
4
4
  .. image:: https://badge.fury.io/py/xarm-python-sdk.svg
5
5
  :target: https://pypi.org/project/xarm-python-sdk/
6
6
 
7
+ .. image:: https://static.pepy.tech/badge/xarm-python-sdk
8
+ :target: https://pepy.tech/projects/xarm-python-sdk
9
+
7
10
  .. image:: https://img.shields.io/github/license/xArm-Developer/xArm-Python-SDK.svg
8
11
  :target: https://github.com/xArm-Developer/xArm-Python-SDK/blob/main/LICENSE
9
12
 
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Update Summary
4
4
 
5
+ - > ### 1.16.0
6
+ - Added parameter to support get raw data of the Six-axis Force Torque Sensor
7
+ - Added an interface to control xArm Gripper G2
8
+ - Optimize the interface for controlling BIO Gripper G2
9
+ - Extend the get_joint_states interface
10
+
5
11
  - > ### 1.15.0
6
12
  - Added the Six-axis Force Torque Sensor collision detection related interfaces
7
13
  - Added support for the new version of BIO Gripper control interface
@@ -1,4 +1,4 @@
1
- xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrapper.xarm_api
1
+ xArm-Python-SDK API Documentation (V1.16.0): class XArmAPI in module xarm.wrapper.xarm_api
2
2
 
3
3
  ## class __XArmAPI__
4
4
  ****************************************
@@ -414,6 +414,14 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
414
414
  >     error_code: See the [Bio Gripper Error Code Documentation](./xarm_api_code.md#bio-gripper-error-code) for details.
415
415
 
416
416
 
417
+ #### def __get_bio_gripper_g2_position__(self, **kwargs):
418
+
419
+ > Get the position (mm) of the BIO Gripper G2
420
+ >
421
+ > :return: tuple((code, pos)), only when code is 0, the returned result is correct.
422
+ >     code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
423
+
424
+
417
425
  #### def __get_bio_gripper_status__(self):
418
426
 
419
427
  > Get the status of the bio gripper
@@ -724,13 +732,15 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
724
732
  >         [21] xe_limit: 6d vector. for compliant axes, these values are the maximum allowed tcp speed along/about the axis. mm/s
725
733
 
726
734
 
727
- #### def __get_ft_sensor_data__(self):
735
+ #### def __get_ft_sensor_data__(self, is_raw=False):
728
736
 
729
737
  > Get the data of the Six-axis Force Torque Sensor
730
738
  > Note:
731
739
  >     1. only available if firmware_version >= 1.8.3
732
740
  >     2. the Six-axis Force Torque Sensor is required (the third party is not currently supported)
733
741
  >
742
+ > :param is_raw: get the raw data or not.
743
+ >     1. only available if firmware_version >= 2.6.109
734
744
  > :return: tuple((code, exe_ft))
735
745
  >     code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
736
746
  >     ft_data: only when code is 0, the returned result is correct.
@@ -758,9 +768,17 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
758
768
  >     err_code: See the [Gripper Error Code Documentation](./xarm_api_code.md#gripper-error-code) for details.
759
769
 
760
770
 
771
+ #### def __get_gripper_g2_position__(self, **kwargs):
772
+
773
+ > Get the position (mm) of the xArm Gripper G2
774
+ >
775
+ > :return: tuple((code, pos)), only when code is 0, the returned result is correct.
776
+ >     code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
777
+
778
+
761
779
  #### def __get_gripper_position__(self, **kwargs):
762
780
 
763
- > Get the gripper position
781
+ > Get the gripper position (pulse)
764
782
  >
765
783
  > :return: tuple((code, pos)), only when code is 0, the returned result is correct.
766
784
  >     code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
@@ -1292,7 +1310,7 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
1292
1310
  > :param min_res_len: the minimum length of modbus response data. Used to check the data length, if not specified, no check
1293
1311
  > :param host_id: host_id, default is 9 (TGPIO_HOST_ID)
1294
1312
  >     9: END RS485
1295
- >     10: CONTROLLER RS485
1313
+ >     11: CONTROLLER RS485
1296
1314
  > :param is_transparent_transmission: whether to choose transparent transmission, default is False
1297
1315
  >     Note: only available if firmware_version >= 1.11.0
1298
1316
  > :param use_503_port: whether to use port 503 for communication, default is False
@@ -2106,13 +2124,13 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
2106
2124
  >     code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
2107
2125
 
2108
2126
 
2109
- #### def __set_bio_gripper_position__(self, pos, speed=0, force=100, wait=True, timeout=5, **kwargs):
2127
+ #### def __set_bio_gripper_g2_position__(self, pos, speed=2000, force=100, wait=True, timeout=5, **kwargs):
2110
2128
 
2111
- > Set the bio gripper position
2129
+ > Set the position of BIO Gripper G2
2112
2130
  >
2113
- > :param pos: gripper pos between 71 and 150
2114
- > :param speed: gripper speed between 0 and 4500
2115
- > :param force: gripper force between 10 and 100
2131
+ > :param pos: gripper pos between 71 and 150, (unit: mm)
2132
+ > :param speed: gripper speed between 500 and 4500, default is 2000, (unit: pulse/s)
2133
+ > :param force: gripper force between 1 and 100, default is 100
2116
2134
  > :param wait: whether to wait for the robotiq motion to complete, default is True
2117
2135
  > :param timeout: maximum waiting time(unit: second), default is 5, only available if wait=True
2118
2136
  >
@@ -2297,11 +2315,17 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
2297
2315
  >         self.set_collision_tool_model(21, radius=45, height=137)
2298
2316
  >         :param radius: the radius of cylinder, (unit: mm)
2299
2317
  >         :param height: the height of cylinder, (unit: mm)
2318
+ >         :param x_offset: offset in the x direction, (unit: mm)
2319
+ >         :param y_offset: offset in the y direction, (unit: mm)
2320
+ >         :param z_offset: offset in the z direction, (unit: mm)
2300
2321
  >     22: Cuboid, need additional parameters x, y, z
2301
2322
  >         self.set_collision_tool_model(22, x=234, y=323, z=23)
2302
2323
  >         :param x: the length of the cuboid in the x coordinate direction, (unit: mm)
2303
2324
  >         :param y: the length of the cuboid in the y coordinate direction, (unit: mm)
2304
2325
  >         :param z: the length of the cuboid in the z coordinate direction, (unit: mm)
2326
+ >         :param x_offset: offset in the x direction, (unit: mm)
2327
+ >         :param y_offset: offset in the y direction, (unit: mm)
2328
+ >         :param z_offset: offset in the z direction, (unit: mm)
2305
2329
  > :param args: additional parameters
2306
2330
  > :param kwargs: additional parameters
2307
2331
  > :return: code
@@ -2499,6 +2523,19 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
2499
2523
  >     code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
2500
2524
 
2501
2525
 
2526
+ #### def __set_gripper_g2_position__(self, pos, speed=100, force=50, wait=False, timeout=None, **kwargs):
2527
+
2528
+ > Set the position of the xArm Gripper G2
2529
+ >
2530
+ > :param pos: gripper pos between 0 and 84, (unit: mm)
2531
+ > :param speed: gripper speed between 15 and 225, default is 100, (unit: mm/s)
2532
+ > :param force: gripper force between 1 and 100, default is 50
2533
+ > :param wait: whether to wait for the bio gripper motion complete, default is False
2534
+ > :param timeout: maximum waiting time(unit: second), default is 10s, only valid if wait is True
2535
+ > :return: code
2536
+ >     code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
2537
+
2538
+
2502
2539
  #### def __set_gripper_mode__(self, mode, **kwargs):
2503
2540
 
2504
2541
  > Set the gripper mode
@@ -2515,7 +2552,7 @@ xArm-Python-SDK API Documentation (V1.15.3): class XArmAPI in module xarm.wrappe
2515
2552
  >
2516
2553
  > :param pos: pos
2517
2554
  > :param wait: wait or not, default is False
2518
- > :param speed: speed,unit:r/min
2555
+ > :param speed: speed, unit:r/min
2519
2556
  > :param auto_enable: auto enable or not, default is False
2520
2557
  > :param timeout: wait time, unit:second, default is 10s
2521
2558
  > :return: code
@@ -39,21 +39,21 @@ arm.motion_enable(True)
39
39
  arm.set_mode(0)
40
40
  arm.set_state(0)
41
41
 
42
- ret = arm.core.set_modbus_timeout(20)
43
- print('set modbus timeout, ret = %d' % (ret[0]))
42
+ code = arm.set_tgpio_modbus_timeout(20)
43
+ print('set_tgpio_modbus_timeout, code={}'.format(code))
44
44
 
45
- ret = arm.core.set_modbus_baudrate(115200)
46
- print('set modbus baudrate, ret = %d' % (ret[0]))
45
+ code = arm.set_tgpio_modbus_baudrate(115200)
46
+ print('set_tgpio_modbus_baudrate, code={}'.format(code))
47
47
  time.sleep(2)
48
48
 
49
49
  while arm.connected:
50
50
  # yinshi open/close test
51
51
  data_frame = [0x01, 0x06, 0x00, 0x0A, 0x00, 0x03]
52
- ret = arm.core.tgpio_set_modbus(data_frame, len(data_frame))
53
- print('set modbus, ret = %d' % (ret[0]))
52
+ code, res_data = arm.getset_tgpio_modbus_data(data_frame)
53
+ print('getset_tgpio_modbus_data, code={}, res_data={}'.format(code, res_data))
54
54
  time.sleep(2)
55
55
 
56
56
  data_frame = [0x01, 0x06, 0x00, 0x0A, 0x03, 0x60]
57
- ret = arm.core.tgpio_set_modbus(data_frame, len(data_frame))
58
- print('set modbus, ret = %d' % (ret[0]))
57
+ code, res_data = arm.getset_tgpio_modbus_data(data_frame)
58
+ print('getset_tgpio_modbus_data, code={}, res_data={}'.format(code, res_data))
59
59
  time.sleep(1)
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env python3
2
+ # Software License Agreement (BSD License)
3
+ #
4
+ # Copyright (c) 2019, UFACTORY, Inc.
5
+ # All rights reserved.
6
+ #
7
+ # Author: Vinman <vinman.wen@ufactory.cc> <vinman.cub@gmail.com>
8
+
9
+ """
10
+ Example: yinshi RH56 gripper Control
11
+ Please make sure that the gripper is attached to the end.
12
+ """
13
+
14
+ import os
15
+ import sys
16
+ import time
17
+ sys.path.append(os.path.join(os.path.dirname(__file__), '../../..'))
18
+
19
+ from xarm.wrapper import XArmAPI
20
+ from configparser import ConfigParser
21
+ parser = ConfigParser()
22
+ parser.read('../robot.conf')
23
+ try:
24
+ ip = parser.get('xArm', 'ip')
25
+ except:
26
+ ip = input('Please input the xArm ip address[192.168.1.194]:')
27
+ if not ip:
28
+ ip = '192.168.1.194'
29
+
30
+ # 各自由度角度、力控、速度寄存器地址
31
+ FINGER_ADDR = {
32
+ 0: 0x05CE, # 小拇指
33
+ 1: 0x05D0, # 无名指
34
+ 2: 0x05D2, # 中指
35
+ 3: 0x05D4, #食指
36
+ 4: 0x05D6, #大拇指弯曲
37
+ 5: 0x05D8, #大拇指旋转
38
+ }
39
+ FORCE_ADDR = {
40
+ 0: 0x05DA, # 小拇指
41
+ 1: 0x05DC,
42
+ 2: 0x05DE,
43
+ 3: 0x05E0,
44
+ 4: 0x05E2,
45
+ 5: 0x05E4,
46
+ }
47
+ SPEED_ADDR = {
48
+ 0: 0x05F2, # 小拇指
49
+ 1: 0x05F4,
50
+ 2: 0x05F6,
51
+ 3: 0x05F8,
52
+ 4: 0x05FA,
53
+ 5: 0x05FC,
54
+ }
55
+
56
+ HAND_ID = 0x01
57
+
58
+ def set_rh56_finger_speed(arm, finger_id, speed):
59
+ speed = min(max(round(speed), 0), 1000)
60
+ addr = SPEED_ADDR[finger_id]
61
+ modbus = [HAND_ID, 0x06, (addr >> 8) & 0xFF, addr & 0xFF, (speed >> 8) & 0xFF, speed & 0xFF]
62
+ code, res_data = arm.getset_tgpio_modbus_data(modbus, timeout=100)
63
+ if code != 0:
64
+ print('[FAILED] set the speed of finger-{}, code={}, res_data={}'.format(finger_id, code, res_data))
65
+ else:
66
+ print('[SUCCESS] set the speed of finger-{}, res_data={}'.format(finger_id, res_data))
67
+ return code, res_data
68
+
69
+ def set_rh56_finger_force(arm, finger_id, force):
70
+ force = min(max(round(force), 0), 1000)
71
+ addr = FORCE_ADDR[finger_id]
72
+ modbus = [HAND_ID, 0x06, (addr >> 8) & 0xFF, addr & 0xFF, (force >> 8) & 0xFF, force & 0xFF]
73
+ code, res_data = arm.getset_tgpio_modbus_data(modbus, timeout=100)
74
+ if code != 0:
75
+ print('[FAILED] set the force of finger-{}, code={}, res_data={}'.format(finger_id, code, res_data))
76
+ else:
77
+ print('[SUCCESS] set the force of finger-{}, res_data={}'.format(finger_id, res_data))
78
+ return code, res_data
79
+
80
+ def set_rh56_finger_pos(arm, finger_id, pos):
81
+ pos = min(max(round(pos), 0), 1000) if pos != -1 else 0xFFFF
82
+ addr = FINGER_ADDR[finger_id]
83
+ modbus = [HAND_ID, 0x06, (addr >> 8) & 0xFF, addr & 0xFF, (pos >> 8) & 0xFF, pos & 0xFF]
84
+ code, res_data = arm.getset_tgpio_modbus_data(modbus, timeout=100)
85
+ if code != 0:
86
+ print('[FAILED] set the pos of finger-{}, code={}, res_data={}'.format(finger_id, code, res_data))
87
+ else:
88
+ print('[SUCCESS] set the pos of finger-{}, res_data={}'.format(finger_id, res_data))
89
+ return code, res_data
90
+
91
+ def set_rh56_finger(arm, pos, speed=1000, force=500, open_threshold=500):
92
+ # 决定执行顺序:闭合用正序,张开用反序。位置大于500认为张开,小于等于500认为是闭合。
93
+ if pos <= open_threshold:
94
+ finger_order = range(0, 5) # 抓取(闭合)
95
+ else:
96
+ finger_order = reversed(range(0, 5)) # 张开
97
+
98
+ for finger_id in finger_order:
99
+ set_rh56_finger_speed(arm, finger_id, speed)
100
+ set_rh56_finger_force(arm, finger_id, force)
101
+ set_rh56_finger_pos(arm, finger_id, pos)
102
+ time.sleep(0.01)
103
+
104
+ arm = XArmAPI(ip)
105
+ time.sleep(0.5)
106
+ if arm.warn_code != 0:
107
+ arm.clean_warn()
108
+ if arm.error_code != 0:
109
+ arm.clean_error()
110
+
111
+ arm.motion_enable(True)
112
+ arm.set_mode(0)
113
+ arm.set_state(0)
114
+
115
+ code = arm.set_tgpio_modbus_timeout(20)
116
+ print('set_tgpio_modbus_timeout, code={}'.format(code))
117
+
118
+ code = arm.set_tgpio_modbus_baudrate(115200)
119
+ print('set_tgpio_modbus_baudrate, code={}'.format(code))
120
+ time.sleep(2)
121
+
122
+ for i in range(100):
123
+ set_rh56_finger(arm, pos=1000, force=500,speed=1000)
124
+ time.sleep(2)
125
+ set_rh56_finger(arm, pos=0, force=500, speed=1000)
126
+ time.sleep(2)
@@ -42,6 +42,7 @@ class UxbusCmd(object):
42
42
  self._last_modbus_comm_time = time.monotonic()
43
43
  self._feedback_type = 0
44
44
  self._set_feedback_key_tranid = set_feedback_key_tranid
45
+ self.tgpio_set_modbus_func = self.tgpio_set_modbus
45
46
 
46
47
  @property
47
48
  def last_comm_time(self):
@@ -625,7 +626,7 @@ class UxbusCmd(object):
625
626
  return self.get_nfp32(XCONF.UxbusReg.GET_JOINT_POS, 7)
626
627
 
627
628
  def get_joint_states(self, num=3):
628
- return self.get_nfp32_with_datas(XCONF.UxbusReg.GET_JOINT_POS, [num], 1, 7 * num)
629
+ return self.get_nfp32_with_datas(XCONF.UxbusReg.GET_JOINT_POS, [num], 1, 7 * (num & 0x0F))
629
630
 
630
631
  def get_tcp_pose(self):
631
632
  return self.get_nfp32(XCONF.UxbusReg.GET_TCP_POSE, 6)
@@ -874,22 +875,22 @@ class UxbusCmd(object):
874
875
  txdata = [io_type, on_off]
875
876
  return self.set_nu8(XCONF.UxbusReg.SET_IO_STOP_RESET, txdata, 2)
876
877
 
877
- def gripper_modbus_w16s(self, addr, value, length):
878
+ def gripper_modbus_w16s(self, addr, value, count):
878
879
  txdata = bytes([XCONF.GRIPPER_ID])
879
880
  txdata += bytes([0x10])
880
881
  txdata += convert.u16_to_bytes(addr)
881
- txdata += convert.u16_to_bytes(length)
882
- txdata += bytes([length * 2])
882
+ txdata += convert.u16_to_bytes(count)
883
+ txdata += bytes([count * 2])
883
884
  txdata += value
884
- ret = self.tgpio_set_modbus(txdata, length * 2 + 7)
885
+ ret = self.tgpio_set_modbus_func(txdata, count * 2 + 7)
885
886
  return ret
886
887
 
887
- def gripper_modbus_r16s(self, addr, length):
888
+ def gripper_modbus_r16s(self, addr, count):
888
889
  txdata = bytes([XCONF.GRIPPER_ID])
889
890
  txdata += bytes([0x03])
890
891
  txdata += convert.u16_to_bytes(addr)
891
- txdata += convert.u16_to_bytes(length)
892
- ret = self.tgpio_set_modbus(txdata, 6)
892
+ txdata += convert.u16_to_bytes(count)
893
+ ret = self.tgpio_set_modbus_func(txdata, 6)
893
894
  return ret
894
895
 
895
896
  def gripper_modbus_set_en(self, value):
@@ -1207,8 +1208,11 @@ class UxbusCmd(object):
1207
1208
  def ft_sensor_app_get(self):
1208
1209
  return self.get_nu8(XCONF.UxbusReg.FTSENSOR_GET_APP, 1)
1209
1210
 
1210
- def ft_sensor_get_data(self, is_new=True):
1211
- return self.get_nfp32(XCONF.UxbusReg.FTSENSOR_GET_DATA if is_new else XCONF.UxbusReg.FTSENSOR_GET_DATA_OLD, 6)
1211
+ def ft_sensor_get_data(self, is_new=True, is_raw=False):
1212
+ if is_new and is_raw:
1213
+ return self.get_nfp32_with_datas(XCONF.UxbusReg.FTSENSOR_GET_DATA, [1], 1, 6)
1214
+ else:
1215
+ return self.get_nfp32(XCONF.UxbusReg.FTSENSOR_GET_DATA if is_new else XCONF.UxbusReg.FTSENSOR_GET_DATA_OLD, 6)
1212
1216
 
1213
1217
  def ft_sensor_get_config(self):
1214
1218
  ret = self.get_nu8(XCONF.UxbusReg.FTSENSOR_GET_CONFIG, 280)
@@ -1317,7 +1321,7 @@ class UxbusCmd(object):
1317
1321
  txdata += convert.u16_to_bytes(length)
1318
1322
  txdata += bytes([length * 2])
1319
1323
  txdata += value
1320
- ret = self.tgpio_set_modbus(txdata, length * 2 + 7, host_id=XCONF.LINEER_TRACK_HOST_ID, limit_sec=0.001)
1324
+ ret = self.tgpio_set_modbus_func(txdata, length * 2 + 7, host_id=XCONF.LINEER_TRACK_HOST_ID, limit_sec=0.001)
1321
1325
  return ret
1322
1326
 
1323
1327
  def track_modbus_r16s(self, addr, length, fcode=0x03):
@@ -1325,7 +1329,7 @@ class UxbusCmd(object):
1325
1329
  txdata += bytes([fcode])
1326
1330
  txdata += convert.u16_to_bytes(addr)
1327
1331
  txdata += convert.u16_to_bytes(length)
1328
- ret = self.tgpio_set_modbus(txdata, 6, host_id=XCONF.LINEER_TRACK_HOST_ID, limit_sec=0.001)
1332
+ ret = self.tgpio_set_modbus_func(txdata, 6, host_id=XCONF.LINEER_TRACK_HOST_ID, limit_sec=0.001)
1329
1333
  return ret
1330
1334
 
1331
1335
  def iden_tcp_load(self, estimated_mass=0):
@@ -0,0 +1 @@
1
+ __version__ = '1.16.0'
@@ -103,6 +103,8 @@ class XArmAPI(object):
103
103
  'set_suction_cup': self.set_vacuum_gripper,
104
104
  'get_ft_senfor_config': self.get_ft_sensor_config,
105
105
  'shutdown_system': self.system_control,
106
+ 'set_bio_gripper_position': self.set_bio_gripper_g2_position,
107
+ 'get_bio_gripper_position': self.get_bio_gripper_g2_position,
106
108
  }
107
109
 
108
110
  def __getattr__(self, item):
@@ -1820,26 +1822,49 @@ class XArmAPI(object):
1820
1822
 
1821
1823
  def get_gripper_position(self, **kwargs):
1822
1824
  """
1823
- Get the gripper position
1825
+ Get the gripper position (pulse)
1824
1826
 
1825
1827
  :return: tuple((code, pos)), only when code is 0, the returned result is correct.
1826
1828
  code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
1827
1829
  """
1828
1830
  return self._arm.get_gripper_position(**kwargs)
1829
1831
 
1832
+ def get_gripper_g2_position(self, **kwargs):
1833
+ """
1834
+ Get the position (mm) of the xArm Gripper G2
1835
+
1836
+ :return: tuple((code, pos)), only when code is 0, the returned result is correct.
1837
+ code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
1838
+ """
1839
+ return self._arm.get_gripper_g2_position(**kwargs)
1840
+
1830
1841
  def set_gripper_position(self, pos, wait=False, speed=None, auto_enable=False, timeout=None, **kwargs):
1831
1842
  """
1832
1843
  Set the gripper position
1833
1844
 
1834
1845
  :param pos: pos
1835
1846
  :param wait: wait or not, default is False
1836
- :param speed: speed,unit:r/min
1847
+ :param speed: speed, unit:r/min
1837
1848
  :param auto_enable: auto enable or not, default is False
1838
1849
  :param timeout: wait time, unit:second, default is 10s
1839
1850
  :return: code
1840
1851
  code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
1841
1852
  """
1842
1853
  return self._arm.set_gripper_position(pos, wait=wait, speed=speed, auto_enable=auto_enable, timeout=timeout, **kwargs)
1854
+
1855
+ def set_gripper_g2_position(self, pos, speed=100, force=50, wait=False, timeout=None, **kwargs):
1856
+ """
1857
+ Set the position of the xArm Gripper G2
1858
+
1859
+ :param pos: gripper pos between 0 and 84, (unit: mm)
1860
+ :param speed: gripper speed between 15 and 225, default is 100, (unit: mm/s)
1861
+ :param force: gripper force between 1 and 100, default is 50
1862
+ :param wait: whether to wait for the bio gripper motion complete, default is False
1863
+ :param timeout: maximum waiting time(unit: second), default is 10s, only valid if wait is True
1864
+ :return: code
1865
+ code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
1866
+ """
1867
+ return self._arm.set_gripper_g2_position(pos, speed=speed, force=force, wait=wait, timeout=timeout, **kwargs)
1843
1868
 
1844
1869
  def set_gripper_speed(self, speed, **kwargs):
1845
1870
  """
@@ -2844,13 +2869,22 @@ class XArmAPI(object):
2844
2869
 
2845
2870
  return self._arm.set_bio_gripper_force(force)
2846
2871
 
2847
- def set_bio_gripper_position(self, pos, speed=0, force=100, wait=True, timeout=5, **kwargs):
2872
+ def get_bio_gripper_g2_position(self, **kwargs):
2848
2873
  """
2849
- Set the bio gripper position
2874
+ Get the position (mm) of the BIO Gripper G2
2850
2875
 
2851
- :param pos: gripper pos between 71 and 150
2852
- :param speed: gripper speed between 0 and 4500
2853
- :param force: gripper force between 10 and 100
2876
+ :return: tuple((code, pos)), only when code is 0, the returned result is correct.
2877
+ code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
2878
+ """
2879
+ return self._arm.get_bio_gripper_g2_position(**kwargs)
2880
+
2881
+ def set_bio_gripper_g2_position(self, pos, speed=2000, force=100, wait=True, timeout=5, **kwargs):
2882
+ """
2883
+ Set the position of BIO Gripper G2
2884
+
2885
+ :param pos: gripper pos between 71 and 150, (unit: mm)
2886
+ :param speed: gripper speed between 500 and 4500, default is 2000, (unit: pulse/s)
2887
+ :param force: gripper force between 1 and 100, default is 100
2854
2888
  :param wait: whether to wait for the robotiq motion to complete, default is True
2855
2889
  :param timeout: maximum waiting time(unit: second), default is 5, only available if wait=True
2856
2890
 
@@ -2858,7 +2892,7 @@ class XArmAPI(object):
2858
2892
  code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
2859
2893
  robotiq_response: See the robotiq documentation
2860
2894
  """
2861
- return self._arm.set_bio_gripper_position(pos, speed=speed, force=force, wait=wait, timeout=timeout, **kwargs)
2895
+ return self._arm.set_bio_gripper_g2_position(pos, speed=speed, force=force, wait=wait, timeout=timeout, **kwargs)
2862
2896
 
2863
2897
  def open_bio_gripper(self, speed=0, wait=True, timeout=5, **kwargs):
2864
2898
  """
@@ -2967,6 +3001,9 @@ class XArmAPI(object):
2967
3001
  """
2968
3002
  return self._arm.set_control_modbus_baudrate(baud)
2969
3003
 
3004
+ def set_tgpio_modbus_use_503_port(self, use_503_port=True):
3005
+ return self._arm.set_tgpio_modbus_use_503_port(use_503_port)
3006
+
2970
3007
  def getset_tgpio_modbus_data(self, datas, min_res_len=0, host_id=9, is_transparent_transmission=False, use_503_port=False, **kwargs):
2971
3008
  """
2972
3009
  Send the modbus data to the tool gpio
@@ -2975,7 +3012,7 @@ class XArmAPI(object):
2975
3012
  :param min_res_len: the minimum length of modbus response data. Used to check the data length, if not specified, no check
2976
3013
  :param host_id: host_id, default is 9 (TGPIO_HOST_ID)
2977
3014
  9: END RS485
2978
- 10: CONTROLLER RS485
3015
+ 11: CONTROLLER RS485
2979
3016
  :param is_transparent_transmission: whether to choose transparent transmission, default is False
2980
3017
  Note: only available if firmware_version >= 1.11.0
2981
3018
  :param use_503_port: whether to use port 503 for communication, default is False
@@ -3039,11 +3076,17 @@ class XArmAPI(object):
3039
3076
  self.set_collision_tool_model(21, radius=45, height=137)
3040
3077
  :param radius: the radius of cylinder, (unit: mm)
3041
3078
  :param height: the height of cylinder, (unit: mm)
3079
+ :param x_offset: offset in the x direction, (unit: mm)
3080
+ :param y_offset: offset in the y direction, (unit: mm)
3081
+ :param z_offset: offset in the z direction, (unit: mm)
3042
3082
  22: Cuboid, need additional parameters x, y, z
3043
3083
  self.set_collision_tool_model(22, x=234, y=323, z=23)
3044
3084
  :param x: the length of the cuboid in the x coordinate direction, (unit: mm)
3045
3085
  :param y: the length of the cuboid in the y coordinate direction, (unit: mm)
3046
3086
  :param z: the length of the cuboid in the z coordinate direction, (unit: mm)
3087
+ :param x_offset: offset in the x direction, (unit: mm)
3088
+ :param y_offset: offset in the y direction, (unit: mm)
3089
+ :param z_offset: offset in the z direction, (unit: mm)
3047
3090
  :param args: additional parameters
3048
3091
  :param kwargs: additional parameters
3049
3092
  :return: code
@@ -3342,19 +3385,21 @@ class XArmAPI(object):
3342
3385
  """
3343
3386
  return self._arm.ft_sensor_app_get()
3344
3387
 
3345
- def get_ft_sensor_data(self):
3388
+ def get_ft_sensor_data(self, is_raw=False):
3346
3389
  """
3347
3390
  Get the data of the Six-axis Force Torque Sensor
3348
3391
  Note:
3349
3392
  1. only available if firmware_version >= 1.8.3
3350
3393
  2. the Six-axis Force Torque Sensor is required (the third party is not currently supported)
3351
3394
 
3395
+ :param is_raw: get the raw data or not.
3396
+ 1. only available if firmware_version >= 2.6.109
3352
3397
  :return: tuple((code, exe_ft))
3353
3398
  code: See the [API Code Documentation](./xarm_api_code.md#api-code) for details.
3354
3399
  ft_data: only when code is 0, the returned result is correct.
3355
3400
  Note: The external force detection value of the Six-axis Force Torque Sensor after filtering, load and offset compensation
3356
3401
  """
3357
- return self._arm.get_ft_sensor_data()
3402
+ return self._arm.get_ft_sensor_data(is_raw=is_raw)
3358
3403
 
3359
3404
  def get_ft_sensor_config(self):
3360
3405
  """