跳到主要内容

HexArth JSON 使用教程

什么是 JSON ?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,通常用于在不同系统之间传输和存储数据。JSON 最初起源于 JavaScript,但已成为一种独立于编程语言的数据格式,因此可以在各种编程语言中使用和解析。 以下是对机器人左右轮速度控制的 JSON 格式的指令案例:

{ "T": 1, "X": 0.02, "Y": 0.02, "Yaw": 0.3 }

对于这条指令的解释: T 代表该指令的类型,指令类型在下位机程序的头文件 json_cmd.h 中定义。1 代表这条指令为 CMD_SPEED_CTRL (用来控制机器人 X Y 速度以及机身旋转)。

为什么使用 JSON 指令与机器人进行交互?

由于机器人驱动板的板载资源比较多、例程功能丰富、同时兼顾方便扩展上位机,让上位机对于机器人的控制功能更加丰富和方便,所以我们使用 JSON 指令通信来与机器人进行交互,同样的,你也可以基于现有的框架对这些功能进行二次开发,让机器人的功能更适合你的使用需求。

支持 JSON 指令的通信方式

机器人可使用多种方式来进行 JSON 格式的指令交互。其中,有线的通信方式可以使用 RX/TX 引脚进行串口通信,或者通过 Type-C 接口接 USB 进行串口通信;无线的通信方式可以使用 HTTP 请求进行通信,或者使用 ESP-NOW 进行通信。你可以通过下面的例程来使用不同的方法发送 对应的 JSON 指令去控制机器人的各项功能。 机器人内置心跳函数:当 3 秒钟内没有新的移动控制指令下达,机器人会自动停止移动,所以当你通过上位机来控制机器人时,需要定时重复下达移动指令来让机器人连续移动。

1. 串口/USB 通信

特性:有线连接,默认波特率 @115200,双向通信,稳定、低延时; 用途:方便使用 PC、树莓派 等上位机来控制机器人; 连接方式:

  • 通过机器人 40PIN 的 UART 接口与 树莓派进行连接
  • 使用 USB 线将机器人的下位机驱动板的 USB 接口与上位机进行连接(此方法需要拆卸小车) Python 例程:serial_simple_ctrl.py。具体例程内容如下:
import serial
import argparse
import threading

def read_serial():
while True:
data = ser.readline().decode('utf-8')
if data:
print(f"Received: {data}", end='')

def main():
global ser
parser = argparse.ArgumentParser(description='Serial JSON Communication')
parser.add_argument('port', type=str, help='Serial port name (e.g., COM1 or /dev/ttyUSB0)')

args = parser.parse_args()

ser = serial.Serial(args.port, baudrate=115200, dsrdtr=None)
ser.setRTS(False)
ser.setDTR(False)

serial_recv_thread = threading.Thread(target=read_serial)
serial_recv_thread.daemon = True
serial_recv_thread.start()

try:
while True:
command = input("")
ser.write(command.encode() + b'\n')
except KeyboardInterrupt:
pass
finally:
ser.close()

if __name__ == "__main__":
main()

运行完成后,在这个界面中可以发送 JSON 格式的指令,也可以获取机器人的反馈信息,从而与机器人进行通信。

2.HTTP 请求通信

HTTP(Hypertext Transfer Protocol)是一种用于在 Web 上进行数据通信的协议。 特性:基于 WIFI 模块实现的无线通信,请求-响应模型,灵活、简单。 Python 例程:下载 http_simple_ctrl.py HTTP 请求通信例程,具体例程内容如下:

import requests
import argparse

def main():
parser = argparse.ArgumentParser(description='Http JSON Communication')
parser.add_argument('ip', type=str, help='IP address: 192.168.10.104')

args = parser.parse_args()

ip_addr = args.ip

try:
while True:
command = input("input your json cmd: ")
url = "http://" + ip_addr + "/js?json=" + command
response = requests.get(url)
content = response.text
print(content)
except KeyboardInterrupt:
pass

if __name__ == "__main__":
main()
注意

注意:无论是哪一种模式下,机器人需要与运行该脚本的设备处于同一个局域网内。

3. 通过 Web 应用下达 JSON 指令

  • 开机后使用手机或电脑连接机器人的 WiFi:HexArth,密码是 12345678,连接 WiFi 后打开谷歌浏览器,在网址栏中输入 192.168.4.1 打开 Web 端使用界面。
  • 在 FEEDBACK INFOMATION 这个窗口可以给机器人发送 JSON 指令,窗口下面就是具体的 JSON 指令。