基于边缘计算的智能网联机器人系统-可视化模块的设计与实现

需求

用户注册与登录,安全验证

用户操作可视化,弹窗列表显示最近几条,查询记录在新视图

机器人可视化展示,遥控器,支持键盘,图像流,速度显示,速度设置

ui设计美观,可用性强,可理解性强

人机交互和软工2要在看看!!!

架构设计

好几个微服务加一起

问题是,这还叫可视化吗,写架构要把edgex的服务也写进来,因此还要先搞懂edgex!!!

测试

简单的增删改查测试,部署docker测试,服务器测试

接口调用测试文档

在正式开发前,根据后端定义的网联机器人系统的API进行测试,旨在检测各个接口的数据访问和操作功能。方便在后期设计UI时,根据本文档定义的规范来进行后端接口调用。

  1. 发布启动命令

    • 请求方法:PUT

    • 请求URL:/api/v2/device/name/{deviceName}/run

    • 请求参数与载荷:

      | 名称 | 类型 | 是否必填 |描述 | 示例值 |
      | ———— | —— | ———— | - | - |
      | deviceName | String | 是 |设备名称 | device1 |

    • 请求载荷:

      | 名称 | 类型 | 是否必填 | 描述 | 示例值 |
      | —— | —— | ———— | ———— | ——— |
      | run | Bool | 是 | 是否运动 | true |

    • 测试请求:

      1
      2
      3
      curl localhost:59882/api/v2/device/name/device1/run \
      -H "Content-Type:application/json" -X PUT \
      -d '{"run":true}'
    • 响应参数:

      | 参数名称 | 类型 | 描述 | 示例值 |
      | ————— | ——— | ————— | ——— |
      | apiVersion | String | API版本 | v2 |
      | statusCode | Int | 响应状态码 | 200 |

    • 测试成功示例响应:

      1
      2
      3
      4
      {
      "apiVersion":"v2",
      "statusCode":200
      }
  2. 发布停止命令

    • 请求方法:PUT

    • 请求URL:/api/v2/device/name/{deviceName}/stop

    • 请求参数与载荷:

      | 名称 | 类型 | 是否必填 |描述 | 示例值 |
      | ———— | —— | ———— | - | - |
      | deviceName | String | 是 |设备名称 | device1 |

    • 请求载荷:

      | 名称 | 类型 | 是否必填 | 描述 | 示例值 |
      | —— | —— | ———— | ———— | ——— |
      | stop | Bool | 是 | 是否停止 | true |

    • 测试请求:

      1
      2
      3
      curl localhost:59882/api/v2/device/name/device1/stop \
      -H "Content-Type:application/json" -X PUT \
      -d '{"stop":true}'
    • 响应参数:

      | 参数名称 | 类型 | 描述 | 示例值 |
      | ————— | ——— | ————— | ——— |
      | apiVersion | String | API版本 | v2 |
      | statusCode | Int | 响应状态码 | 200 |

    • 测试成功示例响应:

      1
      2
      3
      4
      {
      "apiVersion":"v2",
      "statusCode":200
      }
  3. 发布速度设置命令

    • 请求方法:PUT

    • 请求URL:/api/v2/device/name/{deviceName}/velocity

    • 请求参数与载荷:

      | 名称 | 类型 | 是否必填 |描述 | 示例值 |
      | ———— | —— | ———— | - | - |
      | deviceName | String | 是 |设备名称 | device1 |

    • 请求载荷:

      | 名称 | 类型 | 是否必填 | 描述 | 示例值 |
      | ———— | ——- | ———— | ——— | ——— |
      | velocity | Float | 是 | 速度值 | 0.1 |

    • 测试请求:

      1
      2
      3
      curl localhost:59882/api/v2/device/name/device1/velocity \
      -H "Content-Type:application/json" -X PUT \
      -d '{"velocity":0.1}'
    • 响应参数:

      | 参数名称 | 类型 | 描述 | 示例值 |
      | ————— | ——— | ————— | ——— |
      | apiVersion | String | API版本 | v2 |
      | statusCode | Int | 响应状态码 | 200 |

    • 测试成功示例响应:

      1
      2
      3
      4
      {
      "apiVersion":"v2",
      "statusCode":200
      }
  4. 获取当前速度命令

    • 请求方法:GET

    • 请求URL:/api/v2/device/name/{deviceName}/velocity

    • 请求参数与载荷:

      | 名称 | 类型 | 是否必填 |描述 | 示例值 |
      | ———— | —— | ———— | - | - |
      | deviceName | String | 是 |设备名称 | device1 |

    • 请求载荷:

      • 测试请求:

        1
        2
        curl localhost:59882/api/v2/device/name/device1/velocity \
        -H "Content-Type:application/json" -X GET
      • 响应参数:

        | 参数名称 | 类型 | 描述 | 示例值 |
        | ———————————- | ——— | —————— | —————— |
        | apiVersion | String | API版本 | v2 |
        | statusCode | Int | 响应状态码 | 200 |
        | event.readings[0].value | String | 返回的速度值 | 1.000000e-01 |

  - 测试成功示例响应:

    
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
"apiVersion": "v2",
"statusCode": 200,
"event": {
"apiVersion": "v2",
"id": "5d1968f7-8f90-4893-9aee-3038a4428700",
"deviceName": "device1",
"profileName": "my-ros",
"sourceName": "velocity",
"origin": 1714641172648511485,
"readings": [
{
"id": "9b9fe7b1-1922-4d88-8c47-a14645c1e46d",
"origin": 1714641172648508145,
"deviceName": "device1",
"resourceName": "velocity",
"profileName": "my-ros",
"valueType": "Float64",
"value": "1.000000e-01"
}
]
}
}
  1. 发布设置角度命令

    • 请求方法:PUT

    • 请求URL:/api/v2/device/name/{deviceName}/angular

    • 请求参数与载荷:

      | 名称 | 类型 | 是否必填 |描述 | 示例值 |
      | ———— | —— | ———— | - | - |
      | deviceName | String | 是 |设备名称 | device1 |

    • 请求载荷:

      | 名称 | 类型 | 是否必填 | 描述 | 示例值 |
      | ———- | ——- | ———— | ——— | ——— |
      | angular | Float | 是 | 角度值 | 10.0 |

    • 测试请求:

      1
      2
      3
      curl localhost:59882/api/v2/device/name/device1/angular \
      -H "Content-Type:application/json" -X PUT \
      -d '{"angular":10.0}'
    • 响应参数:

      | 参数名称 | 类型 | 描述 | 示例值 |
      | ————— | ——— | ————— | ——— |
      | apiVersion | String | API版本 | v2 |
      | statusCode | Int | 响应状态码 | 200 |

    • 测试成功示例响应:

      1
      2
      3
      4
      {
      "apiVersion":"v2",
      "statusCode":200
      }
  2. 获取当前角度命令

    • 请求方法:GET

    • 请求URL:/api/v2/device/name/{deviceName}/angular

    • 请求参数与载荷:

      | 名称 | 类型 | 是否必填 |描述 | 示例值 |
      | ———— | —— | ———— | - | - |
      | deviceName | String | 是 |设备名称 | device1 |

    • 请求载荷:

  • 测试请求:

    1
    2
    curl localhost:59882/api/v2/device/name/device1/angular \
    -H "Content-Type:application/json" -X GET
  • 响应参数:

    | 参数名称 | 类型 | 描述 | 示例值 |
    | ———————————- | ——— | —————— | ——————- |
    | apiVersion | String | API版本 | v2 |
    | statusCode | Int | 响应状态码 | 200 |
    | event.readings[0].value | String | 返回的角度值 | 10.000000e-01 |

  • 测试成功示例响应:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    {
    "apiVersion": "v2",
    "statusCode": 200,
    "event": {
    "apiVersion": "v2",
    "id": "5d1968f7-8f90-4893-9aee-3038a4428700",
    "deviceName": "device1",
    "profileName": "my-ros",
    "sourceName": "angular",
    "origin": 1714641172648511485,
    "readings": [
    {
    "id": "9b9fe7b1-1922-4d88-8c47-a14645c1e46d",
    "origin": 1714641172648508145,
    "deviceName": "device1",
    "resourceName": "angular",
    "profileName": "my-ros",
    "valueType": "Float64",
    "value": "10.000000e-01"
    }
    ]
    }
    }
  1. 获取视频流地址命令

    • 请求方法:GET

    • 请求URL:/api/v2/device/name/{deviceName}/cameraUrl

    • 请求参数与载荷:

      | 名称 | 类型 | 是否必填 |描述 | 示例值 |
      | ———— | —— | ———— | - | - |
      | deviceName | String | 是 |设备名称 | device1 |

    • 请求载荷:

    • 测试请求:

      1
      2
      curl localhost:59882/api/v2/device/name/device1/cameraUrl \
      -H "Content-Type:application/json" -X GET
    • 响应参数:

      | 参数名称 | 类型 | 描述 | 示例值 |
      | ———————————- | ——— | ———————- | —————————————————————————————— |
      | apiVersion | String | API版本 | v2 |
      | statusCode | Int | 响应状态码 | 200 |
      | event.readings[0].value | String | 返回的视频源Url | http://172.19.166.145:8080/stream?topic=/camera/rgb/image_raw |

    • 测试成功示例响应:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      {
      "apiVersion": "v2",
      "statusCode": 200,
      "event": {
      "apiVersion": "v2",
      "id": "75c292db-0b04-40ff-8138-8413a7676f02",
      "deviceName": "device1",
      "profileName": "my-ros",
      "sourceName": "cameraUrl",
      "origin": 1714641874330672509,
      "readings": [
      {
      "id": "3c907d4d-8c68-403f-be8d-b8c642ceb5c8",
      "origin": 1714641874330669171,
      "deviceName": "device1",
      "resourceName": "cameraUrl",
      "profileName": "my-ros",
      "valueType": "String",
      "value": "http://172.19.166.145:8080/stream?topic=/camera/rgb/image_raw"
      }
      ]
      }
      }