通信检查与问题排查
Motion SDK 采用 UDP 与机器狗进行通讯。
数据上报检查: 在 SDK 中打印 IMU 数据或关节数据,判断是否收到机器狗上报的数据。可取消 main.cpp 中的注释:
// cout << robot_data->imu.acc_x << endl;指令下发检查: 运行 demo 后观察机器狗是否执行回零动作,若能回零则证明 SDK 可成功下发指令。
通讯问题排查
Section titled “通讯问题排查”如果 SDK 未接收到机器狗上报的数据,可按以下步骤排查:
-
检查网段:确认开发主机与机器狗主机处于同一网段(在运动主机上运行 SDK 可跳过此步)
-
检查虚拟机网络:如使用虚拟机,建议改为桥接模式并手动设置 IP
-
抓包排查:在运动主机上执行抓包命令:
- SDK 在运动主机内运行:
sudo tcpdump -x port 43897 -i lo - 用户名
user,SDK 在开发主机,WiFi 连接:sudo tcpdump -x port 43897 -i p2p0 - 用户名
user,SDK 在开发主机,网口连接:sudo tcpdump -x port 43897 -i eth1 - 用户名
firefly:sudo tcpdump -x port 43897 -i eth0
- SDK 在运动主机内运行:
抓包后等待 2 分钟,观察是否有数据上报。若无数据,用 top 命令检查 jy_exe 进程是否正常运行,必要时重启运动程序:
cd ~/jy_exesudo ./stop.shsudo ./restart.shUDP 通信架构
Section titled “UDP 通信架构”SDK 底层通信基于自封装的 UDP Socket 层:
graph TB A["Sender / Receiver"] --> B["UDPSocket"] B --> C["BaseSocket"] C --> D["Linux Socket API"] E["UDPServer"] --> BBaseSocket:Socket 基类,封装创建、关闭等基础操作UDPSocket:实现SendTo(无连接发送)、Send(连接后发送)、Receive/ReceiveFrom(接收)UDPServer:继承UDPSocket,增加Bind端口绑定和广播支持
command.h 定义了通信命令格式:
struct EthCommand { uint32_t code; ///< 命令码 union { uint32_t value; ///< 命令值 uint32_t paramters_size;///< 参数长度 }; struct { uint32_t type : 8; ///< 消息类型(0=单值,1=多值) uint32_t count : 24; ///< 消息序列号 };};lib/ 目录下提供两个平台的预编译动态库:
libdeeprobotics_legged_sdk_x86_64.so— x86 架构(开发上位机)libdeeprobotics_legged_sdk_aarch64.so— ARM 架构(Lite3 机载主机)
编译时通过 -DBUILD_PLATFORM=x86 或 -DBUILD_PLATFORM=arm 选择对应平台库。
安全注意事项
Section titled “安全注意事项”-
取消注释前务必确认通讯正常:在
main.cpp中send_cmd->SendCmd(robot_joint_cmd)默认被注释,取消前需确认 SDK 能正常收发数据。 -
实验安全距离:使用 Lite3 执行算法和实验时,所有人员应与机器人保持至少 5 米距离。
-
悬挂调试:机器人应悬挂在调试架上,避免意外造成人员和设备损伤。
-
急停操作:需要靠近机器人时,必须使机器人处于急停状态或使用
sudo ./stop.sh关闭运动程序。 -
运行前准备:运行程序前请将机器狗调整到准备姿势,以确保顺利回零。
-
WiFi 延迟:WiFi 通讯受网络环境干扰产生的延迟波动,可能对 500Hz 以上控制频率的控制器产生影响。
-
ARM 架构注意:Lite3 运动主机为 ARM 架构,若需在运动主机上运行自定义程序需注意交叉编译。