前言
在全国大学生智能车竞赛(智慧医疗机器人创意赛)中,我们团队取得了不错的成绩。作为技术负责人,我想分享一下备赛过程中关于惯导、视觉处理及系统优化的实际思路。比赛竞争激烈,细节决定成败,以下经验希望能帮助到后续参赛的同学。
网络稳定性优化
网络延迟是比赛中常见的痛点,直接影响云端 API 调用和实时控制。第一年参赛时我们也遇到过严重延迟问题,第二年重点解决了这一环节。
硬件选择上,我们使用了华为 BE7 Pro 路由器。在校赛阶段发现其他队伍连接困难,而我们的设备运行稳定。在正式赛场上,我们将信道固定在 165,这个频段通常干扰较少。调试期间若遇到中继模式导致的延迟波动,建议直接切换至本地部署方案,避免依赖不稳定的云端服务。
连接方式上,上位机务必使用有线网络连接路由器,不要依赖板载无线网卡。这能显著降低丢包率和抖动。
上位机辅助可视化
为了帮助机师快速判断障碍物位置,我们在上位机端开发了一个基于 Tkinter 的辅助界面。它接收 YOLO 的检测数据,将障碍物和终点信息绘制在画布上,相当于游戏里的小地图。
核心逻辑是订阅 ROS 话题,解析目标坐标后映射到屏幕像素。例如,对于障碍物,我们计算其在图像中的矩形区域并绘制红线;对于终点,则标记置信度。
import tkinter as tk
from rclpy.node import Node
from rclpy.qos import QoSProfile, ReliabilityPolicy
class LLM2Origincar:
def __init__(self, host, port):
self.ros = None
self.host = host
self.port = port
self.roadblock_list = []
self.end_list = []
self.init_ros()
self.init_topic()
self.init_thread()
self.keep()
def init_topic(self):
# 订阅感知目标话题
self.yolo_sub = Topic(self.ros, '/hobot_dnn_detection', 'ai_msgs/msg/PerceptionTargets', latch=True)
self.yolo_sub.subscribe(self.yolo_sub_callback)
def ():
.roadblock_list.clear()
.end_list.clear()
target msg[]:
target[] == :
rect = target[][][]
.roadblock_list.append({
: rect[],
: rect[],
: rect[] + rect[],
})
target[] == :
rect = target[][][]
.end_list.append({
: rect[],
: rect[],
: rect[],
: rect[] + rect[],
: target[][][],
})
():
:
:
canvas.delete()
canvas.create_line(, , , , fill=, width=)
canvas.create_line(, , , , fill=, width=)
.roadblock_list:
obst .roadblock_list:
b = (obst[] * )
x_start = (obst[] * )
x_end = ((obst[] + obst[]) * )
canvas.create_line(x_start, b, x_end, b, fill=, width=)
.end_list:
end .end_list:
x1 = (end[] * )
y1 = (end[] * )
x2 = ((end[] + end[]) * )
y2 = (end[] * )
canvas.create_line(x1, y2, x2, y2, fill=, width=)
canvas.create_text(((x1+x2)/), (, y1-), text=, fill=)
Exception e:
()


