基于ROS的轮式机器人建模与路径规划仿真实践指南

简介:基于ROS的轮式机器人建模与路径规划仿真是哈尔滨师范大学自然科学学报2020年刊发的一篇学术论文(PDF格式),聚焦移动机器人路径规划、自主导航与避障技术。文章以ROS作为机器人开发平台,通过Rviz建立双轮差速机器人仿真模型,并结合Gazebo三维仿真平台设计运动环境,系统介绍了坐标系建立、里程计运动模型、粒子滤波状态估计以及A*路径规划算法的完整实现过程。仿真实验表明,所设计的机器人能够在未知环境中完成二维栅格地图构建,并实现自主导航与避障功能,是机器人、机器学习、深度学习方向研究者与工程师值得参考的专业文献。资源包为单份PDF文件,共5.55MB,内容包含全文图文信息,涵盖SLAM框架架构、gmapping功能包应用、导航算法等关键知识点。目前已有1509人次浏览学习,适合从事自主移动机器人、ROS系统开发及课题研究的读者参考。

1. 基于ROS的轮式机器人建模与路径规划仿真:先回答三个问题再动手

轮式机器人开发团队在样机到位之前,遇到的第一道坎基本都是同一个:导航算法拿什么验证。基于ROS的轮式机器人建模与路径规划仿真,就是先用URDF把底盘描述成虚拟模型,放进Gazebo里接受重力、摩擦和碰撞,再挂上导航栈完成自主移动验证。这套流程最常见也最稳的组合是Ubuntu 20.04、ROS Noetic和Gazebo 11,配合move_base、amcl和gmapping,一台普通电脑就能跑完整条链路。它能解决的核心痛点是:样机还没装好时,导航代码不空等;真机调试成本太高时,先用仿真把算法和参数暴露出来。

读这篇笔记,你只要带着三个问题来就行:这台虚拟小车靠什么运动模型动起来;全局规划和局部规划分别解决什么问题;仿真里调好的参数到了真机有多少参考价值。后面内容从环境搭建、URDF建模、传感器配置一路讲到建图与路径规划,最后是一组高频踩坑记录。适合刚接触ROS的开发者,也适合已经有真机项目、想补一套仿真回归流程的工程师。先说明白:这篇不谈底层原理大全,只讲落地路径。

2. 选型与最小环境搭建:为什么是Ubuntu 20.04 + ROS Noetic + Gazebo 11

2.1 ROS版本和仿真器怎么选:先看生态再看性能

常见做法是先用ROS Noetic把仿真链路跑通,再考虑ROS2迁移。原因很直接:Noetic是ROS1最后一个LTS版本,navigation栈里move_base、amcl、gmapping在这个版本上已经迭代多年,参数资料和踩坑记录最全。Gazebo 11作为Noetic默认配套的仿真器,差速驱动插件、激光雷达插件都直接用二进制包安装,不需要碰源码编译。对团队开发来说,这意味着你遇到的大部分问题在已有社区记录里都能搜到解法,不用自己从头黑匣子里摸。

ROS2和Nav2在架构上更现代,但Gazebo Fortress和Nav2的参数配置方式与ROS1差异不小。如果团队里没有一个人完整走过Nav2迁移路径,我一般建议第一版仿真项目还是留在Noetic上。尤其当你只关心轮式底盘和路径规划效果,而不是分布式通信、多机协同这类特性时,Noetic的生产力优势非常明显。硬件方面,8G内存、4核CPU能跑通基础场景,但建议16G内存,因为同时开Gazebo、Rviz和导航栈,内存峰值轻松超过6G。

2.2 用命令行快速搭建ROS工作空间

环境安装不是这篇的重点,但工作空间初始化是后续所有包的基础。按下面命令创建一个干净的catkin工作空间:

mkdir -p ~/robot_ws/src cd ~/robot_ws catkin_make source devel/setup.bash echo $ROS_PACKAGE_PATH

第一次执行catkin_make会创建build和devel目录。source之后,如果ROS_PACKAGE_PATH里包含robot_ws/src,说明工作空间生效。这里有个细节:如果你电脑上还有别的工作空间,_bashrc里source顺序决定谁的包优先,后source的工作空间会覆盖同名包。出现莫名其妙的包版本不对问题时,先看这里,别急着重装。

再验证rosdep依赖是否可用:

rosdep check --rosdistro noetic

正常会输出所有已安装包的依赖状态。如果提示缺依赖,执行rosdep install加上--from-paths src参数补齐。注意rosdep需要提前初始化,没初始化会出现找不到rosdep命令的情况。这块属于环境搭建最常见的小坎,花十分钟处理掉,后面建模阶段会顺畅很多。

2.3 验证Gazebo和Rviz能正常通信

工作空间就绪后,先跑一个最小的仿真实例。创建一个空launch文件,把Gazebo和Rviz同时拉起来:

<launch> <include file="$(find gazebo_ros)/launch/empty_world.launch"> <arg name="paused" value="false"/> <arg name="use_sim_time" value="true"/> </include> <node name="rviz" pkg="rviz" type="rviz" output="screen"/> </launch>

use_sim_time设为true是关键,它让所有节点使用仿真时钟而不是系统时钟,分布式调试时时间不同步的问题从这里就能避开。启动后Gazebo窗口出现一个带地面的空世界,Rviz可能显示默认视角,先不管,等到第4章再配TF和地图显示。如果Gazebo窗口打开很久还是灰屏,优先检查显卡驱动和OpenGL支持,别在ROS层面折腾。

3. 轮式机器人建模:URDF四要素与差速驱动配置

3.1 URDF里决定物理正确性的四个要素

URDF不只是画一个好看的3D模型,对仿真来说,真正影响行为的是link的visual、collision、inertial和joint这四样。visual只影响显示,collision决定碰撞检测体积,inertial决定质量和转动惯量。很多新手模型加载后瘫在地上,就是collision或inertial没写全。

我用一台常见的两轮差速底盘做例子,底盘主体用box几何体描述:

<link name="base_link"> <visual> <geometry> <box size="0.4 0.3 0.08"/> </geometry> <origin xyz="0 0 0.04"/> </visual> <collision> <geometry> <box size="0.4 0.3 0.08"/> </geometry> <origin xyz="0 0 0.04"/> </collision> <inertial> <mass value="5.0"/> <origin xyz="0 0 0.04"/> <inertia ixx="0.05" ixy="0.0" ixz="0.0" iyy="0.08" iyz="0.0" izz="0.08"/> </inertial> </link>

注意collision和visual的几何尺寸必须一致,否则会出现模型看起来躲开了障碍物、碰撞体积却撞上去的翻车现场。inertia的数值别随便填,它是物体转动惯量近似值,底盘这类近似长方体,ixx和iyy、izz按照质量分布估算。填零会导致Gazebo物理引擎计算异常,模型会抖动甚至直接崩飞。

3.2 轮子与底盘的连接:joint类型和TF树的关系

底盘和轮子之间用continuous类型的joint连接,表示轮子绕Y轴连续旋转。每个驱动轮必须对应一个joint,差速驱动插件从joint获取轮速。还要加一个支撑轮,否则车会在重力作用下前后倾倒。支撑轮用fixed joint固定到底盘,位置在底盘前后两端。

<joint name="left_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="left_wheel"/> <origin xyz="0.15 0.2 0"/> <axis xyz="0 1 0"/> </joint> <joint name="front_caster_joint" type="fixed"> <parent link="base_link"/> <child link="front_caster"/> <origin xyz="0.2 0 -0.04"/> </joint>

TF树里,base_link的位姿由joint计算得到,而base_footprint通常定义为base_link在水平面上的投影点,避免导航栈里出现高度分量干扰。常见做法是额外加一个base_footprint link作为root,把odom到base_footprint的变换交给差速驱动插件去发布。这里如果你偷懒直接让odom连base_link,后面AMCL配置时坐标系对不上,代价地图会莫名其妙转起来。

3.3 差速驱动与激光雷达的Gazebo插件配置

Gazebo里让车跑起来,核心是加载libgazebo_ros_diff_drive这个插件。插件参数包括左右轮joint名、轮距、轮径、命令话题和里程计话题。下面这份配置实践验证过,双轮轴距0.4m、轮径0.1m的底盘可以按这个改:

<gazebo> <plugin name="diff_drive_plugin" filename="libgazebo_ros_diff_drive.so"> <left_joint>left_wheel_joint</left_joint> <right_joint>right_wheel_joint</right_joint> <wheel_separation>0.4</wheel_separation> <wheel_diameter>0.1</wheel_diameter> <max_wheel_torque>20</max_wheel_torque> <max_wheel_acceleration>1.0</max_wheel_acceleration> <command_topic>cmd_vel</command_topic> <odometry_frame>odom</odometry_frame> <robot_base_frame>base_footprint</robot_base_frame> <publish_odom>true</publish_odom> <publish_wheel_tf>true</publish_wheel_tf> </plugin> </gazebo>

wheel_separation和wheel_diameter必须与URDF里轮子joint的origin和轮子半径一致,这是里程计推算是否准确的基础。max_wheel_torque和max_wheel_acceleration控制加速能力,设置过大会导致仿真里起步打滑,过小则跑起来像疲劳驾驶。publish_wheel_tf设为true,插件会自动发布odom到base_footprint的变换,省去手工维护里程计的烦恼。

激光雷达同样需要插件支持。轮式机器人导航仿真一般配单线激光雷达,挂在底盘上方获取2D信息。在URDF里添加雷达link、joint和一个sensor block:

<gazebo reference="laser_link"> <sensor name="laser" type="ray"> <pose>0 0 0.1 0 0 0</pose> <ray> <scan> <horizontal> <samples>360</samples> <resolution>1</resolution> <min_angle>-3.14159</min_angle> <max_angle>3.14159</max_angle> </horizontal> </scan> <range> <min>0.1</min> <max>10.0</max> </range> </ray> <plugin name="laser_plugin" filename="libgazebo_ros_ray_sensor.so"> <ros> <remapping>~/output:=/scan</remapping> </ros> <output_type>sensor_msgs/LaserScan</output_type> </plugin> <always_on>true</always_on> <update_rate>20</update_rate> </sensor> </gazebo>

update_rate设20Hz,对应真实雷达扫描频率。samples设为360,角度范围正负180度,这是2D导航最常见的配置。扫描频率和采样密度决定建图质量,但也会影响CPU负荷,不需要一味追求高参数。

4. 路径规划仿真:从建图到move_base自主导航

4.1 用gmapping和map_server把仿真环境变成2D栅格地图

路径规划离不开地图。Gazebo世界模型建好后,第一步是遥控小车在环境里转一圈,用gmapping生成2D栅格地图。启动gmapping的launch文件一般包含激光雷达、里程计、tf和slam_gmapping节点。可以直接复用turtlebot3导航包里的建图launch结构,但把机器人模型换成我们的。我习惯单独写一个launch,核心部分是slam_gmapping节点:

<node name="slam_gmapping" pkg="gmapping" type="slam_gmapping"> <param name="map_frame" value="map"/> <param name="odom_frame" value="odom"/> <param name="base_frame" value="base_footprint"/> <param name="laser_frame" value="laser_link"/> <remap from="scan" to="/scan"/> </node>

建图时要遥控小车覆盖整个环境,速度控制在0.2m/s以内,转弯尽量平缓。这个阶段最怕大力出奇迹,车速太快会导致里程计累计误差大、激光扫描匹配不稳定,建出来的图会重影。建完图后用map_saver保存:

rosrun map_server map_saver -f ~/robot_ws/src/my_robot_map

会生成map.pgm和map.yaml两个文件。map.pgm是栅格图像,map.yaml包含分辨率、原点、占用阈值等参数。navi导航时直接加载这个yaml文件,作为全局代价地图的静态层。

4.2 配置move_base:全局规划器与局部规划器分工

move_base是导航栈的总管,内部包含costmap_2d的全局和局部两层代价地图。全局代价地图负责静态地图加膨胀层,供全局路径规划器搜索从起点到目标点的路径;局部代价地图负责实时感知周围障碍物,供局部规划器做安全跟踪和避障。

全局规划器我用的默认NavfnROS,它在Noetic里稳定高效,适合室内结构化环境。局部规划器在DWA和TEB之间选,DWA参数少、适合同步差速底盘,TEB支持时间最优和动态避障,但参数多,调起来费时间。对于仿真验证阶段,先用DWA跑通流程,再按需切换TEB。move_base的launch核心如下:

<node name="move_base" pkg="move_base" type="move_base"> <remap from="cmd_vel" to="cmd_vel"/> <param name="base_global_planner" value="navfn/NavfnROS"/> <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS"/> <rosparam file="$(find my_robot_nav)/config/costmap_common_params.yaml" command="load" ns="global_costmap"/> <rosparam file="$(find my_robot_nav)/config/costmap_common_params.yaml" command="load" ns="local_costmap"/> <rosparam file="$(find my_robot_nav)/config/local_costmap_params.yaml" command="load"/> <rosparam file="$(find my_robot_nav)/config/global_costmap_params.yaml" command="load"/> </node>

costmap_common_params里最常调的是膨胀半径和障碍物范围。下面这份适合0.4m长、0.3m宽的小型底盘:

robot_base_frame: base_footprint update_frequency: 5.0 publish_frequency: 2.0 obstacle_range: 3.0 raytrace_range: 3.5 footprint: [[0.2, 0.15], [0.2, -0.15], [-0.2, -0.15], [-0.2, 0.15]] inflation_radius: 0.25 observation_sources: laser laser: {sensor_frame: laser_link, data_type: LaserScan, topic: /scan, marking: true, clearing: true}

footprint按实际车体外轮廓写,别用圆形代替,否则窄通道通行能力判断会失真。inflation_radius设0.25m,让路径和障碍物保持25cm以上距离。局部代价地图的参数决定实时反应速度:

local_costmap: global_frame: odom robot_base_frame: base_footprint rolling_window: true width: 3.0 height: 3.0 resolution: 0.05 plugins: - {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"} - {name: inflation_layer, type: "costmap_2d::InflationLayer"}

local_costmap跟随机器人移动,width和height设3m,分辨率0.05m适合室内环境。宽度设太大,障碍物检测滞后明显;设太小,路径规划看不到远方弯道,容易冲进死角。

4.3 用Rviz下发导航目标,验证从A点到B点的完整闭环

导航链路启动后,在Rviz里添加Map、RobotModel、Path和LaserScan显示,确认地图正常加载。然后点击2D Nav Goal按钮,在地图上点一个目标点并拖出朝向箭头,小车的DWA局部规划器会开始计算速度指令,驱动差速插件让轮子转起来。这里如果只看到路径规划结果但车不动,检查cmd_vel话题有没有被move_base发布,以及差速插件是否订阅了同一个cmd_vel话题。

rostopic echo /cmd_vel

能持续输出线速度和角速度数据,说明控制链路是通的。再开一个终端看局部规划状态:

rosparam get /move_base/local_costmap/inflation_radius

输出0.25说明参数已加载。这时候在Rviz里能看到绿色全局路径和红色局部路径,正常情况下局部路径跟随全局路径,遇到临时障碍物时会自动绕开。仿真里整车跑完一轮,如果路径平滑、无明显抖动,说明URDF和导航参数基本匹配。

5. 避坑:五个高频翻车现场与排查路径

5.1 现象:模型加载进Gazebo就瘫倒或者乱弹

这是URDF建模阶段最高频的问题。现象是模型一出现就塌向一侧,或者轮子陷进地里乱弹。原因通常是三个:一是collision体积缺失,Gazebo默认给link生成的碰撞体积和visual不一致;二是inertial参数没写或innertia矩阵不对;三是支撑轮位置不当,底盘重心不在支撑多边形内。解决方式是逐个link检查collision和inertial,确认支撑轮在底盘前后端都有布置。把底盘主体的惯性矩阵按长方体近似计算填入,模型就不会再倒。

5.2 现象:导航栈启动后报错,找不到从odom到base_footprint的变换

启动move_base时终端刷屏tf错误,最常见是差速驱动插件没有正确发布odom到base_footprint的变换。检查模型xacro文件里robot_base_frame参数是否写成base_link,而URDF里是否真的存在base_footprint这个link。差速插件发布odom变换需要robot_base_frame在TF树里存在。补上base_footprint并确保插件publish_wheel_tf设为true,问题一般能解决。

5.3 现象:建图过程重影严重,走廊错位、门洞重合

建图是路径规划的地基,建图崩了后面全崩。重影多因激光雷达帧率与里程计频率不匹配,或者车速过快导致扫描匹配失败。查看雷达topic频率:

rostopic hz /scan

如果远低于20Hz,说明Gazebo仿真里update_rate没生效,或者电脑负载太高。车速降到0.2m/s以下慢慢转一圈,重影通常会明显减轻。还有一种隐藏因素是地面摩擦系数太小,仿真轮子持续打滑,里程计失真,在URDF加摩擦系数能改善轮子的附着力。

5.4 现象:move_base规划的路径贴着墙或者直接穿墙而过

path贴合墙边通常不是全局规划器的问题,而是膨胀半径没生效或代价地图没更新。检查costmap_common_params里inflation_radius是否大于0,同时确认obstacle_layer有订阅scan。costmap在Rviz里显示为红黄渐变层,如果障碍物边缘没有渐变色,说明动态障碍物没有进入代价地图。另外global_costmap的track_unknown_space和static_layer参数不能同时为true,否则静态地图层会覆盖障碍物层,路径就会无视已知障碍。这里属于典型的配置参数互相打架的问题,排查时逐层检查代价地图的plugins。

5.5 现象:仿真跑得顺,真机却表现完全不同

仿真和真机的差异主要集中在轮径、轮距、电机响应和摩擦系数。真机轮径与URDF不一致会导致里程计距离比例偏大或偏小,直接表现在地图缩放和旋转上。常见做法是做一个轮径标定:让真车直线走一段已知距离,对比cmd_vel累计位移与实测位移,调整URDF或者里程计矫正系数。控制器响应差异则反映在路径跟踪的震荡上,真机的最大速度、加速度一般要低于仿真参数,move_base里max_vel_x和max_vel_trans这组参数落地时先保守再放开。

6. 把仿真参数沉淀成真机标定依据

仿真做到这个深度,下一步就是让Gazebo里的数据为真机服务。我会在launch启动后固定用bag记录里程计和激光数据,回放时对比不同规划器参数对路径平滑度的影响。每次调参数前先记录一组baseline,修改后对比横向偏差和停车精度,而不是靠肉眼判断。

除了改参数,Gazebo还能用来模拟动态场景。常见做法是往世界里随机生成圆柱形障碍物,让小车在相同地图多次执行导航,观察局部分数规划器能不能在移动障碍物逼近时及时绕行。这类方案在真实场地里布置成本高,仿真里用几行Python脚本就能建完,适合作为导航系统回归前的自动化测试场景,我现在的习惯是保留三套仿真场景:窄通道、多障碍物房间、长走廊转弯,每套场景对应一份参数基线。等真机调试遇到问题时,先回到仿真里复现,再针对性改真机参数,这套工作流帮我省掉了大量反复拆装车辆的时间。希望这次整理的内容能帮到你,遇到具体问题欢迎按章节里的排查路径逐条对照。

本文还有配套的精品资源,点击获取

相关新闻

OpenRocket 实战指南:一枚火箭从建模到弹道落地的完整仿真流程

OpenRocket 实战指南:一枚火箭从建模到弹道落地的完整仿真流程

OpenRocket 实战指南&#xff1a;一枚火箭从建模到弹道落地的完整仿真流程 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket OpenRocket 是一款开源火箭仿真…

2026/10/20 1:21:57 阅读更多 →
用调茶构建成长记录系统:具身化行为驱动的神经可塑实践

用调茶构建成长记录系统:具身化行为驱动的神经可塑实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:21:57 阅读更多 →
把 REA 逆向分析的 token 消耗压下来:给 Agent 的搜索与追踪上三道闸门

把 REA 逆向分析的 token 消耗压下来:给 Agent 的搜索与追踪上三道闸门

把 REA 逆向分析的 token 消耗压下来&#xff1a;给 Agent 的搜索与追踪上三道闸门 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea 让 REA 这类 Ag…

2026/10/20 1:20:54 阅读更多 →

最新新闻

【鸿蒙心迹】沉浸光感全链路——窗口、页面、浮层三层叠加(HarmonyOS 7.x)

【鸿蒙心迹】沉浸光感全链路——窗口、页面、浮层三层叠加(HarmonyOS 7.x)

第 14 篇把浮层的 systemMaterial 调顺之后&#xff0c;我以为沉浸光感这事儿就算完了。结果 UI 验收时又提了一句&#xff1a;"浮层是通透了&#xff0c;但页面本身、整个窗口还是实色&#xff0c;内容像贴在一张纯色纸上。"这篇就接这一句话——把窗口、页面、浮层…

2026/10/20 2:07:16 阅读更多 →
WorkBuddy Claw 远程控制:架构原理与实战代码详解

WorkBuddy Claw 远程控制:架构原理与实战代码详解

1. 引言WorkBuddy Claw 是一款面向开发者和运维团队的远程控制工具&#xff0c;它把「远程桌面」「命令行执行」「文件传输」和「自动化脚本」整合到同一套 API 体系中。与传统的 VNC 或 RDP 方案相比&#xff0c;WorkBuddy Claw 更强调「可编程」和「可编排」&#xff0c;让远…

2026/10/20 2:07:16 阅读更多 →
多路转接Epoll

多路转接Epoll

一、什么是Epollepoll 是 Linux 内核提供的 IO 多路复用技术&#xff0c;用来解决 select 和 poll 存在的性能短板。 select 和 poll 每次调用都要把全部监听 fd 拷贝到内核&#xff0c;并且内核需要遍历所有 fd 检查就绪状态&#xff0c;返回之后用户态同样要遍历全部集合寻找…

2026/10/20 2:07:16 阅读更多 →
小白程序员必看:轻松入门AI Agent,揭秘比聊天机器人更强大的执行系统

小白程序员必看:轻松入门AI Agent,揭秘比聊天机器人更强大的执行系统

本文深入浅出地解释了AI Agent的核心概念与运作机制&#xff0c;指出Agent不仅是回答问题的工具&#xff0c;更是一个能理解目标、拆解任务、执行并持续优化的完整系统。文章以“大脑工作流程工具接口执行能力结果检查机制”比喻Agent&#xff0c;并详细解析了Agent、LLM、Skil…

2026/10/20 2:07:16 阅读更多 →
Android17车载音频进阶之AudioReach GSL创建Graph(一百七十四)

Android17车载音频进阶之AudioReach GSL创建Graph(一百七十四)

简介: CSDN博客专家、《Android系统多媒体进阶实战》作者 博主新书推荐:《Android系统多媒体进阶实战》🚀 Android Audio工程师专栏地址: Audio工程师进阶系列【原创干货持续更新中……】🚀 Android多媒体专栏地址: 多媒体系统工程师系列【原创干货持续更新中……】�…

2026/10/20 2:07:16 阅读更多 →
rdpwrap.ini 配置全解:5 分钟在 Windows 上开通多用户远程桌面

rdpwrap.ini 配置全解:5 分钟在 Windows 上开通多用户远程桌面

rdpwrap.ini 配置全解&#xff1a;5 分钟在 Windows 上开通多用户远程桌面 【免费下载链接】rdpwrap.ini RDPWrap.ini for RDP Wrapper Library by StasM 项目地址: https://gitcode.com/GitHub_Trending/rd/rdpwrap.ini rdpwrap.ini 是社区为 RDP Wrapper Library 维护…

2026/10/20 2:06:16 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →