rainbow-rb-sdk 0.0.9.dev42__tar.gz → 0.0.9.dev44__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 (72) hide show
  1. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/PKG-INFO +12 -9
  2. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/README.md +6 -3
  3. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/pyproject.toml +6 -6
  4. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/__init__.py +6 -1
  5. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_control.py +7 -6
  6. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_move.py +17 -5
  7. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_status.py +20 -0
  8. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/base.py +2 -2
  9. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate.py +5 -0
  10. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_config.py +39 -0
  11. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_move.py +30 -17
  12. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_point.py +6 -0
  13. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_program.py +16 -1
  14. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/manipulate_sdk/manipulate_safety.py +79 -0
  15. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_service.py +4 -4
  16. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/plugin.py +40 -7
  17. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/program_sdk/__init__.py +2 -0
  18. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/program_sdk/client_modules.pyi +115 -14
  19. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/program_sdk/external_so_usage_example.py +113 -0
  20. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/program_sdk/mechmind_vision.pyi +174 -0
  21. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/program_sdk/plugin_context.py +174 -0
  22. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/program_sdk/plugin_main_example.py +43 -0
  23. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/program_sdk/program.py +238 -6
  24. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/program_sdk/program_interface.py +396 -9
  25. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/rby1.py +293 -0
  26. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/rby1_sdk/base.py +110 -29
  27. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/rby1_sdk/client.py +148 -0
  28. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/rby1_sdk/config.py +3 -4
  29. rainbow_rb_sdk-0.0.9.dev44/src/rainbow/rb_sdk/rby1_sdk/control.py +753 -0
  30. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/rby1_sdk/state.py +83 -0
  31. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/schema/program_schema.py +11 -0
  32. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow_rb_sdk.egg-info/PKG-INFO +12 -9
  33. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow_rb_sdk.egg-info/SOURCES.txt +5 -0
  34. rainbow_rb_sdk-0.0.9.dev44/src/rainbow_rb_sdk.egg-info/requires.txt +7 -0
  35. rainbow_rb_sdk-0.0.9.dev42/src/rainbow/rb_sdk/rby1.py +0 -71
  36. rainbow_rb_sdk-0.0.9.dev42/src/rainbow/rb_sdk/rby1_sdk/client.py +0 -70
  37. rainbow_rb_sdk-0.0.9.dev42/src/rainbow/rb_sdk/rby1_sdk/control.py +0 -194
  38. rainbow_rb_sdk-0.0.9.dev42/src/rainbow_rb_sdk.egg-info/requires.txt +0 -7
  39. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/setup.cfg +0 -0
  40. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr.py +0 -0
  41. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/__init__.py +0 -0
  42. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_accessory.py +0 -0
  43. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_capability.py +0 -0
  44. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_file.py +0 -0
  45. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_localization.py +0 -0
  46. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_map.py +0 -0
  47. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_program.py +0 -0
  48. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_sensor.py +0 -0
  49. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/amr_setting.py +0 -0
  50. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/amr_sdk/schema/__init__.py +0 -0
  51. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/base_sdk/__init__.py +0 -0
  52. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/base_sdk/base_schema.py +0 -0
  53. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/__init__.py +0 -0
  54. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_get_data.py +0 -0
  55. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_io.py +0 -0
  56. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_maintenance.py +0 -0
  57. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/manipulate_state.py +0 -0
  58. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/schema/__init__.py +0 -0
  59. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_config_schema.py +0 -0
  60. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_io_schema.py +0 -0
  61. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_move_schema.py +0 -0
  62. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/manipulate_sdk/schema/manipulate_program_schema.py +0 -0
  63. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/program_sdk/test_binding.py +0 -0
  64. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/rby1_sdk/__init__.py +0 -0
  65. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/rby1_sdk/exceptions.py +0 -0
  66. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/schema/__init__.py +0 -0
  67. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/schema/amr_schema.py +0 -0
  68. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/schema/base_schema.py +0 -0
  69. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/schema/manipulate_schema.py +0 -0
  70. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow/rb_sdk/schema/rby1_schema.py +0 -0
  71. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow_rb_sdk.egg-info/dependency_links.txt +0 -0
  72. {rainbow_rb_sdk-0.0.9.dev42 → rainbow_rb_sdk-0.0.9.dev44}/src/rainbow_rb_sdk.egg-info/top_level.txt +0 -0
@@ -1,15 +1,15 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rainbow-rb-sdk
3
- Version: 0.0.9.dev42
3
+ Version: 0.0.9.dev44
4
4
  Summary: Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동
5
5
  Author-email: Derek <dfd1123@rainbow-robotics.com>
6
6
  Requires-Python: >=3.11
7
7
  Description-Content-Type: text/markdown
8
- Requires-Dist: rainbow-rb-utils==0.0.9.dev42
9
- Requires-Dist: rainbow-rb-zenoh==0.0.9.dev42
10
- Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev42
11
- Requires-Dist: rainbow-rb-schemas==0.0.9.dev42
12
- Requires-Dist: rainbow-rb-log==0.0.9.dev42
8
+ Requires-Dist: rainbow-rb-utils==0.0.9.dev44
9
+ Requires-Dist: rainbow-rb-zenoh==0.0.9.dev44
10
+ Requires-Dist: rainbow-rb-flat-buffers==0.0.9.dev44
11
+ Requires-Dist: rainbow-rb-schemas==0.0.9.dev44
12
+ Requires-Dist: rainbow-rb-log==0.0.9.dev44
13
13
  Requires-Dist: python-socketio>=5.13.0
14
14
  Requires-Dist: rby1-sdk>=0.9.1
15
15
 
@@ -285,10 +285,13 @@ sdk.state.call_servocontrol(robot_model="C500920", control=1)
285
285
  ```python
286
286
  from rb_sdk import RBRby1SDK
287
287
 
288
- sdk = RBRby1SDK(endpoint="192.168.30.1:50051", model=None, auto_connect=True)
288
+ sdk = RBRby1SDK() # 내부: 127.0.0.1:50051 background probing
289
289
 
290
- print(sdk.connected)
291
- print(sdk.whoami())
290
+ # 외부/다른 host 접근
291
+ # 생성 직후 바로 호출하면 pending local probing 결과는 폐기된다.
292
+ await sdk.connect(host="192.168.100.51")
293
+
294
+ print(sdk.models)
292
295
 
293
296
  await sdk.control.power_on(robot_model="a")
294
297
  await sdk.control.servo_on(robot_model="a")
@@ -270,10 +270,13 @@ sdk.state.call_servocontrol(robot_model="C500920", control=1)
270
270
  ```python
271
271
  from rb_sdk import RBRby1SDK
272
272
 
273
- sdk = RBRby1SDK(endpoint="192.168.30.1:50051", model=None, auto_connect=True)
273
+ sdk = RBRby1SDK() # 내부: 127.0.0.1:50051 background probing
274
274
 
275
- print(sdk.connected)
276
- print(sdk.whoami())
275
+ # 외부/다른 host 접근
276
+ # 생성 직후 바로 호출하면 pending local probing 결과는 폐기된다.
277
+ await sdk.connect(host="192.168.100.51")
278
+
279
+ print(sdk.models)
277
280
 
278
281
  await sdk.control.power_on(robot_model="a")
279
282
  await sdk.control.servo_on(robot_model="a")
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "rainbow-rb-sdk"
7
- version = "0.0.9.dev42"
7
+ version = "0.0.9.dev44"
8
8
  requires-python = ">=3.11"
9
9
  description = "Rainbow Robotics 통합 Python SDK — AMR, 매니퓰레이터, RB-Y1 휴머노이드와 Rainbow Robot Service(common) 연동"
10
10
  authors = [
@@ -13,11 +13,11 @@ authors = [
13
13
  readme = "README.md"
14
14
 
15
15
  dependencies = [
16
- "rainbow-rb-utils==0.0.9.dev42",
17
- "rainbow-rb-zenoh==0.0.9.dev42",
18
- "rainbow-rb-flat-buffers==0.0.9.dev42",
19
- "rainbow-rb-schemas==0.0.9.dev42",
20
- "rainbow-rb-log==0.0.9.dev42",
16
+ "rainbow-rb-utils==0.0.9.dev44",
17
+ "rainbow-rb-zenoh==0.0.9.dev44",
18
+ "rainbow-rb-flat-buffers==0.0.9.dev44",
19
+ "rainbow-rb-schemas==0.0.9.dev44",
20
+ "rainbow-rb-log==0.0.9.dev44",
21
21
  "python-socketio>=5.13.0",
22
22
  "rby1-sdk>=0.9.1",
23
23
  ]
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  from typing import TYPE_CHECKING
9
9
 
10
- __all__ = ["RBAmrSDK", "RBManipulateSDK", "RBBaseSDK", "RBRby1SDK", "RBPluginCall"]
10
+ __all__ = ["RBAmrSDK", "RBManipulateSDK", "RBBaseSDK", "RBRby1SDK", "RBPluginCall", "PluginProgramContext"]
11
11
 
12
12
  # 타입체커/IDE(자동완성)용: 여기서는 import 해도 런타임에 실행되지 않음
13
13
  if TYPE_CHECKING:
@@ -15,6 +15,7 @@ if TYPE_CHECKING:
15
15
  from .base import RBBaseSDK
16
16
  from .manipulate import RBManipulateSDK
17
17
  from .plugin import RBPluginCall
18
+ from .program_sdk import PluginProgramContext
18
19
  from .rby1 import RBRby1SDK
19
20
 
20
21
 
@@ -39,6 +40,10 @@ def __getattr__(name: str):
39
40
  from .plugin import RBPluginCall # noqa: PLC0415
40
41
  return RBPluginCall
41
42
 
43
+ if name == "PluginProgramContext":
44
+ from .program_sdk import PluginProgramContext # noqa: PLC0415
45
+ return PluginProgramContext
46
+
42
47
  raise AttributeError(name)
43
48
 
44
49
 
@@ -21,7 +21,7 @@ from rainbow.rb_flat_buffers.SLAMNAV.RequestSetObsBox import RequestSetObsBoxT
21
21
  from rainbow.rb_flat_buffers.SLAMNAV.RequestSetSafetyField import RequestSetSafetyFieldT
22
22
  from rainbow.rb_flat_buffers.SLAMNAV.RequestSetSafetyFlag import RequestSetSafetyFlagT
23
23
  from rainbow.rb_flat_buffers.SLAMNAV.RequestSetSafetyIo import RequestSetSafetyIoT
24
- from rainbow.rb_flat_buffers.SLAMNAV.RequestStreamFrequency import RequestStreamFrequencyT
24
+ from rainbow.rb_flat_buffers.SLAMNAV.RequestSetStreamFrequency import RequestSetStreamFrequencyT
25
25
  from rainbow.rb_flat_buffers.SLAMNAV.RequestUndock import RequestUndockT
26
26
  from rainbow.rb_flat_buffers.SLAMNAV.ResponseChargeTrigger import ResponseChargeTriggerT
27
27
  from rainbow.rb_flat_buffers.SLAMNAV.ResponseDock import ResponseDockT
@@ -38,7 +38,7 @@ from rainbow.rb_flat_buffers.SLAMNAV.ResponseSetObsBox import ResponseSetObsBoxT
38
38
  from rainbow.rb_flat_buffers.SLAMNAV.ResponseSetSafetyField import ResponseSetSafetyFieldT
39
39
  from rainbow.rb_flat_buffers.SLAMNAV.ResponseSetSafetyFlag import ResponseSetSafetyFlagT
40
40
  from rainbow.rb_flat_buffers.SLAMNAV.ResponseSetSafetyIo import ResponseSetSafetyIoT
41
- from rainbow.rb_flat_buffers.SLAMNAV.ResponseStreamFrequency import ResponseStreamFrequencyT
41
+ from rainbow.rb_flat_buffers.SLAMNAV.ResponseSetStreamFrequency import ResponseSetStreamFrequencyT
42
42
  from rainbow.rb_flat_buffers.SLAMNAV.ResponseUndock import ResponseUndockT
43
43
  from rainbow.rb_flat_buffers.SLAMNAV.ResultControlDock import ResultControlDockT
44
44
  from rainbow.rb_flat_buffers.SLAMNAV.SafetyFlag import SafetyFlagT
@@ -353,6 +353,7 @@ class RBAmrControlSDK(RBBaseSDK):
353
353
  # 1) RequestGetSafetyIoT 객체 생성
354
354
  req = RequestGetSafetyIoT()
355
355
  req.id = req_id
356
+
356
357
  # 2) 요청 전송
357
358
  result = self.zenoh_client.query_one(
358
359
  f"amr/{robot_model}/control/getSafetyIo",
@@ -850,7 +851,7 @@ class RBAmrControlSDK(RBBaseSDK):
850
851
  frequency: int,
851
852
  req_id: str | None = None,
852
853
  flow_manager_args: FlowManagerArgs | None = None,
853
- ) -> ResponseStreamFrequencyT:
854
+ ) -> ResponseSetStreamFrequencyT:
854
855
  """
855
856
  [스트림 주파수 제어]
856
857
  - req_id: 요청 ID
@@ -863,16 +864,16 @@ class RBAmrControlSDK(RBBaseSDK):
863
864
  req_id = str(uuid.uuid4())
864
865
 
865
866
  # 1) RequestStreamFrequencyT 객체 생성
866
- req = RequestStreamFrequencyT()
867
+ req = RequestSetStreamFrequencyT()
867
868
  req.id = req_id
868
869
  req.target = target
869
870
  req.frequency = frequency
870
871
 
871
872
  # 2) 요청 전송
872
873
  result = self.zenoh_client.query_one(
873
- f"amr/{robot_model}/control/streamFrequency",
874
+ f"amr/{robot_model}/control/setStreamFrequency",
874
875
  flatbuffer_req_obj=req,
875
- flatbuffer_res_T_class=ResponseStreamFrequencyT,
876
+ flatbuffer_res_T_class=ResponseSetStreamFrequencyT,
876
877
  flatbuffer_buf_size=125,
877
878
  timeout=3,
878
879
  )
@@ -4,6 +4,7 @@ import uuid
4
4
  from contextlib import suppress
5
5
  from typing import Any
6
6
 
7
+ from rainbow.rb_flat_buffers.SLAMNAV.ActionEntry import ActionEntryT
7
8
  from rainbow.rb_flat_buffers.SLAMNAV.MoveJog import MoveJogT
8
9
  from rainbow.rb_flat_buffers.SLAMNAV.MovePose import MovePoseT
9
10
  from rainbow.rb_flat_buffers.SLAMNAV.MoveStatus import MoveStatusT
@@ -198,7 +199,11 @@ class RBAmrMoveSDK(RBBaseSDK):
198
199
  print("[AmrMoveSDK] Move Goal Response : ", result["dict_payload"].get("result"), result["dict_payload"].get("message"), flush=True)
199
200
 
200
201
  if flow_manager_args is not None:
201
- print(result["dict_payload"].get("result"))
202
+ # variable_name = flow_manager_args.args.get("variable_name", None)
203
+ # print(">>>>>>> variable Name : ",variable_name,flush=True)
204
+ # print(result["dict_payload"].get("result"))
205
+ # flow_manager_args.ctx.update_local_variables({"AMR_TE33ST": result["dict_payload"].get("result")})
206
+ # flow_manager_args.done()
202
207
  if result["dict_payload"].get("result") == "reject":
203
208
  raise RuntimeError(result["dict_payload"].get("message"))
204
209
 
@@ -731,6 +736,8 @@ class RBAmrMoveSDK(RBBaseSDK):
731
736
 
732
737
  return result["obj_payload"]
733
738
 
739
+ # def send_multi_arrival(self,)
740
+
734
741
  def send_multi_enqueue(self, robot_model: str, action_id: str, predecessor_id: str, from_node: str, to_node: str) -> ResponseEnqueueActionT:
735
742
  """
736
743
  [멀티 edgeAction을 추가]
@@ -742,12 +749,16 @@ class RBAmrMoveSDK(RBBaseSDK):
742
749
  - flow_manager_args: FlowManagerArgs 객체
743
750
  - ResponseMultiPathT 객체 반환
744
751
  """
752
+
753
+ print(f"SDK Multi Enqueue {robot_model}, {action_id}, {predecessor_id}",flush=True)
745
754
  # 1) RequestEnqueueActionT 객체 생성
746
755
  req = RequestEnqueueActionT()
747
- req.action_id = action_id
748
- req.predecessor_id = predecessor_id
749
- req.from_node = from_node
750
- req.to_node = to_node
756
+ action = ActionEntryT()
757
+ action.actionId = action_id
758
+ action.predecessorId = predecessor_id
759
+ action.fromNode = from_node
760
+ action.toNode = to_node
761
+ req.action = action
751
762
 
752
763
  # 2) 요청 전송
753
764
  result = self.zenoh_client.query_one(
@@ -757,6 +768,7 @@ class RBAmrMoveSDK(RBBaseSDK):
757
768
  flatbuffer_buf_size=125,
758
769
  )
759
770
 
771
+ print(f"SDK Multi Enqueue Response {robot_model}, {result.get("dict_payload")}",flush=True)
760
772
  # 3) 결과 처리 및 반환
761
773
  if result["obj_payload"] is None:
762
774
  raise RuntimeError("Call Multi Path failed: obj_payload is None")
@@ -3,6 +3,7 @@ from typing import Any
3
3
  from rainbow.rb_flat_buffers.SLAMNAV.LidarData import LidarDataT
4
4
  from rainbow.rb_flat_buffers.SLAMNAV.MoveStatus import MoveStatusT
5
5
  from rainbow.rb_flat_buffers.SLAMNAV.Path import PathT
6
+ from rainbow.rb_flat_buffers.SLAMNAV.ResponseGetInfoCategory import ResponseGetInfoCategoryT
6
7
  from rainbow.rb_flat_buffers.SLAMNAV.Status import StatusT
7
8
  from rainbow.rb_schemas.sdk import FlowManagerArgs
8
9
 
@@ -56,6 +57,25 @@ class RBAmrStatusSDK(RBBaseSDK):
56
57
 
57
58
  return obj
58
59
 
60
+ def get_info_category(self, robot_model: str, flow_manager_args: FlowManagerArgs | None = None) -> ResponseGetInfoCategoryT:
61
+ result = self.zenoh_client.query_one(
62
+ f"amr/{robot_model}/info/category",
63
+ flatbuffer_res_T_class=ResponseGetInfoCategoryT,
64
+ flatbuffer_buf_size=2048
65
+ )
66
+
67
+ # 3) 결과 처리 및 반환
68
+ if result.get("obj_payload") is None:
69
+ raise RuntimeError("Call Info Category failed: obj_payload is None")
70
+
71
+ if flow_manager_args is not None:
72
+ if result.get("dict_payload").get("result") == "accept" or result.get("dict_payload").get("result") == "success":
73
+ flow_manager_args.done()
74
+ else:
75
+ raise RuntimeError(result.get("dict_payload").get("message"))
76
+
77
+ return result["obj_payload"]
78
+
59
79
  async def get_lidar2d(self, robot_model: str, flow_manager_args: FlowManagerArgs | None = None) -> dict[str, Any]:
60
80
  """
61
81
  [라이다 2D 조회]
@@ -195,7 +195,7 @@ class RBBaseSDK:
195
195
  # disconnect() 후 명시적 close 상태이면 auto-reconnect를 막는다.
196
196
  # C++ manually_closed_ 플래그를 Python facade를 통해 확인.
197
197
  zc = getattr(sdk_inst, "zenoh_client", None)
198
- if zc is not None and getattr(zc, "manually_closed", False):
198
+ if zc is not None and getattr(zc, "manually_closed", False) is True:
199
199
  raise RuntimeError(
200
200
  "Zenoh session was explicitly closed via disconnect(). "
201
201
  "Call connect() before using the SDK again."
@@ -239,7 +239,7 @@ class RBBaseSDK:
239
239
  if args and isinstance(args[0], RBBaseSDK):
240
240
  sdk_inst = args[0]
241
241
  zc = getattr(sdk_inst, "zenoh_client", None)
242
- if zc is not None and getattr(zc, "manually_closed", False):
242
+ if zc is not None and getattr(zc, "manually_closed", False) is True:
243
243
  raise RuntimeError(
244
244
  "Zenoh session was explicitly closed via disconnect(). "
245
245
  "Call connect() before using the SDK again."
@@ -10,6 +10,7 @@ from .manipulate_sdk.manipulate_maintenance import RBManipulateMaintenanceSDK
10
10
  from .manipulate_sdk.manipulate_move import RBManipulateMoveSDK
11
11
  from .manipulate_sdk.manipulate_point import RBManipulatePointSDK
12
12
  from .manipulate_sdk.manipulate_program import RBManipulateProgramSDK
13
+ from .manipulate_sdk.manipulate_safety import RBManipulateSafetySDK
13
14
  from .manipulate_sdk.manipulate_service import RBManipulateServiceSDK
14
15
 
15
16
 
@@ -40,6 +41,9 @@ class RBManipulateSDK(RBBaseSDK):
40
41
  maintenance: RBManipulateMaintenanceSDK
41
42
  """관리자 페이지 설정 집합"""
42
43
 
44
+ safety: RBManipulateSafetySDK
45
+ """Safety 페이지 설정 집합"""
46
+
43
47
  state: RBManipulateStateSDK
44
48
 
45
49
  def __init__(self):
@@ -54,3 +58,4 @@ class RBManipulateSDK(RBBaseSDK):
54
58
  self.point = RBManipulatePointSDK()
55
59
  self.service = RBManipulateServiceSDK()
56
60
  self.maintenance = RBManipulateMaintenanceSDK()
61
+ self.safety = RBManipulateSafetySDK()
@@ -23,6 +23,7 @@ from rainbow.rb_flat_buffers.IPC.Request_Save_User_Frame import Request_Save_Use
23
23
  from rainbow.rb_flat_buffers.IPC.Request_Set_AsciiFunctionCall import Request_Set_AsciiFunctionCallT
24
24
  from rainbow.rb_flat_buffers.IPC.Request_Set_DinFunctionMask import Request_Set_DinFunctionMaskT
25
25
  from rainbow.rb_flat_buffers.IPC.Request_Set_DoutFunctionMask import Request_Set_DoutFunctionMaskT
26
+ from rainbow.rb_flat_buffers.IPC.Request_Set_ExternalAxisSync import Request_Set_ExternalAxisSyncT
26
27
  from rainbow.rb_flat_buffers.IPC.Request_Set_Fixed_Speed_Mode import Request_Set_Fixed_Speed_ModeT
27
28
  from rainbow.rb_flat_buffers.IPC.Request_Set_Free_Drive import Request_Set_Free_DriveT
28
29
  from rainbow.rb_flat_buffers.IPC.Request_Set_JacobSpeedMode import Request_Set_JacobSpeedModeT
@@ -1630,3 +1631,41 @@ class RBManipulateConfigSDK(RBBaseSDK):
1630
1631
  flow_manager_args.done()
1631
1632
 
1632
1633
  return res["obj_payload"]
1634
+
1635
+ def set_external_axis_sync(
1636
+ self,
1637
+ *,
1638
+ robot_model: str,
1639
+ mode: int,
1640
+ flow_manager_args: FlowManagerArgs | None = None,
1641
+ ) -> Response_FunctionsT:
1642
+ """
1643
+ [Set External Axis Sync 호출 함수]
1644
+
1645
+ Args:
1646
+ robot_model: 로봇 모델명
1647
+ mode: 동기화 모드
1648
+ flow_manager_args: RB PFM을 쓸때 전달된 Flow Manager 인자 (done 콜백 등)
1649
+ """
1650
+ req = Request_Set_ExternalAxisSyncT()
1651
+ req.mode = mode
1652
+
1653
+ res = self.zenoh_client.query_one(
1654
+ f"{robot_model}/set_external_axis_sync",
1655
+ flatbuffer_req_obj=req,
1656
+ flatbuffer_res_T_class=Response_FunctionsT,
1657
+ flatbuffer_buf_size=8,
1658
+ timeout=3.0,
1659
+ )
1660
+
1661
+ if res["obj_payload"] is None:
1662
+ raise RuntimeError("Set External Axis Sync failed: obj_payload is None")
1663
+
1664
+ self.manipulate_return_value(
1665
+ "set_external_axis_sync", res["obj_payload"], flow_manager_args
1666
+ )
1667
+
1668
+ if flow_manager_args is not None:
1669
+ flow_manager_args.done()
1670
+
1671
+ return res["obj_payload"]
@@ -63,7 +63,6 @@ from rainbow.rb_flat_buffers.IPC.Response_Functions import Response_FunctionsT
63
63
  from rainbow.rb_flat_buffers.IPC.State_Core import State_Core
64
64
  from rainbow.rb_schemas.fbs_models.manipulate.v1.common_struct_models import MoveInput_TargetPD
65
65
  from rainbow.rb_schemas.sdk import FlowManagerArgs
66
- from rainbow.rb_utils.flow_manager import eval_value
67
66
  from rainbow.rb_utils.manipulate import validate_single_return_value
68
67
  from rainbow.rb_zenoh.client import CongestionControl, Priority, QueryResult
69
68
  from rainbow.rb_zenoh.schema import OverflowPolicy, SubscribeOptions
@@ -142,12 +141,10 @@ class RBManipulateMoveSDK(RBBaseSDK):
142
141
  async def _on_state(*, mv=None, unsubscribe=None, **_):
143
142
  nonlocal start_timestamp_u_sec_mono
144
143
 
145
- # print("awdawdaw adaw dawd aw awd awd awda awdadwa ad", flush=True)
146
-
147
144
  if state["finished"] or mv is None:
148
145
  return
149
146
 
150
- obj_payload = State_Core.GetRootAs(mv, 0)
147
+ obj_payload = State_Core.GetRootAs(mv, 0) # state_core의 flatbuffer payload 파싱
151
148
 
152
149
  # timestampUsecMono가 없으면 int의 최대값으로 비교
153
150
  timestamp_u_sec_mono = obj_payload.TimestampUsecMono()
@@ -173,18 +170,10 @@ class RBManipulateMoveSDK(RBBaseSDK):
173
170
  flow_manager_args.ctx.update_local_variables({variable_name: carte_x_ref})
174
171
 
175
172
  if finish_at is not None:
176
- parsed_finish_at = eval_value(
177
- finish_at,
178
- variables=flow_manager_args.ctx.variables,
179
- get_global_variable=flow_manager_args.ctx.get_global_variable,
180
- )
173
+ parsed_finish_at = flow_manager_args.ctx.eval_value(finish_at)
181
174
 
182
175
  if parsed_finish_at:
183
- parsed_stop_time = eval_value(
184
- stop_time,
185
- variables=flow_manager_args.ctx.variables,
186
- get_global_variable=flow_manager_args.ctx.get_global_variable,
187
- )
176
+ parsed_stop_time = flow_manager_args.ctx.eval_value(stop_time)
188
177
 
189
178
  if not isinstance(parsed_stop_time, float | int):
190
179
  raise RuntimeError("stop_time must be a number")
@@ -239,6 +228,7 @@ class RBManipulateMoveSDK(RBBaseSDK):
239
228
  target: MoveInputTargetSchema,
240
229
  reference_value: list[float | int] | None = None,
241
230
  speed: MoveInputSpeedSchema | None = None,
231
+ ext_axis: list[float] | None = None,
242
232
  flow_manager_args: FlowManagerArgs | None = None,
243
233
  ) -> Response_FunctionsT:
244
234
  """
@@ -299,6 +289,9 @@ class RBManipulateMoveSDK(RBBaseSDK):
299
289
  req.target = move_input_target
300
290
  req.speed = move_input_speed
301
291
 
292
+ if ext_axis is not None:
293
+ req.extAxis = ext_axis
294
+
302
295
  # 명령 전송
303
296
  res = self.zenoh_client.query_one(
304
297
  f"{robot_model}/call_move_j",
@@ -319,10 +312,13 @@ class RBManipulateMoveSDK(RBBaseSDK):
319
312
  target: MoveInputTargetSchema,
320
313
  reference_value: list[float | int] | None = None,
321
314
  speed: MoveInputSpeedSchema | None = None,
315
+ ext_axis: list[float] | None = None,
322
316
  flow_manager_args: FlowManagerArgs | None = None,
323
317
  ) -> Response_FunctionsT | None:
324
318
  """
325
319
  [협동로봇이 직선 공간 이동을 시작하는 명령 전송 함수]
320
+ 7축 모델일 경우 target["tar_values"]에 마지막 7번째 값으로 aa(ArmAngle)이 들어간다.
321
+
326
322
 
327
323
  Args:
328
324
  robot_model: 로봇 모델명
@@ -376,6 +372,9 @@ class RBManipulateMoveSDK(RBBaseSDK):
376
372
  req.speed.spdVelPara = speed.get("spd_vel_para", 250)
377
373
  req.speed.spdAccPara = speed.get("spd_acc_para", 1000)
378
374
 
375
+ if ext_axis is not None:
376
+ req.extAxis = ext_axis
377
+
379
378
  res = self.zenoh_client.query_one(
380
379
  f"{robot_model}/call_move_l",
381
380
  flatbuffer_req_obj=req,
@@ -422,6 +421,7 @@ class RBManipulateMoveSDK(RBBaseSDK):
422
421
  reference_value: list[float | int] | None = None,
423
422
  speed: MoveInputSpeedSchema | None = None,
424
423
  blend_type: MoveInputTypeSchema,
424
+ ext_axis: list[float] | None = None,
425
425
  flow_manager_args: FlowManagerArgs | None = None,
426
426
  ) -> Response_FunctionsT:
427
427
  """
@@ -489,6 +489,9 @@ class RBManipulateMoveSDK(RBBaseSDK):
489
489
  req.speed = move_input_speed
490
490
  req.type = move_input_type
491
491
 
492
+ if ext_axis is not None:
493
+ req.extAxis = ext_axis
494
+
492
495
  res = self.zenoh_client.query_one(
493
496
  f"{robot_model}/call_move_jb_add",
494
497
  flatbuffer_req_obj=req,
@@ -563,6 +566,7 @@ class RBManipulateMoveSDK(RBBaseSDK):
563
566
  reference_value: list[float | int] | None = None,
564
567
  speed: MoveInputSpeedSchema | None = None,
565
568
  blend_type: MoveInputTypeSchema,
569
+ ext_axis: list[float] | None = None,
566
570
  flow_manager_args: FlowManagerArgs | None = None,
567
571
  ) -> Response_FunctionsT:
568
572
  """
@@ -628,6 +632,9 @@ class RBManipulateMoveSDK(RBBaseSDK):
628
632
  req.speed = move_input_speed
629
633
  req.type = move_input_type
630
634
 
635
+ if ext_axis is not None:
636
+ req.extAxis = ext_axis
637
+
631
638
  res = self.zenoh_client.query_one(
632
639
  f"{robot_model}/call_move_lb_add",
633
640
  flatbuffer_req_obj=req,
@@ -781,6 +788,7 @@ class RBManipulateMoveSDK(RBBaseSDK):
781
788
  *,
782
789
  robot_model: str,
783
790
  target: MoveInputTargetSchema,
791
+ ext_axis: list[float] | None = None,
784
792
  flow_manager_args: FlowManagerArgs | None = None,
785
793
  ) -> Response_FunctionsT:
786
794
  """
@@ -798,6 +806,9 @@ class RBManipulateMoveSDK(RBBaseSDK):
798
806
  req.target.tarFrame = target["tar_frame"]
799
807
  req.target.tarUnit = target["tar_unit"]
800
808
 
809
+ if ext_axis is not None:
810
+ req.extAxis = ext_axis
811
+
801
812
  res = self.zenoh_client.query_one(
802
813
  f"{robot_model}/call_smoothjog_j",
803
814
  flatbuffer_req_obj=req,
@@ -890,6 +901,7 @@ class RBManipulateMoveSDK(RBBaseSDK):
890
901
  robot_model: str,
891
902
  target: MoveInputTargetSchema,
892
903
  speed: MoveInputSpeedSchema,
904
+ ext_axis: list[float] | None = None,
893
905
  flow_manager_args: FlowManagerArgs | None = None,
894
906
  ) -> Response_FunctionsT:
895
907
  """
@@ -909,12 +921,13 @@ class RBManipulateMoveSDK(RBBaseSDK):
909
921
  req.target.tarFrame = target["tar_frame"]
910
922
  req.target.tarUnit = target["tar_unit"]
911
923
 
912
- req.speed = MoveInput_SpeedT()
913
-
914
924
  req.speed.spdMode = speed.get("spd_mode", 1)
915
925
  req.speed.spdVelPara = speed.get("spd_vel_para", 60)
916
926
  req.speed.spdAccPara = speed.get("spd_acc_para", 120)
917
927
 
928
+ if ext_axis is not None:
929
+ req.extAxis = ext_axis
930
+
918
931
  res = self.zenoh_client.query_one(
919
932
  f"{robot_model}/call_tickjog_j",
920
933
  flatbuffer_req_obj=req,
@@ -1292,7 +1305,7 @@ class RBManipulateMoveSDK(RBBaseSDK):
1292
1305
  conv_type: int,
1293
1306
  conv_speed: float,
1294
1307
  conv_acc_time_sec: float,
1295
- conv_ref_points: list[str],
1308
+ conv_ref_points: list[list[float]],
1296
1309
  flow_manager_args: FlowManagerArgs | None = None,
1297
1310
  ) -> Response_FunctionsT:
1298
1311
  """
@@ -38,6 +38,7 @@ class RBManipulatePointSDK(RBBaseSDK):
38
38
  spd_mode: int,
39
39
  spd_vel_para: float,
40
40
  spd_acc_para: float,
41
+ ext_axis: list[float] | None = None,
41
42
  method: int | None = None,
42
43
  tcp_num: int = -1,
43
44
  flow_manager_args: FlowManagerArgs | None = None,
@@ -57,6 +58,7 @@ class RBManipulatePointSDK(RBBaseSDK):
57
58
  spd_mode: 속도 측정 설정 방식 (0: %기반 설정, 1: 절대값(물리값))
58
59
  spd_vel_para: 속도
59
60
  spd_acc_para: 가속도
61
+ ext_axis: 부가축 좌표 정보 (기본값: None)
60
62
  method: 메서드 (0: 기본값, 1: 툴 좌표계 사용)
61
63
  tcp_num: TCP 번호 (-1: 기본값)
62
64
  flow_manager_args: RB PFM을 쓸때 전달된 Flow Manager 인자 (done 콜백 등)
@@ -81,6 +83,7 @@ class RBManipulatePointSDK(RBBaseSDK):
81
83
  target=target,
82
84
  reference_value=tar_frame_reference_point,
83
85
  speed=speed,
86
+ ext_axis=ext_axis,
84
87
  flow_manager_args=flow_manager_args,
85
88
  )
86
89
  elif move_type == "L":
@@ -89,6 +92,7 @@ class RBManipulatePointSDK(RBBaseSDK):
89
92
  target=target,
90
93
  reference_value=tar_frame_reference_point,
91
94
  speed=speed,
95
+ ext_axis=ext_axis,
92
96
  flow_manager_args=flow_manager_args,
93
97
  )
94
98
  elif move_type == "JB":
@@ -104,6 +108,7 @@ class RBManipulatePointSDK(RBBaseSDK):
104
108
  pnt_type=pnt_type,
105
109
  pnt_para=pnt_para,
106
110
  ),
111
+ ext_axis=ext_axis,
107
112
  flow_manager_args=flow_manager_args,
108
113
  )
109
114
  elif move_type == "LB":
@@ -119,6 +124,7 @@ class RBManipulatePointSDK(RBBaseSDK):
119
124
  pnt_type=pnt_type,
120
125
  pnt_para=pnt_para,
121
126
  ),
127
+ ext_axis=ext_axis,
122
128
  flow_manager_args=flow_manager_args,
123
129
  )
124
130
  elif move_type == "XB":
@@ -24,6 +24,7 @@ from rainbow.rb_schemas.fbs_models.manipulate.v1.func_set_models import (
24
24
  Request_Set_AsciiFunctionCallPD,
25
25
  Request_Set_DinFunctionMaskPD,
26
26
  Request_Set_DoutFunctionMaskPD,
27
+ Request_Set_ExternalAxisSyncPD,
27
28
  Request_Set_Free_DrivePD,
28
29
  Request_Set_JacobSpeedModePD,
29
30
  Request_Set_Joint_ImpedancePD,
@@ -179,7 +180,9 @@ class RBManipulateProgramSDK(RBBaseSDK):
179
180
  )
180
181
 
181
182
  if res["obj_payload"] is None:
182
- raise RuntimeError(f"Call Program After failed: obj_payload is None => {robot_model}")
183
+ raise RuntimeError(
184
+ f"Call Program After failed: obj_payload is None => {robot_model}"
185
+ )
183
186
 
184
187
  return res["obj_payload"]
185
188
  except (ZenohNoReply, ZenohReplyError) as e:
@@ -513,6 +516,7 @@ class RBManipulateProgramSDK(RBBaseSDK):
513
516
  vibration_motion_based: Request_Wrapper_VibrationMotion_OnPD
514
517
  | Request_Wrapper_VibrationMotion_OffPD
515
518
  | None = None,
519
+ external_axis_sync: Request_Set_ExternalAxisSyncPD | None = None,
516
520
  flow_manager_args: FlowManagerArgs | None = None,
517
521
  ) -> Response_FunctionsT:
518
522
  """
@@ -541,6 +545,7 @@ class RBManipulateProgramSDK(RBBaseSDK):
541
545
  jacobian_based_speed_control: 자코비안 기반 속도 제어
542
546
  self_vibration_mode: 토크 기반 진동 제어
543
547
  vibration_motion_based: 모션 기반 진동 제어
548
+ external_axis_sync: 부가 축 동기화
544
549
  flow_manager_args: RB PFM을 쓸때 전달된 Flow Manager 인자 (done 콜백 등)
545
550
  """
546
551
 
@@ -852,6 +857,16 @@ class RBManipulateProgramSDK(RBBaseSDK):
852
857
  else:
853
858
  raise RuntimeError("Unknown vibration motion type")
854
859
 
860
+ elif option == "EXTERNAL_AXIS_SYNC":
861
+ if external_axis_sync is None:
862
+ raise RuntimeError("External Axis Sync failed: external_axis_sync is required")
863
+
864
+ self._manipulate_config_sdk.set_external_axis_sync(
865
+ robot_model=robot_model,
866
+ mode=external_axis_sync["mode"],
867
+ flow_manager_args=flow_manager_args,
868
+ )
869
+
855
870
  def call_coredata_pub_frequency(
856
871
  self, *, robot_model: str, frequency: int
857
872
  ) -> Response_FunctionsT: