目录

SDS³ TTC

星务遥控遥测(Telemetry, Tracking & Command)接口抽象与任务指令转发。

功能

  • 通过 I2C 与星务总线交换状态与指令
  • 将二进制遥控指令按模板转换为 JSON 任务文件
  • 支持任务模板热扩展
  • 提供任务指令 JSON 到二进制的编码工具

安装

./install.sh

或构建 Debian 安装包:

./build-dpkg.sh

使用

请参考仓库中的示例文件与 examples/ 目录。

许可证

MIT License — 详见 LICENSE 文件。

原始说明

以下内容来自原项目的 Readme.txt,保留供参考:

# ttc-daemon(遥控遥测接口)使用说明

ttc-daemon服务用于连接星上各个任务的json文件和星务遥控遥测数据。

星务发送的遥控指令,与各软件任务相关的主要是192字节的任务参数指令。
该部分指令数据为透明二进制数据,星务透明转发。
地面规划时将各任务的参数数据转换为二进制数据,交地面站通过遥控指令发送到星上。
ttc-daemon接收该数据块,按照预定义的格式解析转换为各个任务的指令json文件,写入到对应路径。

## 任务的定义

ttc-daemon实现为与任务无关,根据任务定义模板自动进行数据的解析和转发。
任务定义模板位于./config下,文件格式为json,每个文件定义一个任务。
ttc-daemon接收到星务指令后,在./config下扫描所有模板并匹配数据,
如果找到匹配的模板,则按模板定义转换数据为json文件并写入模板中指定的路径。
任务定义模板文件的格式为:

    {
    "JOB_TYPE": 48,
    "CMD_PATH": "/var/opt/SatService/autorun",
    "PRE_EXEC": "systemctl start tof-camera.service"
    "JOB_PARAMS": {
        "name": [32,32,"string"],
        "cmd": [64,128,"string"]
    }
    }

字段说明:

* JOB_TYPE   - 预先分配的任务类型号,ttc-daemon主要按类型匹配任务模板
* CMD_PATH   - 任务指令json文件的路径,ttc-daemon将任务参数转换为json文件后写入该路径下
* PRE_EXEC   - 任务前置命令,可以为任何linux命令,用于启动前置条件
* JOB_PARAMS - 任务详细参数定义。参数名即为写入到任务指令json文件中的参数名。
               参数值是一个list,其中第一个值是数据在二进制指令数据中的偏移量,第二个值为数据字节数,
               第三个值可选,可以指定"string"/"boolean"等类型,用于二进制值到json数值的转换。

JOB_PARAMS支持嵌套,嵌套的格式将会按原结构输出到任务json文件中。例如imaging_defines.json中:

    {
    "JOB_TYPE": 16,
    "CMD_PATH": "/var/opt/SatService/CameraService/image/json",
    "PRE_EXEC": "systemctl start tof-camera.service",
    "JOB_PARAMS": {
        "START_TIME": [12,8],
        "CAMERA_COUNT": [20,1],
        "ACTIVE_CAMERA_ID": [21,1],
        "FRAME_TIME": [22,2],
        "JPEG_QUALITY": [28,1],
        "I_FRAME_INTERVAL": [29,1],
        "I_FRAME_QUALITY": [30,1],
        "P_FRAME_QUALITY": [31,1],
        "B_FRAME_QUALITY": [32,1],
        "B_FRAME_COUNT": [33,1],
        "CAMERA0": {
        "FRAME_FREQUENCY": [34,1],
        "FRAME_WIDTH": [35,2],
        "FRAME_HEIGHT": [37,2],
        "EXPOSURE_TIME": [39,4],
        "GAIN": [43,1],
        "AUTO_GAIN": [44,1,"boolean"],
        "AUTO_EXPOSURE":[45,1,"boolean"] 
        },
        "CAMERA1": {
        "FRAME_FREQUENCY": [46,1],
        "FRAME_WIDTH": [47,2],
        "FRAME_HEIGHT": [49,2],
        "EXPOSURE_TIME": [51,4],
        "GAIN": [55,1],
        "AUTO_EXPOSURE": [56,1,"boolean"]
        },
        "CAMERA2": {
        "FRAME_FREQUENCY": [58,1],
        "FRAME_WIDTH": [59,2],
        "FRAME_HEIGHT": [61,2],
        "EXPOSURE_TIME": [63,4],
        "GAIN": [67,1],
        "AUTO_EXPOSURE": [68,1,"boolean"]
        },
        "FILENAMEPREFIX": [70,128,"string"]
    }
    }

## 生成任务指令数据

提供给星务的指令数据是二进制192字节数据包。
可以使用json_to_bin.py将任务json文件转换为所需的二进制数据。
例如:

    ./json_to_bin.py -o download.bin example/download.json

以上命令读取example/download.json文件,将二进制数据写入到download.bin
例如, download.json文件的内容为:

    {"Node":2,"Type":32,"Data":"/home/nvidia/Documents/SatUPDLTestFiles/DownloadFile_DataFile/Cam0_Image*"}

则输出文件的内容为:

    $ hd download.bin 
    00000000  11 02 20 01 00 00 00 00  00 00 00 00 00 00 00 00  |.. .............|
    00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    00000040  2f 68 6f 6d 65 2f 6e 76  69 64 69 61 2f 44 6f 63  |/home/nvidia/Doc|
    00000050  75 6d 65 6e 74 73 2f 53  61 74 55 50 44 4c 54 65  |uments/SatUPDLTe|
    00000060  73 74 46 69 6c 65 73 2f  44 6f 77 6e 6c 6f 61 64  |stFiles/Download|
    00000070  46 69 6c 65 5f 44 61 74  61 46 69 6c 65 2f 43 61  |File_DataFile/Ca|
    00000080  6d 30 5f 49 6d 61 67 65  2a 00 00 00 00 00 00 00  |m0_Image*.......|
    00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
    *
    000000c0

## 增加新的任务类型

增加新的任务类型,只需要在config下增加一个任务定义文件即可,格式如前文所述,文件名任意。

## 预定义任务类型

目前已有若干预定义任务,包括

    * imaging任务  - JOB_TYPE 16, 用于常规拍照
    * download任务 - JOB_TYPE 32, 用于常规数传
    * cleanup任务  - JOB_TYPE 33, 用于清理数传缓存数据
    * autorun任务  - JOB_TYPE 48, 用于运行任意命令,包括各个算法任务

### autorun任务的使用

autorun任务参数json如下:

    {"name":"autorun-example","cmd":"echo Hello World!"}

其中"cmd"字段为要执行的命令。"name"字段可选,可以给这次运行定义一个可读的名称,以便后续的状态查询等。

autorun任务运行时通过systemd-run调用"cmd"字段指定的命令。
其内部调用方式为"systemd-run --unit <name> <cmd>"

systemd将会代理命令的输出日志,将命令的stdout和stderr记录下来。
如果定义了name,可以通过以下指令查询命令的执行日志:

    journalctl -u <name>

如果未定义name,则autorun会自动分配一个临时名称,格式为"autorun-%d",
其中%d为任务的序号,每次开机后从0开始累加。

autorun和download任务配合可以执行复杂的维护工作。例如:可以通过一个autorun指令查询另一个autorun指令的输出:

    # autorun-example.json
    {"name":"autorun-example", cmd":"echo Hello World!"}
    # autorun-query-result.json
    {"cmd":"journalctl -u autorun-example --no-pager > /var/run/autorun-example.log"}
    # download.json
    {"Node":2,"Type":32,"Data":"/var/run/autorun-example.log"}

以上任务的组合将会执行"echo Hello World!",查询该命令的运行和输出日志并写入到/var/run/autorun-example.log,
然后将该文件下传。
将以上三个json文件通过json_to_bin.py生成任务包数据并依次通过遥控通道上注后,将会通过数传通道得到autorun-example.log文件


### 图形化TTC任务指令生成器使用说明

    1. 直接运行:可在 release 目录中双击 exe,启动图形化 TTC 任务指令生成器。

    2. 调试或修改代码:使用 ttc_gui.py 启动程序进行开发或调试。
    
    3. 打包发布:使用 build_exe.py 将 ttc_gui.py 程序打包为可执行文件。打包后会生成 release 目录,整个目录可直接分发给他人使用。
关于

星务遥控遥测(Telemetry, Tracking & Command)接口抽象与任务指令转发。

11.1 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号