基于Jetson Orin的UGV机器人AI套件:从硬件集成到SLAM与目标跟踪实战

📅 发布时间:2026/8/2 1:41:18
基于Jetson Orin的UGV机器人AI套件:从硬件集成到SLAM与目标跟踪实战
1. 项目缘起为什么选择UGV Rover PT Jetson Orin AI套件最近在折腾一个户外自主巡检的项目核心需求是让一台小车UGV能自己规划路线、识别路障、甚至完成一些简单的抓取动作。选型阶段市面上各种开发板和机器人底盘看得人眼花缭乱从树莓派到NVIDIA Jetson系列从几百块的玩具底盘到上万块的工业级平台。最终我锁定了“UGV Rover PT Jetson Orin AI kit”这个组合方案。这个名字听起来像是一堆硬件的堆砌但实际用下来它更像是一个为快速验证移动机器人AI应用而生的“交钥匙”工程方案。简单来说它把高性能AI计算单元Jetson Orin、稳定可靠的移动平台UGV Rover底盘、以及灵活的环境感知模块PT云台打包在了一起让你不用再为硬件兼容性、供电、机械结构这些琐事头疼能直接聚焦在算法开发和场景验证上。对于机器人开发者、高校实验室团队或者想深入AI机器人融合应用的工程师来说这个套件提供了一个绝佳的起点。它解决了从零搭建移动机器人最痛苦的几个环节动力系统匹配、主控与计算单元通信、以及传感器集成。你拿到手的基本上是一个“半成品”机器人通电、刷系统、跑几个Demo就能立刻看到它在房间里溜达并识别出你和你的水杯。这种快速的正向反馈对于项目推进和团队士气至关重要。接下来我就结合自己从开箱到部署第一个自主导航应用的完整过程拆解这个套件的核心价值、实操细节以及那些官方文档里不会写的“坑”。2. 套件深度拆解三大核心模块如何协同工作“UGV Rover PT Jetson Orin AI kit”这个名字已经清晰地揭示了它的三大组成部分。理解每个部分的选型逻辑和它们之间的协作关系是后续高效开发和排错的基础。2.1 大脑NVIDIA Jetson Orin Nano/NX模组套件的核心是NVIDIA Jetson Orin系列模组常见的是Orin Nano 8GB或Orin NX 16GB。这里的选择直接决定了你的机器人的“智商”上限。为什么是Jetson Orin相比于早年的Jetson TX2或甚至树莓派Orin系列在AI算力上是指数级的提升。以Orin Nano 8GB为例它拥有40 TOPS的INT8算力足以在终端实时运行像YOLOv8、DeepSort、SegFormer这类现代的视觉感知模型。对于移动机器人来说低延迟的本地推理是关键你不能把所有图像都传回云端处理。Orin的另一个巨大优势是其完整的NVIDIA软件栈JetPack SDK里面包含了TensorRT、DeepStream、VPI等优化库能极大简化从模型训练到部署的流程。在实际套件中的集成方式套件提供商通常不会让你自己去焊接一个Jetson核心板。他们会提供一个已经集成好的“主控板”Jetson Orin模组以SOMSystem on Module的形式被焊接在这块主控板上。这块主控板会引出所有必要的接口多个USB接摄像头、雷达、千兆网口、CAN总线用于与底盘电机控制器通信、GPIO、以及为整个系统供电的DC输入接口。这种设计的好处是你完全不用关心Jetson模组本身复杂的电源时序和底板设计拿到手就是一个即插即用的计算单元。注意不同供应商的套件其主控板设计可能不同。务必确认其引出的接口是否满足你的需求例如是否需要额外的M.2接口接固态硬盘或是否有足够的USB 3.0口来接多个高帧率相机。2.2 身体UGV Rover移动底盘底盘是机器人的身体决定了它的运动能力和基础稳定性。套件中的“UGV Rover”通常指一种四轮差速驱动的底盘平台。底盘的核心构成与选型考量驱动方式差速驱动是最常见且控制模型简单的方案。两个主动轮分别由独立的电机驱动通过调节左右轮速差来实现前进、后退和转向。这种结构零转弯半径非常适合在室内等狭窄空间活动。电机与编码器套件通常会配备带减速箱的直流无刷电机或直流有刷电机并集成高精度编码器。编码器用于提供轮子的转速和转角反馈是实现精准里程计Odometry的基础。电机的扭矩决定了机器人的载重和爬坡能力需要根据你计划搭载的传感器总重量如激光雷达、机械臂来评估。电机控制器这是连接大脑Jetson和身体电机的桥梁。它接收来自Jetson的速度指令通常通过CAN或UART总线并将其转化为驱动电机的PWM信号。好的电机控制器具备抗负载扰动、过流保护等功能能让机器人的运动更平滑、更可靠。电源系统底盘内部会集成一个大的锂电池组例如12V或24V并通过电源管理模块为Jetson主控板、电机、传感器等所有设备供电。你需要关注电池的容量Wh和放电倍率C数这直接决定了机器人的续航时间和能否支持电机瞬间大电流需求。在套件中的价值自己从零组装一个稳定可靠的底盘需要机械、电子、控制多方面的知识。套件提供的底盘已经完成了机械结构装配、电机与控制器匹配、基本线束铺设等工作你只需要通过几根线缆主要是CAN总线、电源线将其与Jetson主控板连接就获得了完整的移动能力。2.3 眼睛PT云台与视觉传感器“PT”代表Pan-Tilt即水平旋转和俯仰旋转的云台。这是赋予机器人主动感知能力的关键部件。云台的作用固定安装的摄像头视野有限。一个二自由度的云台可以让摄像头像人的脖子一样转动从而扩大感知范围或者持续跟踪一个移动目标。例如在巡检中机器人可以一边移动一边控制云台扫描两侧的仪表盘。云台的组成与控制机械结构由两个伺服舵机一个控制Pan一个控制Tilt和机械支架组成。套件通常会选用数字舵机其控制精度和保持扭矩比模拟舵机好得多。控制器云台舵机通常由一块独立的控制板驱动该控制板通过UART或I2C与Jetson通信。Jetson发送目标角度指令控制板则负责生成舵机所需的PWM信号。有些高级套件会集成闭环控制通过舵机本身的编码器或额外的位置传感器实现角度反馈。视觉传感器云台上最常搭载的是RGB摄像头用于目标检测、识别等任务。根据需求也可以搭载深度相机如Intel RealSense D435i、红外热成像仪等。套件一般会预留标准的安装孔位如1/4英寸螺丝孔和线缆走线通道。协同工作流示例当机器人在移动时Jetson上运行的视觉算法检测到前方有一个行人。算法除了输出行人的边界框还会计算其在图像中的位置。如果行人偏离图像中心Jetson会向云台控制器发送指令“Pan轴向左转动5度Tilt轴保持”使得行人始终处于摄像头视野中央实现视觉伺服跟踪。3. 从开箱到跑通环境搭建与首次驱动实战拿到套件后第一步不是急着写代码而是确保硬件连接正确并搭建好基础的软件开发环境。这个过程看似简单却隐藏着不少细节。3.1 硬件组装与上电检查套件通常不会完全组装好发货需要你进行一些简单的连接。标准连接步骤安装Jetson主控板将集成了Jetson Orin的主控板用螺丝固定在底盘内部或上层的安装板上。注意使用尼龙柱绝缘防止短路。连接底盘动力与通信电源线将底盘电池的输出线通常是XT60接头连接到主控板上标有“12V/24V INPUT”的端子。务必确认电压匹配主控板有宽压输入范围但接错可能烧毁。CAN总线找到底盘电机控制器引出的CAN_H和CAN_L线连接到主控板上的CAN接口。CAN总线需要终端电阻通常电机控制器内部已集成如果通信不稳定可能需要检查。紧急停止开关将底盘的急停开关回路接入主控板指定的GPIO口。这是一个安全必备项软件里需要编写相应的中断处理程序。连接云台与传感器将云台控制板通过USB或UART线连接到主控板。将摄像头等传感器连接到主控板的USB 3.0接口。建议使用带屏蔽的优质USB线避免信号干扰。上电前最终检查检查所有线缆接头是否牢固有无金属裸露导致短路的风险。将机器人抬起使驱动轮悬空以便首次上电测试。首次上电与基础测试打开底盘电源开关。此时应能听到电机控制器或主控板上的蜂鸣器响一声指示灯亮起。观察主控板状态灯。Jetson Orin启动需要一段时间系统指示灯会从闪烁变为常亮。电机测试通过SSH或接上显示器键盘登录Jetson系统。你可以先写一个简单的Python脚本通过SocketCAN库向CAN总线发送标准的速度指令如ROS2中的can-utils工具包里的cansend命令观察轮子是否按指令转动。务必在轮子悬空状态下进行云台测试同样通过Python脚本向云台控制板的串口发送角度指令例如#000P1500T1000\r\n格式的舵机指令观察云台是否平滑运动到指定位置。3.2 软件栈搭建ROS 2与核心驱动对于移动机器人ROSRobot Operating System仍然是事实上的标准框架。这里我强烈推荐使用ROS 2其分布式架构和实时性比ROS 1有显著提升。操作系统与ROS 2安装刷写系统镜像从套件供应商处获取或从NVIDIA官网下载适配你Jetson Orin型号的JetPack SDK镜像基于Ubuntu 20.04或22.04。使用SD卡或NVIDIA SDK Manager刷入。安装ROS 2 Humble/Hawksbill按照ROS官方文档在Ubuntu上安装ROS 2。对于Jetson平台需要注意一些ARM架构的依赖包可能需从源码编译。创建工作空间建立你的ROS 2工作空间用于存放自己的代码和第三方功能包。底盘驱动节点开发套件可能不提供现成的ROS驱动或者提供的驱动功能不全需要自己编写或深度定制。一个典型的底盘驱动节点例如ugv_base_driver需要完成以下核心功能# 伪代码逻辑展示驱动节点核心结构 import rclpy from rclpy.node import Node from geometry_msgs.msg import Twist import can class UGVMotorDriver(Node): def __init__(self): super().__init__(ugv_motor_driver) # 1. 初始化CAN总线 self.bus can.interface.Bus(channelcan0, bustypesocketcan) # 2. 订阅ROS 2标准速度指令话题 self.subscription self.create_subscription( Twist, cmd_vel, self.cmd_vel_callback, 10) # 3. 发布里程计话题 self.odom_pub self.create_publisher(Odometry, odom, 10) # 4. 定时器用于定期读取编码器并发布里程计 self.timer self.create_timer(0.02, self.publish_odometry) # 50Hz def cmd_vel_callback(self, msg): # 将ROS的Twist消息(线速度vx, 角速度wz)解算为左右轮目标转速 # 公式v_left vx - (wz * wheel_separation / 2) # v_right vx (wz * wheel_separation / 2) left_rpm, right_rpm self.calculate_wheel_speed(msg.linear.x, msg.angular.z) # 封装成CAN协议帧并发送 can_msg can.Message(arbitration_id0x201, dataself.rpm_to_bytes(left_rpm, right_rpm)) self.bus.send(can_msg) def publish_odometry(self): # 通过CAN总线读取电机控制器反馈的左右轮编码器计数 left_ticks, right_ticks self.read_encoder_from_can() # 根据编码器增量、轮子周长、底盘轮距计算机器人位姿变化 # 使用里程计运动学模型积分得到当前位置和朝向航向角 x, y, theta self.update_odometry(left_ticks, right_ticks) # 封装成Odometry消息并发布 odom_msg Odometry() odom_msg.header.stamp self.get_clock().now().to_msg() odom_msg.pose.pose.position.x x odom_msg.pose.pose.position.y y # ... 设置姿态四元数 ... self.odom_pub.publish(odom_msg)云台驱动节点开发云台驱动节点相对独立它订阅一个目标角度的话题例如pan_tilt_angles然后通过串口协议控制舵机。import serial from sensor_msgs.msg import JointState class PanTiltDriver(Node): def __init__(self): super().__init__(pan_tilt_driver) # 初始化串口 self.ser serial.Serial(/dev/ttyUSB0, 115200, timeout1) # 订阅目标角度 self.sub self.create_subscription(JointState, goal_pan_tilt, self.callback, 10) self.pan_angle 0.0 self.tilt_angle 0.0 def callback(self, msg): # 假设msg.position[0]是pan角度position[1]是tilt角度单位弧度 pan_rad msg.position[0] tilt_rad msg.position[1] # 将弧度转换为舵机控制所需的脉宽值例如500-2500对应0-180度 pan_pulse int(1500 pan_rad * (1000 / 3.14159)) # 简化转换 tilt_pulse int(1500 tilt_rad * (1000 / 3.14159)) # 生成舵机指令字符串如“#000P1500T1000\r\n” cmd f#000P{pan_pulse}T{tilt_pulse}\r\n self.ser.write(cmd.encode())提示在实际项目中你需要为云台创建URDF模型并在ROS中配置相应的joint_state_publisher和robot_state_publisher这样在Rviz中才能正确显示云台的运动。4. 核心AI应用部署以视觉SLAM与目标跟踪为例硬件驱动跑通后就可以在上面部署真正的AI应用了。这里以视觉SLAM同步定位与建图和动态目标跟踪这两个典型场景为例讲解如何在UGV Rover PT套件上实现。4.1 视觉SLAM让机器人“看清”并构建环境地图SLAM是自主导航的前提。我们选择ORB-SLAM3因为它支持单目、双目和RGB-D相机且在Jetson平台上有不错的优化。环境配置与依赖安装安装OpenCV和PangolinJetPack自带的OpenCV通常足够但可能需要从源码编译以启用非免费模块如SIFT。Pangolin是一个轻量级的可视化工具ORB-SLAM3用它来显示轨迹和地图点。编译ORB-SLAM3cd ~/workspace git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3 cd ORB_SLAM3 chmod x build.sh ./build.sh编译过程在Jetson Orin上比较耗时可能需要半小时以上。相机标定与数据采集相机标定使用ROS的camera_calibration包对云台上的RGB相机进行内参标定。得到相机的焦距、主点坐标和畸变系数。这些参数对SLAM的精度至关重要。发布图像话题编写一个简单的ROS节点使用OpenCV的cv_bridge将摄像头采集的图像发布为ROS的sensor_msgs/Image话题例如/camera/image_raw。运行ORB-SLAM3 ROS节点ORB-SLAM3提供了ROS例程。你需要修改其配置文件EuRoC.yaml或TUM1.yaml填入你标定好的相机内参和话题名。# 在一个终端启动ORB-SLAM3的ROS节点以单目为例 ros2 run orbslam3 Mono ~/ORB_SLAM3/Vocabulary/ORBvoc.txt ~/ORB_SLAM3/Examples/Monocular/YourCamera.yaml # 在另一个终端启动你的相机驱动节点 ros2 run your_package your_camera_node此时你应该能在Pangolin窗口中看到实时的特征点追踪和相机轨迹。控制机器人缓慢移动SLAM系统会逐渐构建一个稀疏的特征点地图。与导航栈集成ORB-SLAM3输出的相机位姿需要转换到机器人基座base_link坐标系下。你需要编写一个节点订阅ORB-SLAM3发布的/orb_slam3/camera_pose话题利用相机与机器人基座之间的固定变换TF计算出/odom和/map坐标系之间的变换关系并发布到TF树。这样ROS的导航栈Nav2才能利用这份地图进行路径规划。4.2 动态目标检测与云台跟踪在SLAM提供全局定位的同时我们还需要让机器人识别并跟踪特定的动态目标比如人。部署YOLOv8检测模型模型训练与导出在PC上使用Ultralytics YOLOv8训练一个针对你的目标如“人”、“安全帽”的检测模型。训练完成后将其导出为TensorRT引擎文件.engine或ONNX格式以在Jetson上获得最佳性能。# 在训练服务器上 yolo export modelyolov8n.pt formatonnx # 然后将onnx文件拷贝到JetsonJetson端部署在Jetson上使用TensorRT加载并优化ONNX模型或者直接使用Ultralytics提供的Jetson部署教程。可以编写一个ROS节点订阅相机图像进行推理并发布检测框结果到类似/detections的话题。实现视觉伺服跟踪检测到目标后我们需要控制云台让目标始终位于图像中心。计算误差在检测节点中除了发布边界框还计算目标框中心点(cx, cy)与图像中心点(img_w/2, img_h/2)的像素误差(err_x, err_y)。设计控制器创建一个云台跟踪节点订阅/detections话题。当检测到目标时将像素误差通过一个比例-积分PI控制器转换为云台Pan和Tilt轴的角度调整量。# 伪代码PI控制器 class PITracker: def __init__(self, kp, ki): self.kp kp # 比例系数 self.ki ki # 积分系数 self.integral_x 0.0 self.integral_y 0.0 def update(self, err_x, err_y, dt): # 积分项累加 self.integral_x err_x * dt self.integral_y err_y * dt # 计算控制输出角度增量单位弧度 pan_delta self.kp * err_x self.ki * self.integral_x tilt_delta self.kp * err_y self.ki * self.integral_y # 限制输出范围防止积分饱和和云台超限 pan_delta clamp(pan_delta, -max_speed, max_speed) tilt_delta clamp(tilt_delta, -max_speed, max_speed) return pan_delta, tilt_delta发布控制指令将计算出的角度增量累加到云台当前角度上生成新的目标角度并通过/goal_pan_tilt话题发送给云台驱动节点。这样就实现了一个完整的“检测-控制”闭环。当目标移动时云台会自动跟随保持目标在画面中央。你可以将这个跟踪节点与机器人的移动节点结合实现“跟随我”的功能。5. 性能优化与系统调参实战经验将算法跑起来只是第一步要让整个系统稳定、流畅、低延迟地工作性能优化和参数调整是必不可少的“魔鬼细节”。5.1 Jetson Orin性能压榨技巧Jetson Orin性能强大但默认设置下未必能完全发挥。以下是一些关键优化点启用所有CPU核心与GPU最大时钟Jetson默认可能处于节能模式。使用sudo jetson_clocks命令可以锁定CPU和GPU在最高频率运行。对于持续执行AI推理的机器人建议在启动脚本中执行此命令。优化TensorRT推理精度选择在精度允许的情况下使用INT8量化能大幅提升推理速度且对检测任务精度损失很小。可以使用TensorRT的校准工具生成INT8校准表。批处理Batch Size即使每次只处理一帧图像在构建TensorRT引擎时也可以设置一个合适的批处理大小如4或8这能让引擎内部优化更充分。推理时使用动态批处理或显式指定批处理大小为1。使用DLAJetson Orin包含深度学习加速器DLA。对于支持的算子将部分网络层运行在DLA上可以减轻GPU负载。可以在构建引擎时通过--useDLACore参数指定。内存与交换空间管理同时运行ROS 2、SLAM、目标检测等多个进程内存消耗很大。确保系统有足够的交换空间Swap。可以使用zram-config或创建一个高速SSD上的交换文件来缓解内存压力。进程优先级与CPU隔离使用chrt命令为关键的实时进程如电机控制节点设置更高的调度优先级SCHED_FIFO。甚至可以考虑使用taskset将关键进程绑定到特定的CPU核心上避免被其他进程干扰。5.2 多节点通信与系统延迟分析ROS 2节点间的通信延迟直接影响控制效果。例如从摄像头采集图像到发出云台控制指令这个闭环延迟必须足够小跟踪才跟得上快速移动的目标。测量端到端延迟在图像消息中打上时间戳Header.stamp。在云台控制指令发出的节点里记录当前时间。两者之差即为处理延迟。可以通过ROS 2的rqt_bag或编写脚本离线分析。优化通信使用零拷贝对于像图像这样的大数据在同一个进程内的节点间传递使用ROS 2的IntraProcessCommunication可以避免内存拷贝。选择合适的QoS策略对于控制指令使用Reliable和Volatile的QoS可能比默认的Best Effort更好确保指令不丢失。但对于高频的里程计数据Best Effort和SensorDataQoS可能更合适以降低延迟。简化消息类型自定义消息类型尽量简单避免嵌套过深的大数组。使用同步机制对于检测和跟踪确保使用的图像和相机信息CameraInfo是时间同步的。可以使用ROS 2的message_filters库中的ApproximateTime策略来同步订阅多个话题。5.3 底盘与云台控制参数整定这是让机器人行为“像样”的关键参数不对机器人要么反应迟钝要么抖动剧烈。底盘运动控制PID整定电机控制器内部通常有速度环PID。你需要调节的是Jetson上层发送给电机控制器的“目标速度”与底层编码器反馈的“实际速度”之间的闭环。步骤首先将I和D设为0逐渐增大P让机器人能快速响应指令但又不会在目标速度附近剧烈振荡。然后加入一点I值以消除静差到达目标速度后仍有微小误差。D值要非常谨慎地添加用于抑制超调但过大的D值会放大噪声引起高频抖动。工具使用rqt_plot实时绘制目标速度与实际速度曲线是调参最直观的方式。云台跟踪控制器整定前面提到的PI控制器Kp决定了云台响应目标偏移的速度。Kp太大云台会抖动太小则跟踪缓慢始终落后于目标。Ki用于消除静态误差目标静止时能否对准中心。但积分项容易饱和当目标长时间移出视野时积分会累积一个很大的值需要设置积分限幅或积分分离逻辑。实操技巧先让人站在机器人前缓慢左右移动调整Kp使云台跟随平滑无抖动。然后让人静止观察云台能否稳定对准。最后测试快速移动的跟随效果。6. 真实项目中的避坑指南与故障排查在实际项目开发中总会遇到各种预料之外的问题。这里分享几个我踩过的坑和解决方法。6.1 电源噪声导致CAN总线通信异常现象机器人静止时一切正常一旦电机开始转动CAN总线上的其他设备如另一个传感器就掉线或收到大量错误帧。排查过程首先用candump或ifconfig can0查看CAN总线状态发现电机启动时错误帧计数RX/TX errors急剧上升。怀疑是接线问题检查CAN_H和CAN_L是否双绞终端电阻120欧姆是否正确连接在总线两端。以上无误后问题依旧。使用示波器观察电机启动瞬间CAN总线上的波形发现电源线上有剧烈的电压毛刺噪声。根因电机是感性负载启停和PWM调速时会产生很大的反向电动势和电流突变通过共用电源线干扰了CAN收发器的工作电压。解决方案电源隔离为CAN收发器模块或整个Jetson主控板使用独立的DC-DC隔离电源模块与电机动力电源在电气上完全隔离。加强滤波在电机驱动器的电源输入端并联大容量电解电容如1000uF和瓷片电容0.1uF吸收高频噪声。使用屏蔽线CAN通信线务必使用带屏蔽层的双绞线屏蔽层单点接地接在机器人主地。6.2 里程计累积误差与SLAM漂移现象机器人执行“正方形”路径回到原点时SLAM估计的位姿与真实位置有较大偏差且运行时间越长地图变形越严重。排查与解决检查编码器读数首先确保电机编码器反馈是准确的。手动推动机器人一小段固定距离对比编码器计算出的位移与实际位移是否吻合。如果不吻合需检查轮子周长参数、编码器线数设置是否正确。校准轮子间距差速驱动机器人的里程计精度极度依赖“轮距”两个驱动轮之间的距离这个参数。不准确的轮距会导致转弯角度计算错误。校准方法让机器人原地旋转360度通过发送固定的角速度指令编码器积分得到的角度应该是2π。如果不符则根据比例调整轮距参数。实际角度 (右轮行程 - 左轮行程) / 轮距因此轮距 (右轮行程 - 左轮行程) / 实际角度融合IMU数据纯编码器里程计在轮子打滑时会失效。集成一个IMU惯性测量单元使用扩展卡尔曼滤波EKF或互补滤波融合编码器数据和IMU的角速度、加速度信息可以显著提升短时精度和抗打滑能力。ROS中的robot_localization功能包可以很方便地实现多传感器融合。SLAM闭环检测确保使用的SLAM算法如ORB-SLAM3的闭环检测功能是开启的。当机器人重新访问已探索区域时闭环检测能够纠正累积的漂移是保证大范围建图精度的关键。6.3 云台抖动与目标跟丢现象云台在跟踪时出现高频小幅抖动或者在目标快速移动或短暂被遮挡后彻底跟丢需要很长时间才能重新锁定。解决方案降低控制器频率增加滤波云台舵机本身的响应频率有限通常50Hz。如果你的控制指令发布频率过高如100Hz而舵机无法跟上就会产生抖动。将控制频率降低到与舵机响应频率匹配如30-50Hz。在计算像素误差前对检测框的中心坐标进行一阶低通滤波平滑掉检测本身的抖动。# 简单的一阶低通滤波 filtered_cx alpha * current_cx (1 - alpha) * filtered_cx_prev加入目标预测机制使用一个简单的卡尔曼滤波器或匀速模型来预测目标在下一帧的位置。当某一帧没有检测到目标时短暂遮挡使用预测值作为控制器的输入而不是立即停止跟踪。这大大提高了跟踪的鲁棒性。设置搜索窗当目标跟丢后不要在全图像范围内重新搜索。以上一帧目标位置为中心划定一个较大的区域作为搜索窗只在这个区域内运行检测算法可以降低计算量加快重捕获速度。经过以上这些步骤的打磨你的UGV Rover PT Jetson Orin AI套件才能从一个能动的Demo进化成一个真正稳定、智能、可完成复杂任务的机器人平台。整个过程中最深的体会是机器人开发是软硬件深度结合的领域很多软件问题其根源在硬件而硬件的潜力又需要优秀的软件来挖掘。这个套件提供了一个极佳的、降低硬件门槛的起点让你能把更多精力投入到算法、系统集成和场景应用这些真正创造价值的部分。