尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

ROS2机器人自主导航与视觉系统:从项目拆解到实机部署全流程指南

ROS2机器人自主导航与视觉系统:从项目拆解到实机部署全流程指南 简介本资源是一套面向高校机器人方向毕业设计、课程设计及期末大作业的ROS2综合实践项目聚焦机器人自主导航与视觉感知两大核心能力适用于具备ROS2基础、希望系统掌握SLAM建图、路径规划、物体检测与多节点协同开发的学习者。压缩包共2000个文件总大小20.05MB涵盖164个CMakeLists.txt构建配置、69个SDF模型文件Gazebo仿真环境、45个Python节点脚本含导航与视觉处理逻辑、55个Shell/Bash启动脚本环境初始化与流程控制、977个log日志文件便于调试分析以及大量配置config、参数yaml、仿真模型dae/model和RVIZ可视化配置文件。已有41人学习下载资源结构高度模块化包含turtlebot3_gazebo仿真、pl_interface算法接口、wall_follower避障等典型功能子系统预览可见多个local_setup.bash环境配置脚本表明开箱即用性强可直接用于仿真验证与二次开发。1. 项目概述从一包代码到一套完整的机器人系统收到一个名为“ROS2机器人自主导航与视觉系统.zip”的压缩包对于任何一个从事机器人开发的朋友来说这都像收到了一份“宝藏地图”。它不仅仅是一堆代码文件更是一个完整的、可运行的机器人系统原型。这个项目标题清晰地指向了现代移动机器人领域的两个核心能力自主导航与视觉感知。自主导航让机器人知道“我在哪、要去哪、怎么去”而视觉系统则赋予了机器人“眼睛”使其能理解环境、识别物体、甚至与人交互。将两者结合在ROS2框架下意味着这是一个面向未来的、模块化、分布式且实时性更强的机器人解决方案。这个项目包的价值在于它很可能已经搭建好了从底层驱动、传感器数据处理、到上层导航算法和视觉应用之间的桥梁。对于学习者它是一个绝佳的、可以“开箱即用”的实验平台避免了从零搭建系统时令人头疼的依赖、版本和通信问题。对于开发者它提供了一个清晰的架构参考展示了如何将导航栈如Nav2与视觉处理节点如OpenCV、视觉SLAM优雅地集成在一起。无论你是想复现一个智能小车还是为自己的机器人项目寻找灵感这个压缩包都是一个极佳的起点。接下来我将带你深入拆解这个项目看看它内部究竟是如何运作的以及我们如何能最大化地利用它。2. 项目整体架构与设计思路拆解2.1 核心组件与依赖关系解析解压这个ZIP文件后我们通常会看到一个标准的ROS2工作空间结构如src,build,install,log目录。在src目录下会包含若干个功能包。一个典型的、功能完整的“自主导航视觉”项目其核心架构通常围绕以下几个关键功能包展开机器人底盘驱动包负责与真实的电机控制器如STM32、Arduino或仿真器进行通信发布里程计/odom话题并订阅速度控制/cmd_vel话题。这是机器人的“腿”。传感器驱动包包括激光雷达如RPLidar、深度相机如Intel Realsense、Orbbec Astra、IMU等驱动。它们负责将原始的传感器数据转换为ROS2标准消息如/scan,/camera/color/image_raw,/imu/data这是导航和视觉的“感官输入”。导航功能包通常基于Nav2项目。这是系统的“大脑”之一包含AMCL自适应蒙特卡洛定位用于在已有地图中估计机器人位姿。BT Navigator行为树导航器负责调度全局规划、局部规划、恢复行为等使导航过程更鲁棒。Planner Server Controller Server分别负责全局路径规划和局部轨迹跟踪控制。Map Server加载和提供预先构建好的静态地图.pgm和.yaml文件。视觉功能包这是项目的另一双“眼睛”和“大脑”可能包含视觉SLAM如RTAB-Map、ORB-SLAM3的ROS2封装。它利用相机图像创建环境地图并同时进行定位是导航地图的重要来源或补充。物体识别与跟踪使用OpenCV或深度学习框架如TensorFlow、PyTorch的ROS2接口实现用于识别特定物体、人脸或二维码并可能输出目标物体的位姿信息。视觉伺服根据视觉反馈直接控制机器人运动常用于抓取、对接等精细操作。集成与启动包通常有一个顶层的launch文件夹里面存放着各种.launch.py文件。这些启动文件像“总指挥”一键启动所有必要的节点并配置好它们之间的话题、服务连接和参数。这是项目能“一键运行”的关键。注意一个设计良好的项目其功能包之间应该是松耦合的。导航包不应该直接依赖某个特定型号的相机驱动而应该通过标准的/scan或/map话题进行通信。这种设计让你可以轻松更换传感器或算法模块。2.2 为什么选择ROS2与ROS1的对比考量项目标题明确使用了“ROS2”这背后有深刻的工程考量。ROS1虽然成熟但其基于TCPROS的通信机制存在中心化的单点故障Master节点且对实时性和嵌入式系统的支持有限。ROS2采用DDS作为底层通信中间件带来了根本性变革去中心化没有Master节点节点之间通过DDS自发现、自连接系统更健壮。实时性DDS支持服务质量策略可以配置数据的可靠性、截止时间、持久性等更适合对时间有严格要求的控制任务。跨平台与嵌入式友好支持Windows、macOS更重要的是对资源受限的微控制器和实时操作系统支持更好。生命周期管理节点有了明确的“配置-激活-去激活-清理”状态机便于系统的安全启动和关闭。对于“自主导航与视觉系统”这种复杂系统ROS2的这些特性至关重要。例如在导航过程中确保/cmd_vel控制指令能及时、可靠地送达底盘驱动节点是安全的基本要求。视觉节点处理大量图像数据可以通过配置QoS策略为“尽力而为”模式避免阻塞关键的控制流。3. 环境部署与项目初始化实操3.1 系统准备与ROS2基础环境搭建假设你使用的是Ubuntu 22.04这是目前ROS2 Humble Hawksbill长期支持版本的首选平台。第一步是安装ROS2。虽然网络上有各种“一键安装脚本”但我强烈建议初学者至少走一遍官方安装流程以理解其依赖关系。# 1. 设置语言环境确保是UTF-8 sudo apt update sudo apt install locales sudo locale-gen en_US en_US.UTF-8 sudo update-locale LC_ALLen_US.UTF-8 LANGen_US.UTF-8 export LANGen_US.UTF-8 # 2. 添加ROS2软件源 sudo apt install software-properties-common sudo add-apt-repository universe sudo apt update sudo apt install curl -y sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release echo $UBUNTU_CODENAME) main | sudo tee /etc/apt/sources.list.d/ros2.list /dev/null # 3. 安装ROS2桌面版包含GUI工具和基础功能包 sudo apt update sudo apt install ros-humble-desktop # 4. 配置环境变量每次打开新终端都需要执行或写入~/.bashrc source /opt/ros/humble/setup.bash安装完成后可以通过ros2 run demo_nodes_cpp talker和ros2 run demo_nodes_py listener在两个终端中测试通信是否正常。3.2 项目依赖安装与工作空间编译将“ROS2机器人自主导航与视觉系统.zip”解压后你得到的是一个ROS2工作空间。进入该目录首先需要安装所有缺失的依赖。# 进入项目工作空间根目录 cd ~/path_to_your_project/ros2_ws # 更新apt并安装rosdep如果尚未安装 sudo apt update sudo apt install python3-rosdep2 sudo rosdep init # 如果之前没初始化过 rosdep update # 安装工作空间内所有功能包的依赖 rosdep install -i --from-path src --rosdistro humble -y这一步至关重要。rosdep会根据每个功能包package.xml中声明的依赖自动安装系统级的库和ROS2功能包。如果失败需要根据错误信息手动安装缺失的包例如sudo apt install ros-humble-nav2-*。接下来使用colcon工具编译工作空间。colcon是ROS2推荐的构建工具。# 在workspace根目录下编译 colcon build # 或者使用并行编译加速--symlink-install可以节省磁盘空间并方便开发 colcon build --symlink-install --parallel-workers 4 # 编译成功后source安装目录下的setup脚本来覆盖系统ROS2环境 source install/setup.bash实操心得编译过程是最容易出错的地方。常见错误包括1依赖未完全安装仔细阅读rosdep install的输出2Python包的版本冲突建议为项目创建独立的Python虚拟环境3CMakeLists.txt或package.xml编写有误需要对照ROS2官方文档检查语法。编译时关注Starting 和Finished 的输出可以快速定位是哪个包出了问题。4. 导航系统核心Nav2配置与调优详解4.1 Nav2启动与基础参数解读导航系统的核心是Nav2。项目中的启动文件例如bringup_launch.py会启动整个Nav2栈。理解关键参数是调优的基础。我们来看一个典型的导航参数文件片段# nav2_params.yaml amcl: ros__parameters: min_particles: 500 max_particles: 5000 # 初始位姿如果不确定可以设为[0, 0, 0]通过RViz的“2D Pose Estimate”提供 initial_pose: {x: 0.0, y: 0.0, z: 0.0, yaw: 0.0} bt_navigator: ros__parameters: # 行为树XML文件路径定义了导航失败时的恢复逻辑 bt_xml_filename: navigate_w_replanning_and_recovery.xml controller_server: ros__parameters: # 使用的控制器插件如DWB、TEB controller_plugins: [FollowPath] FollowPath: plugin: dwb_core::DWBLocalPlanner # 最大线速度和角速度必须与机器人物理极限匹配 max_vel_x: 0.26 max_vel_theta: 1.0 # 目标容差到达目标点多近算成功 xy_goal_tolerance: 0.1 yaw_goal_tolerance: 0.1 planner_server: ros__parameters: # 使用的全局规划器插件如NavFn、Smac planner_plugins: [GridBased] GridBased: plugin: nav2_navfn_planner/NavfnPlanner # 是否允许未知区域规划谨慎开启 allow_unknown: false启动导航系统通常使用如下命令# 在项目工作空间下先source环境 source install/setup.bash # 启动包含机器人、传感器和Nav2的完整系统 ros2 launch your_robot_bringup bringup_launch.py # 或者在仿真中启动如果项目包含Gazebo仿真 ros2 launch your_robot_gazebo simulation.launch.py4.2 地图构建与定位实战自主导航的前提是有一张环境地图。项目可能已经提供了预建地图但学会自己建图是必备技能。常用的建图工具是SLAM Toolbox或Cartographer。# 启动机器人底盘和激光雷达或深度相机 ros2 launch your_robot_bringup sensors.launch.py # 启动SLAM节点以SLAM Toolbox为例 ros2 launch slam_toolbox online_async_launch.py # 启动RViz2进行可视化 ros2 run rviz2 rviz2 -d ros2 pkg prefix slam_toolbox/share/slam_toolbox/config/slam_toolbox_default.rviz在RViz中你会看到激光扫描点云。通过键盘或手柄控制机器人缓慢、匀速地走遍整个环境确保扫描范围覆盖所有区域特别是角落和走廊尽头。建图完成后保存地图# 调用地图保存服务 ros2 service call /slam_toolbox/save_map slam_toolbox/srvs/SaveMap “filename: ‘/home/user/map’”这会生成map.pgm图像和map.yaml元数据两个文件。将这两个文件放入项目的maps目录并在导航启动配置中指定其路径。定位AMCL调优心得粒子数min_particles和max_particles决定了定位的精度和计算开销。粒子太少容易定位失败太多会卡顿。室内小环境500-2000足够大环境可增至3000-5000。初始位姿如果机器人开机位置固定在参数中设置准确的initial_pose能极大加快收敛。如果不确定一定要在RViz中使用“2D Pose Estimate”工具根据机器人在地图中的实际位置用鼠标拖拽出一个带方向的箭头这是告诉AMCL“我大概在这里”。这个操作是成功定位的关键第一步。观察RViz定位成功后RViz中绿色的粒子云会紧密聚集在机器人实际位置周围并且随机器人移动而稳定移动。如果粒子云散乱或漂移可能是里程计误差太大或地图与实际环境有出入。5. 视觉系统集成从图像流到语义信息5.1 视觉驱动的选择与图像话题处理视觉系统的入口是相机驱动。项目可能集成了USB相机、Intel Realsense或ZED相机。以常用的librealsense2为例启动后会产生一系列话题/camera/color/image_raw: RGB彩色图像/camera/depth/image_rect_raw: 深度图像/camera/color/camera_info: 相机内参和畸变系数在ROS2中处理图像首选cv_bridge库它能在ROS2的sensor_msgs/Image消息和OpenCV的cv::Mat格式之间无缝转换。下面是一个简单的图像订阅节点示例用于显示图像# vision_node.py import rclpy from rclpy.node import Node from sensor_msgs.msg import Image from cv_bridge import CvBridge import cv2 class VisionNode(Node): def __init__(self): super().__init__(vision_node) self.subscription self.create_subscription( Image, /camera/color/image_raw, # 订阅的话题名 self.image_callback, 10) self.bridge CvBridge() def image_callback(self, msg): try: # 将ROS2 Image消息转换为OpenCV格式 cv_image self.bridge.imgmsg_to_cv2(msg, bgr8) except Exception as e: self.get_logger().error(cv_bridge conversion failed: %s % e) return # 在此处进行你的视觉处理例如边缘检测 gray cv2.cvtColor(cv_image, cv2.COLOR_BGR2GRAY) edges cv2.Canny(gray, 50, 150) # 显示图像 cv2.imshow(Original, cv_image) cv2.imshow(Edges, edges) cv2.waitKey(1) def main(argsNone): rclpy.init(argsargs) node VisionNode() rclpy.spin(node) node.destroy_node() rclpy.shutdown() if __name__ __main__: main()注意事项图像话题的数据量非常大。务必注意回调函数的执行效率。如果处理算法耗时较长如深度学习推理一定要使用多线程或异步方式避免阻塞其他回调导致整个节点响应迟缓。可以考虑使用rclpy.executors.MultiThreadedExecutor或将耗时任务抛到单独的线程池中执行。5.2 视觉功能实现物体识别与视觉SLAM初探项目中的视觉功能可能集中在某个vision或perception功能包中。常见的功能包括1. 基于颜色的物体识别与跟踪 这是最基础的视觉应用。利用OpenCV的inRange函数在HSV颜色空间进行阈值分割找到目标色块计算其轮廓和中心点进而可以发布一个包含(x, y)坐标的geometry_msgs/Point消息。导航系统可以订阅这个消息将其作为动态目标点。2. 二维码/ArUco码识别 用于机器人精准定位或触发特定任务。使用aruco模块检测二维码可以直接得到二维码在相机坐标系下的位姿translation和rotation。这个位姿信息可以通过tf2发布与其他模块如机械臂联动。3. 视觉SLAM集成 如果项目集成了如RTAB-Map这样的视觉SLAM那么导航系统将获得一个由视觉点云构成的、富含纹理信息的3D地图这比单纯的2D激光地图更丰富。RTAB-Map可以同时输出点云地图、2D占据栅格地图供Nav2使用和机器人的6自由度位姿。集成时需要确保将RTAB-Map发布的/map话题和/tf变换正确配置到Nav2的map_server和amcl中。一个简单的物体识别节点核心逻辑def detect_object(self, cv_image): hsv cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV) # 定义红色范围示例 lower_red np.array([0, 120, 70]) upper_red np.array([10, 255, 255]) mask cv2.inRange(hsv, lower_red, upper_red) # 形态学操作去除噪声 kernel np.ones((5,5), np.uint8) mask cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel) # 寻找轮廓 contours, _ cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) if contours: # 找到最大轮廓 largest_contour max(contours, keycv2.contourArea) # 计算最小外接矩形和中心 x, y, w, h cv2.boundingRect(largest_contour) center_x x w // 2 center_y y h // 2 # 发布目标点信息 self.publish_target_point(center_x, center_y)6. 系统集成与联调让导航“看见”让视觉“指引”6.1 坐标变换与TF树管理这是集成过程中最容易出错也最关键的部分。机器人上每个传感器、每个连杆都有自己独立的坐标系。ROS2使用TF2库来维护这些坐标系之间的动态变换关系。一个正确的TF树是导航和视觉融合的基础。典型的TF树应该包含map - odom - base_footprint - base_link - camera_link - camera_color_optical_framemap: 全局固定坐标系地图原点。odom: 里程计坐标系随机器人移动而累积漂移。base_link: 机器人基座中心是控制的核心参考系。camera_link: 相机物理安装位置。camera_color_optical_frame: 相机光学坐标系Z轴向前Y轴向下是OpenCV等视觉库的标准坐标系。检查TF树ros2 run tf2_tools view_frames.py这会生成一个frames.pdf文件直观展示所有坐标系及其连接关系。如果树断裂或关系错误导航和视觉将无法正确理解数据。常见问题与修复问题在RViz中激光扫描点云或相机图像飘在空中不与地图对齐。排查使用ros2 run tf2_ros tf2_echo source_frame target_frame检查两个关键变换map到odom由定位模块发布odom到base_link由里程计发布。查看它们是否有数据数值是否合理。解决确保你的机器人URDF模型或robot_state_publisher节点正确发布了从base_link到所有传感器link的静态变换jointtypefixed。确保定位节点如AMCL在发布map-odom变换底盘驱动在发布odom-base_link变换。6.2 行为树定制与任务编排Nav2的强大之处在于其基于行为树的导航引擎。项目中的bt_navigator会加载一个XML文件定义了导航失败时的恢复逻辑。理解并定制这个行为树能让你的机器人更智能。例如默认的navigate_w_replanning_and_recovery.xml定义了如果局部规划失败先尝试“清除代价地图”再尝试“旋转恢复”如果还不行则进行“全局重规划”。你可以修改这个XML加入自定义行为比如“当视觉识别到障碍物时发出语音警告”。!-- 自定义行为树片段示例 -- Sequence nameRecoveryWithVision ClearEntireCostmap nameClearGlobalCostmap-Context service_nameglobal_costmap/clear_entirely_global_costmap/ ClearEntireCostmap nameClearLocalCostmap-Context service_namelocal_costmap/clear_entirely_local_costmap/ !-- 这里可以插入一个自定义的视觉检查节点 -- CustomVisionCheck nameCheckWithCamera/ Spin spin_dist1.57/ !-- 旋转90度 -- Wait wait_duration5/ /Sequence要使用自定义行为你需要用C或Python实现一个符合BT::ActionNode接口的节点并将其注册到插件库中。这属于进阶内容但给了系统极大的灵活性。7. 仿真测试与实机部署策略7.1 利用Gazebo进行高保真仿真在将代码部署到昂贵的实机机器人之前仿真是必不可少的环节。如果项目包含了Gazebo仿真环境通常有.world文件和机器人.xacro模型文件你可以安全地测试各种极端情况。启动仿真ros2 launch your_robot_gazebo simulation.launch.py这个启动文件通常会启动Gazebo世界、加载机器人模型、并启动所有传感器激光雷达、相机、IMU的仿真插件。仿真测试要点传感器数据验证在RViz中确认/scan和/camera/image_raw等话题数据是否正常。控制验证通过ros2 topic pub /cmd_vel geometry_msgs/Twist发布速度指令看仿真机器人是否按预期运动。导航全流程测试在仿真中启动Nav2使用“2D Pose Estimate”和“2D Nav Goal”进行完整的建图、定位、导航测试。尝试设置一些难以到达的目标观察机器人的恢复行为。故障注入在Gazebo中临时添加障碍物或让传感器“失灵”测试系统的鲁棒性。7.2 从仿真到实机的平滑过渡仿真通过后部署到实机仍需谨慎。遵循以下步骤硬件接口适配确保项目中的底盘驱动包与你的真实电机控制器如STM32通过串口/USB或树莓派通过GPIO/PWM通信协议一致。通常需要修改驱动包中的串口端口号、波特率或CAN ID等参数。传感器标定这是实机部署成败的关键。相机标定使用camera_calibration包获取相机内参和畸变系数并更新URDF或相机信息发布节点中的参数。激光雷达标定确保激光扫描平面与地面平行并通过比对已知距离的物体来验证扫描数据的准确性。相机-激光雷达联合标定如果需要融合视觉和激光数据必须精确标定两者之间的外参旋转和平移。这是一个专业且繁琐的过程可以使用lidar_camera_calibration等工具。参数重调优仿真中的理想参数如机器人最大速度、控制器增益、代价地图膨胀半径在实机上几乎都需要重新调整。实机有更大的惯性、电机响应延迟和地面摩擦。调优原则从小参数开始逐步增加在安全空旷场地测试。安全第一实机测试时务必有紧急停止开关E-Stop。初次测试时将max_vel_x和max_vel_theta设置为一个非常小的值如0.1 m/s, 0.5 rad/s并随时准备用手挡住机器人或切断电源。8. 常见问题排查与性能优化实录8.1 典型问题速查与解决方案以下是我在多次部署类似系统中遇到的典型问题及解决方法问题现象可能原因排查步骤与解决方案RViz中看不到激光/相机数据1. 传感器节点未启动。2. 话题名称不匹配。3. RViz配置错误。1.ros2 node list和ros2 topic list检查节点和话题。2. 使用ros2 topic echo /scan --once查看是否有数据。3. 在RViz中检查Global Options的Fixed Frame是否正确通常是map或odom并正确添加LaserScan或Camera显示插件。AMCL定位粒子发散机器人“飘走”1. 初始位姿估计错误。2. 里程计数据不准或噪声大。3. 地图与实际环境严重不符。1. 务必使用RViz的“2D Pose Estimate”工具给出准确初始位姿。2. 检查/odom话题数据观察速度、位置积分是否合理。可能需要标定轮子直径和轮距。3. 重新建图确保环境没有发生大的改变。导航目标点规划失败1. 目标点位于障碍物或未知区域。2. 代价地图膨胀半径设置过大。3. 全局规划器参数问题。1. 在RViz的OccupancyGrid显示中确认目标点位置绿色为空闲红色为障碍灰色为未知。2. 减小inflation_radius如从0.3米减到0.15米让机器人能通过更窄的通道。3. 尝试切换全局规划器如从NavFn切换到SmacPlanner。机器人靠近障碍物时剧烈震荡1. 局部规划器DWB参数过于激进。2. 传感器数据延迟或更新慢。1. 调整controller_server参数降低max_vel_x增加sim_time模拟前瞻时间调整path_distance_bias和goal_distance_bias的权重。2. 检查激光雷达频率确保/scan的发布频率如10Hz与局部规划器控制频率匹配。视觉节点CPU占用率100%1. 图像处理回调函数耗时过长。2. 未使用图像传输压缩。1. 优化算法或使用image_transport订阅压缩话题如/camera/color/image_raw/compressed。2. 在发布端启用压缩ros2 run image_transport republish raw in:/camera/color/image_raw compressed out:/camera/color/image_raw。8.2 系统性能优化技巧降低计算负载降低分辨率对于导航相机图像无需1080p640x480甚至320x240通常足够。在启动相机驱动时设置较低的分辨率。降低频率并非所有节点都需要全速运行。例如视觉物体识别节点可以从30Hz降到5-10Hz。使用Costmap过滤器Nav2的代价地图可以设置observation_sources的marking和clearing频率降低激光数据处理频率。优化通信使用合适的QoS对于/cmd_vel控制指令使用RELIABLE和VOLATILE的QoS策略确保指令必达且不过期。对于/camera/image_raw这种大数据量话题使用BEST_EFFORT和KEEP_LASTdepth1即可。在同一机器上使用共享内存传输ROS2 Humble支持intra_process通信可以避免节点间拷贝数据极大提升性能。在启动节点时添加--use_intra_process_comms参数。选择性启动不要总是启动所有节点。项目通常提供多个启动文件。在开发调试阶段只启动你当前关心的部分。例如只启动底盘和激光雷达来测试建图而不启动视觉节点。这个“ROS2机器人自主导航与视觉系统.zip”项目包就像一本优秀的“菜谱”提供了所有原料和基本步骤。但要炒出一盘好菜关键在于厨师对火候参数、食材硬件和流程系统集成的理解与把控。我的经验是耐心和系统性测试是成功的关键。每次只修改一个参数并观察其影响为每个模块编写独立的测试节点充分利用RViz和rqt_graph等可视化工具。当你看到机器人流畅地避障、精准地到达视觉指定的目标点时那种成就感是对所有调试工作最好的回报。这个项目只是一个起点你可以在此基础上扩展语音交互、多机协作、高级视觉任务等构建出真正智能的机器人应用。本文还有配套的精品资源点击获取
返回列表