Files
Denso/srcs/RobotNet10/RobotApp/RobotNet10.RobotApp/Navigation/NAVIGATION_API.md
2026-07-03 16:31:37 +07:00

12 KiB

Lấy pose hiện tại

curl -k -X GET https://localhost:7002/api/navigation/pose/current2d

Di chuyển đến vị trí (1.0, 2.0) với yaw = 0

# Move to goal
curl -k -X POST https://localhost:7002/api/navigation/move_to \
  -H "Content-Type: application/json" \
  -d '{"x": 1.0, "y": 2.0, "yaw": 0.0, "frame_id": "map"}'

Di chuyển đến vị trí với order (navigation_move_to_order)

⚠️ LƯU Ý QUAN TRỌNG:

- order_handle phải là một pointer hợp lệ đến Order object được tạo bởi navigation system.

- KHÔNG thể sử dụng số ngẫu nhiên hoặc giá trị test (như 0x12345678) - phải là pointer thực sự từ C++ code.

- Nếu sử dụng order_handle không hợp lệ, server có thể crash hoặc trả về lỗi SSL.

- order_handle có thể là số decimal hoặc hex string (0x...)

- Giá trị phải > 0x1000 để được coi là pointer hợp lệ

- Để có order_handle hợp lệ, bạn cần tạo Order object từ navigation system trước

curl -k -X POST https://localhost:7002/api/navigation/move_to_order \
  -H "Content-Type: application/json" \
  -d '{
    "order_handle": "0x12345678",
    "x": 1.0,
    "y": 2.0,
    "z": 0.0,
    "qx": 0.0,
    "qy": 0.0,
    "qz": 0.0,
    "qw": 1.0,
    "frame_id": "map",
    "xy_tolerance": 0.1,
    "yaw_tolerance": 0.1
}'

Lưu ý: JSON phải được format đúng. Nếu gặp lỗi, có thể sử dụng format một dòng:

⚠️ LƯU Ý: order_handle "0x12345678" trong ví dụ này chỉ là placeholder - bạn PHẢI thay bằng order_handle thực sự từ navigation system!

# Ví dụ với order_handle thực (thay 0x12345678 bằng giá trị thực):
curl -k -X POST https://localhost:7002/api/navigation/move_to_order -H "Content-Type: application/json" -d '{"order_handle":"0x12345678","x":1.0,"y":2.0,"z":0.0,"qx":0.0,"qy":0.0,"qz":0.0,"qw":1.0,"frame_id":"map","xy_tolerance":0.1,"yaw_tolerance":0.1}'

curl -k -X POST https://localhost:7002/api/navigation/move_to   -H "Content-Type: application/json"   -d '{"x": 1.0, "y": 2.0, "yaw": 0.0, "frame_id": "map"}'

Hoặc sử dụng yaw thay vì quaternion:

curl -k -X POST https://localhost:7002/api/navigation/move_to_order \
  -H "Content-Type: application/json" \
  -d '{
    "order_handle": 305419896,
    "x": 1.0,
    "y": 2.0,
    "yaw": 0.0,
    "frame_id": "map",
    "xy_tolerance": 0.1,
    "yaw_tolerance": 0.1
  }'

Cấu trúc OrderHandle trong C#:

- OrderHandle: Wrapper class cho IntPtr, đại diện cho pointer đến Order object

- OrderData: C# class chứa dữ liệu Order (headerId, orderId, nodes, edges, etc.)

Hiện tại, order_data chưa được hỗ trợ (cần C API function để tạo OrderHandle từ OrderData).

Vui lòng sử dụng order_handle (IntPtr) từ navigation system.

Di chuyển thẳng theo hướng hiện tại (distance mét). Bắt buộc có trường "distance".

# Đi thẳng 2.0 mét
curl -k -X POST https://localhost:7002/api/navigation/move_straight_to \
  -H "Content-Type: application/json" \
  -d '{"distance": 1.0}'

Ví dụ khác:

# Đi thẳng 1.5 mét
curl -k -X POST https://localhost:7002/api/navigation/move_straight_to \
  -H "Content-Type: application/json" \
  -d '{"distance": 1.5}'


curl -k -X POST https://localhost:7002/api/navigation/move_straight_to -H "Content-Type: application/json" -d '{"distance": 2.0}'

Xoay đến yaw = 1.57 (90 độ)

curl -k -X POST https://localhost:7002/api/navigation/rotate_to \
  -H "Content-Type: application/json" \
  -d '{"yaw": 3.14}'

Tạm dừng

curl -k -X POST https://localhost:7002/api/navigation/pause

Tiếp tục

curl -k -X POST https://localhost:7002/api/navigation/resume

Hủy goal

curl -k -X POST https://localhost:7002/api/navigation/pause

Lấy feedback

curl -k -X GET https://localhost:7002/api/navigation/feedback
curl -k -X POST https://localhost:7002/api/navigation/twist/linear \
  -H "Content-Type: application/json" \
  -d '{"x": 0.5, "y": 0.0, "z": 0.0}'
curl -k -X POST https://localhost:7002/api/navigation/move_to_order_data \
  -H "Content-Type: application/json" \
  -d '{
    "order": {
      "orderId": "order_001",
      "orderUpdateId": 1,
      "nodes": [{"nodeId": "node1", "sequenceId": 1, "released": true, "nodePosition": {"x": 0.0, "y": 0.0, "mapId": "map"}}],
      "edges": [{"edgeId": "edge1", "sequenceId": 2, "startNodeId": "node1", "endNodeId": "node2", "released": true}]
    },
    "x": 13.05,
    "y": 3.41,
    "z": 0.0,
    "yaw": 1.57
  }'
curl -k -X POST https://localhost:7002/api/navigation/move_to_order_data \
-H "Content-Type: application/json" \
-d '{
  "x": 7.0,
  "y": 2.0,
  "yaw": 1.57,
  "frame_id": "map",
  "xy_tolerance": 0.3,
  "yaw_tolerance": 50,
  "order": {
    "headerId": 1,
    "timestamp": "2026-02-28T16:01:25.308Z",
    "version": "0.0.1",
    "manufacturer": "phenikaaX",
    "serialNumber": "T800Fake",
    "orderId": "c92ec33e-ec04-4521-8255-af8ae46b7f31",
    "orderUpdateId": 1,
    "zoneSetId": "maze",
    "nodes": [
      {
        "nodeId": "86312653-08b2-4556-bb84-674805905bed",
        "sequenceId": 0,
        "nodeDescription": "Node0",
        "released": true,
        "nodePosition": {
          "x": 2.5,
          "y": 1.0,
          "theta": 0.0,
          "allowedDeviationXY": 0,
          "allowedDeviationTheta": 0,
          "mapId": "448039b7-23d2-4a70-a2d2-08dd61dadd33",
          "mapDescription": ""
        },
        "actions": []
      },
      {
        "nodeId": "3726205f-0140-454d-21a8-08de5340bfbf",
        "sequenceId": 1,
        "nodeDescription": "Node1",
        "released": true,
        "nodePosition": {
          "x": 6.0,
          "y": 1.0,
          "theta": 0.0,
          "allowedDeviationXY": 0.3,
          "allowedDeviationTheta": 50,
          "mapId": "448039b7-23d2-4a70-a2d2-08dd61dadd33",
          "mapDescription": ""
        },
        "actions": []
      },
      {
        "nodeId": "1231321231231-fdfdf-fdfdsafa",
        "sequenceId": 2,
        "nodeDescription": "Node2",
        "released": true,
        "nodePosition": {
          "x": 7.0,
          "y": 2.0,
          "theta": 1.57,
          "allowedDeviationXY": 0.3,
          "allowedDeviationTheta": 50,
          "mapId": "448039b7-23d2-4a70-a2d2-08dd61dadd33",
          "mapDescription": ""
        },
        "actions": []
      }
    ],
    "edges": [
      {
        "edgeId": "522212fa-74d5-4f00-9a00-23e092593bcc",
        "sequenceId": 0,
        "edgeDescription": "86312653-08b2-4556-bb84-674805905bed - 3726205f-0140-454d-21a8-08de5340bfbf",
        "released": true,
        "startNodeId": "86312653-08b2-4556-bb84-674805905bed",
        "endNodeId": "3726205f-0140-454d-21a8-08de5340bfbf",
        "maxSpeed": 0.5,
        "maxHeight": 0,
        "minHeight": 0,
        "orientation": 0,
        "orientationType": "",
        "direction": "Both",
        "rotationAllowed": true,
        "maxRotationSpeed": 0.5,
        "length": 0,
        "trajectory": {
          "degree": 1,
          "knotVector": [0, 0, 1, 1],
          "controlPoints": [
            {
              "x": 2.5,
              "y": 1.0,
              "weight": 1
            },
            {
              "x": 6.0,
              "y": 1.0,
              "weight": 1
            }
          ]
        },
        "actions": []
      },
      {
        "edgeId": "13312fds-fdsfsdaaf",
        "sequenceId": 1,
        "edgeDescription": "3726205f-0140-454d-21a8-08de5340bfbf - 1231321231231-fdfdf-fdfdsafa",
        "released": true,
        "startNodeId": "3726205f-0140-454d-21a8-08de5340bfbf",
        "endNodeId": "1231321231231-fdfdf-fdfdsafa",
        "maxSpeed": 0.5,
        "maxHeight": 0,
        "minHeight": 0,
        "orientation": 0,
        "orientationType": "",
        "direction": "Both",
        "rotationAllowed": true,
        "maxRotationSpeed": 0.5,
        "length": 0,
        "trajectory": {
          "degree": 2,
          "knotVector": [0, 0, 0, 1, 1, 1],
          "controlPoints": [
            {"x": 6.0, "y": 1.0, "weight": 1.0},
            {"x": 7.0, "y": 0.5, "weight": 0.707},
            {"x": 7.0, "y": 2.0, "weight": 1.0}
          ]
        },
        "actions": []
      }
    ]
  }
}'
 curl -k -X POST https://localhost:7002/api/navigation/move_to_order_data \
 -H "Content-Type: application/json" \
 -d '{
   "x": 2.5,
   "y": 0.4,
   "yaw": 0.0,
   "frame_id": "map",
   "xy_tolerance": 0.3,
   "yaw_tolerance": 50,
   "order": {
     "headerId": 1,
     "timestamp": "2026-02-28T16:01:25.308Z",
     "version": "0.0.1",
     "manufacturer": "phenikaaX",
     "serialNumber": "T800Fake",
     "orderId": "c92ec33e-ec04-4521-8255-af8ae46b7f31",
     "orderUpdateId": 1,
     "zoneSetId": "maze",
     "nodes": [
       {
         "nodeId": "86312653-08b2-4556-bb84-674805905bed",
         "sequenceId": 0,
         "nodeDescription": "RobotCurrentNode",
         "released": true,
         "nodePosition": {
           "x": 5.5,
           "y": 0.4,
           "theta": -0.0,
           "allowedDeviationXY": 0,
           "allowedDeviationTheta": 0,
           "mapId": "448039b7-23d2-4a70-a2d2-08dd61dadd33",
           "mapDescription": ""
         },
         "actions": []
       },
       {
         "nodeId": "3726205f-0140-454d-21a8-08de5340bfbf",
         "sequenceId": 1,
         "nodeDescription": "Node172",
         "released": true,
         "nodePosition": {
           "x": 2.5,
           "y": 0.4,
           "theta": -0.0,
           "allowedDeviationXY": 0.3,
           "allowedDeviationTheta": 50,
           "mapId": "448039b7-23d2-4a70-a2d2-08dd61dadd33",
           "mapDescription": ""
         },
         "actions": []
       }
     ],
     "edges": [
       {
         "edgeId": "522212fa-74d5-4f00-9a00-23e092593bcc",
         "sequenceId": 0,
         "edgeDescription": "86312653-08b2-4556-bb84-674805905bed - 3726205f-0140-454d-21a8-08de5340bfbf",
         "released": true,
         "startNodeId": "86312653-08b2-4556-bb84-674805905bed",
         "endNodeId": "3726205f-0140-454d-21a8-08de5340bfbf",
         "maxSpeed": 0.5,
         "maxHeight": 0,
         "minHeight": 0,
         "orientation": 0,
         "orientationType": "",
         "direction": "Both",
         "rotationAllowed": true,
         "maxRotationSpeed": 0.5,
         "length": 0,
         "trajectory": {
           "degree": 1,
           "knotVector": [0, 0, 1, 1],
           "controlPoints": [
             {
               "x": 4.5,
               "y": 0.4,
               "weight": 1
             },
             {
               "x": 3.5,
               "y": 0.4,
               "weight": 1
             }
           ]
         },
         "actions": []
       }
     ]
   }
 }'