Lang: zh-CN # Wang Shijie 的博客 > Wang Shijie 的个人博客,记录技术学习、工程实践与日常随想。 > 除非另有说明,本站内容采用 CC-BY-NC-SA-4.0 协议。 作者Wang Shijie 记录技术学习与日常随想 ## 联系 - 作者: Wang Shijie - 邮箱: 3343137303@qq.com - 社交媒体 (Gitee): https://gitee.com/open-zynq - 社交媒体 (Space): https://space.bilibili.com/1875855110 - 社交媒体 (Blog): https://blog.csdn.net/CJLU_WSJ ## 文章 - [这个博客是怎么搭起来的](https://wsj-blog.pages.dev/posts/build-my-blog.md): 从 Astro 主题到 EdgeOne Pages 部署,再到自建 Waline 评论,记录这个博客的完整搭建过程。 - [你好,世界](https://wsj-blog.pages.dev/posts/hello-world.md): 这是这个博客的第一篇文章,说说为什么开始写,以及准备写些什么。 - [Ubuntu 26.04 + GNOME Wayland 设置视频动态壁纸(Hidamari 实测可用)](https://wsj-blog.pages.dev/posts/ubuntu-26-04-gnome-wayland-she-zhi-shi-pin-dong-tai-bi-zhi.md): 判断能不能用,只看工具是否支持,不要看教程年份GNOME 用 Mutter,不实现 wlr-layer-shell,所以 mpvpaper… - [ROS2系列教程:Moveit2真机控制与系列总结(原理)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-moveit2-zhen-ji-kong-zhi-yu-xi-lie.md): 阶段篇号主题掌握的关键能力入门1-12ROS2 基础节点/话题/服务/参数/Action/launch/tf2,能独立开发节点机器人学13-15运动学与坐标位姿、tf2 坐标变换、TF… - [ROS2系列教程:Moveit2进阶(抓取/OMPL/自定义规划)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-moveit2-jin-jie-zhua-qu-ompl-zi-ding.md): 理解规划器插件机制,能让你在特殊需求(狭窄通道、非标准成本函数)时不至于束手无策。 - [ROS2系列教程:Moveit2碰撞检测与避障](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-moveit2-peng-zhuang-jian-ce-yu-bi.md): 把前面学的串成真本事——用 Pick & Place 流程实现"感知 → 抓取 → 搬运 → 放置",深入 OMPL 各规划器(RRT/RRTConnect/BIT\*)的选型与调参… - [Ubuntu 自动登录后 GNOME 远程桌面连不上?一次登录钥匙环锁定的排查与永久修复](https://wsj-blog.pages.dev/posts/ubuntu-zi-dong-deng-lu-hou-gnome-yuan-cheng-zhuo-mian-lian.md): 自动登录 + GNOME 远程桌面「连不上但解锁后能用」,几乎都是登录钥匙环被锁定导致的判断依据是 GRD 日志里的… - [GNOME 50 (Wayland) 桌面网速悬浮窗:TopHat 部署实录与三个踩坑](https://wsj-blog.pages.dev/posts/gnome-50-wayland-zhuo-mian-wang-su-xuan-fu-chuang-tophat-bu.md): 想在 Ubuntu 的 GNOME 桌面上常驻一个「网速悬浮窗」:不占顶栏、不打断工作、全屏看视频或跑下载时也能瞄一眼实时上下行速率。本文记录在一台 GNOME Shell 50.1 +… - [ROS2系列教程:Moveit2运动学(IK/FK与运动学插件)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-moveit2-yun-dong-xue-ik-fk-yu-yun.md): 理解插件的机制,比背 API 更有价值。下面写一个"最小可用"的自定义 IK 求解器插件。 - [ROS2系列教程:Moveit2仿真与运动规划(基础)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-moveit2-fang-zhen-yu-yun-dong-gui.md): 本文是 ROS2 系列教程的第 36 篇:MoveIt2 仿真与运动规划(基础)。第 35 篇我们装好了 MoveIt2、写了一个两连杆机械臂的 URDF,并用… - [ROS2系列教程:Moveit2环境与机械臂建模准备](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-moveit2-huan-jing-yu-ji-xie-bi-jian.md): 本文是 ROS2 系列教程的第 35 篇:MoveIt2 环境与机械臂建模准备。第 31~34 篇我们完成了移动底盘机器人的完整实战(建图、导航、任务、安全)。。第 35… - [ROS2系列教程:上位机建图与导航(原理综合)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-shang-wei-ji-jian-tu-yu-dao-hang.md): 本文是 ROS2 系列教程的第 33 篇:上位机建图与导航(原理综合)。第 32 篇我们把下位机的数据(里程计、IMU、传感器)接进了 ROS2,实现了"软硬结合"。但机器人拿到数据之后要干什么?… - [ROS2系列教程:完整实体机器人项目实战(软硬协同)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-wan-zheng-shi-ti-ji-qi-ren-xiang-mu.md): 本文是 ROS2 系列教程的第 34 篇:完整实体机器人项目实战(软硬协同)。第 31~33 篇分别完成了硬件搭建、软硬通信、建图导航三件大事… - [ROS2系列教程:嵌入式控制与通信开发(原理+仿真)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-qian-ru-shi-kong-zhi-yu-tong-xin-kai.md): 本文是 ROS2 系列教程的第 32 篇:嵌入式控制与通信开发(原理+仿真)。第 31 篇我们搭好了实体机器人的硬件骨架。但硬件只是"尸体"… - [ROS2系列教程:实体机器人硬件搭建(原理)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-shi-ti-ji-qi-ren-ying-jian-da-jian.md): 本文是 ROS2 系列教程的第 31 篇:实体机器人硬件搭建(原理)。第 26-30 篇我们打通了硬件控制全链路:电机、舵机、传感器、MicroROS、ROS2-Control… - [ROS2系列教程:控制硬件实战(舵机与传感器,原理)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-kong-zhi-ying-jian-shi-zhan-duo-ji.md): 本阶段(第 26-30 篇)我们打通了机器人硬件全链路篇主题核心收获26嵌入式点灯GPIO 本质,嵌入式开发流程27MicroROSMCU 直接成为 ROS2… - [ROS2系列教程:控制硬件实战(电机驱动,原理)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-kong-zhi-ying-jian-shi-zhan-dian-ji.md): / real\_motor\_hw.cpp:真实电机硬件接口(串口/MicroROS 连接下位机)public:// 声明关节及其接口// 基类解析 URDF 的 配置//… - [ROS2系列教程:ROS2-Control与控制器(原理)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-ros2-control-yu-kong-zhi-qi-yuan-li.md): 官方控制器不够用时,可以写自定义控制器。 - [ROS2系列教程:MicroROS接入(原理+仿真)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-microros-jie-ru-yuan-li-fang-zhen.md): 本文详解ROS2 MicroROS接入原理与仿真实践,解决嵌入式设备与上位机通信的通用性难题。通过MicroROS架构(Client+Agent+传输层),实现MCU作为ROS2节点无缝接入系统… - [ROS2系列教程:嵌入式开发从点灯开始(原理)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-qian-ru-shi-kai-fa-cong-dian-deng.md): 本文是 ROS2 系列教程的第 26 篇:嵌入式开发从点灯开始(原理)。第 25 篇我们完成了 Nav2 导航阶段(21-25)的全部内容,前面的教程全都是在仿真环境里运行:Gazebo… - [ROS2系列教程:Nav2进阶实践(自定义算法、插件与行为树)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-nav2-jin-jie-shi-jian-zi-ding-yi.md): / 继承 nav2\_core::Controller,实现 5 个纯虚接口public:// 1. 配置:从参数获取配置// 2. 清理与激活// 3. 核心:计算速度指令(每 control… - [ROS2系列教程:Nav2导航仿真实战(全局+局部规划)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-nav2-dao-hang-fang-zhen-shi-zhan.md): 本文是 ROS2 系列教程的第 24 篇:Nav2 导航仿真实战(全局+局部规划)。至此我们已有地图(第 21/22 篇)、有定位(第 23 篇),就差"自己走路"… - [ROS2系列教程:AMCL定位与地图](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-amcl-ding-wei-yu-di-tu.md): 本文是 ROS2 系列教程的第 23 篇:AMCL 定位与地图。前两篇我们学会了建图——slam\_toolbox 和 Cartographer 都能产出地图… - [ROS2系列教程:Cartographer建图进阶](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-cartographer-jian-tu-jin-jie.md): 本文是 ROS2 系列教程的第 22 篇:Cartographer 建图进阶。上一篇用 slam\_toolbox 建出了第一张地图,但它的回环能力在长廊、大场地、复杂环境里会吃力——累积误差难以消除… - [ROS2系列教程:SLAM建图(slam_toolbox)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-slam-jian-tu-slam-toolbox.md): 本文是 ROS2 系列教程的第 21 篇:SLAM 建图(slam\_toolbox)。前 20 篇我们完成了建模仿真阶段——小车有模型、有物理、有传感器,但"它不知道自己在哪里… - [ROS2系列教程:机器人模型导入仿真实战](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-ji-qi-ren-mo-xing-dao-ru-fang-zhen.md): 大型 ROS2 工程通常拆成两个功能包:分工原则:description 只管"机器人长什么样",bringup 管"系统怎么跑"。导航、SLAM 等后续阶段都在 bringup 里加 launch… - [ROS2系列教程:Gazebo插件(关节控制/IMU/激光雷达)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-gazebo-cha-jian-guan-jie-kong-zhi.md): 本文是 ROS2 系列教程的第 19 篇:Gazebo 插件(关节控制/IMU/激光雷达)。上一篇小车能在 Gazebo 里跑动了,但它还是个"瞎子"——没有传感器,不知道周围有什么… - [ROS2系列教程:Gazebo仿真基础与世界搭建](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-gazebo-fang-zhen-ji-chu-yu-shi-jie.md): 内容是关于ROS2第18篇,Gazebo仿真基础与世界搭建。摘要需简洁概括核心内容。注意字数限制。本文是ROS2系列第18篇,讲解Gazebo仿真基础与世界搭建… - [ROS2系列教程:Xacro参数化建模](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-xacro-can-shu-hua-jian-mo.md): 回顾上一篇的差速小车,你实际感受到了:Xacro 是 URDF 的超集:一个合法的 Xacro 文件经过 命令展开后,得到的是标准 URDF。它新增的能力:ROS2 中 由同名包提供,启动时用… - [ROS2系列教程:URDF机器人建模(link与joint)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-urdf-ji-qi-ren-jian-mo-link-yu-joint.md): URDF 是一种 XML 格式的机器人描述文件,用树状结构描述机器人的物理组成:刚体(link)和关节(joint)。它回答三个问题:URDF 是 ROS1 时代的产物,被 ROS2 完整继承… - [ROS2系列教程:TF树与多坐标系管理(C++/Python)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-tf-shu-yu-duo-zuo-biao-xi-guan-li-c.md): 上一篇文章里,每条变换是"父 → 子"单向的。当你把所有变换按父子关系连起来,就得到一棵TF 树(TF Tree)map│odom│base\_link/… - [ROS2系列教程:tf2坐标变换详解(C++/Python)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-tf2-zuo-biao-bian-huan-xiang-jie-c.md): 查询” = 给定两个坐标系,返回它们之间的变换。例如:激光雷达检测到前方 1 米的墙(在laser坐标系),要换算到map坐标系,就需要的变换。 - [ROS2系列教程:运动学基础(位姿与坐标变换)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-yun-dong-xue-ji-chu-wei-zi-yu-zuo.md): ",即从参考系出发依次施加 yaw → pitch → roll 的。 - [ROS2系列教程:常用工具详解(ros2 CLI、rqt、RViz、ros2 bag、tf2基础)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-chang-yong-gong-ju-xiang-jie-ros2.md): tf2是 ROS2 的坐标变换库:维护"坐标系树",提供任意两个坐标系间的位姿变换。机器人上每个部件都有一个坐标系(base\_link、laser、camera、map),tf2 让"激光点坐标 →… - [ROS2系列教程:launch文件与多节点启动(参数/条件/复用)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-launch-wen-jian-yu-duo-jie-dian-qi.md): 本篇文章系统掌握了 launch:最简多节点启动、参数传递(yaml/字典/launch 参数)、话题重映射、命名空间、条件控制、子 launch 包含、组与外部进程、事件处理器,以及调试技巧… - [ROS2系列教程:Action动作通信(带反馈长任务)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-action-dong-zuo-tong-xin-dai-fan-kui.md): 动作接口用.action文件定义,三部分用---\# action/CountUntil.action —— 计数到目标值int32 target\_number \#… - [ROS2系列教程:参数Parameter与QoS策略](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-can-shu-parameter-yu-qos-ce-l-e.md): 参数(Parameter)是节点的配置项:一个带类型的键值对,运行时可查询、可修改。参数让"代码与配置分离"——同样的节点,通过不同参数启动,就能适配不同机器人、不同环境。参数名(parameter… - [ROS2系列教程:服务Service通信(下)同步异步与回调组](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-fu-wu-service-tong-xin-xia-tong-bu.md): 本篇文章把服务通信推向工程级:理解了同步/异步的底层机制(伪同步本质)、并发请求与多请求处理、回调组(互斥/可重入)与多线程执行器、超时与指数退避重试、服务与 QoS 的关系… - [ROS2系列教程:服务Service通信(上)客户端与服务端](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-fu-wu-service-tong-xin-shang-ke-hu.md): 沿用第 4 篇的包,添加验证接口可用本篇文章完成了服务通信的完整入门:理解了 Request/Response 模型与适用场景,用 Python 和 C++ 分别实现了服务端、同步客户端、异步客户端… - [ROS2系列教程:话题Topic通信(下)自定义消息与周期](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-hua-ti-topic-tong-xin-xia-zi-ding-yi.md): 定义 .msg/.srv 文件(接口包)→ colcon build 生成类型代码→ 发布者/订阅者 include/import 使用→ ros2 run 运行验证第 4 篇我们定义了(含… - [ROS2系列教程:话题Topic通信(上)发布者与订阅者](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-hua-ti-topic-tong-xin-shang-fa-bu.md): 本篇文章完成了话题通信的入门:理解了 Publish/Subscribe 模型的三大解耦优势、DDS 去中心化发现机制,用 Python 与 C++ 分别实现了发布者/订阅者并验证了跨语言通信… - [ROS2系列教程:package结构(CMake与Python两种包)](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-package-jie-gou-cmake-yu-python.md): ROS2 内置的std\_msgs覆盖常见场景,但你的业务数据(比如"机器人位姿 + 置信度 + 时间戳")往往是组合结构。这时需要自定义消息类型——定义一个.msg文件,rosidl… - [ROS2系列教程:工作空间与colcon构建](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-gong-zuo-kong-jian-yu-colcon-gou-jian.md): 本篇文章把 ROS2 从"脚本"提升到了"工程":理解了工作空间四目录结构、package 的概念与两种构建类型(ament\_python / ament\_cmake),掌握了 colcon… - [ROS2系列教程:认识节点与ROS图](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-ren-shi-jie-dian-yu-ros-tu.md): 在 ROS2 中,节点(Node)是一个负责执行特定任务的独立进程或进程内模块。一个机器人系统通常由几十个节点组成:有的节点负责读取激光雷达数据,有的负责做定位,有的负责规划路径,有的负责驱动电机… - [ROS2系列教程:Humble环境搭建与Hello World](https://wsj-blog.pages.dev/posts/ros2-xi-lie-jiao-cheng-humble-huan-jing-da-jian-yu-hello.md): 本节我们完成了 ROS2 的入门:理解 ROS2 与 ROS1 的架构区别、DDS 与 QoS 的概念、搭建 Humble 开发环境的基本流程,并用 C++ 与 Python 两种语言写出了第一个… - [C++综合实战:数据结构与算法实现及系列总结](https://wsj-blog.pages.dev/posts/c-zong-he-shi-zhan-shu-ju-jie-gou-yu-suan-fa-shi-xian-ji-xi.md): 阶段篇目核心内容入门1-5语法基础、控制流、函数、数组/指针、类初探进阶6-10类与对象、运算符重载、继承多态、内存管理、文件流STL11-15容器、迭代器、算法库、函数对象/Lambda、适配器模板… - [C++综合实战:网络编程入门与HTTP客户端](https://wsj-blog.pages.dev/posts/c-zong-he-shi-zhan-wang-luo-bian-cheng-ru-men-yu-http-ke-hu.md): Socket 基础(客户端/服务器模型与 TCP 通信四步)、HTTP 协议(请求/响应格式、方法、状态码)、迷你 HTTP 客户端(构造 GET 请求、解析响应头与… - [C++综合实战:面向对象图书管理系统](https://wsj-blog.pages.dev/posts/c-zong-he-shi-zhan-mian-xiang-dui-xiang-tu-shu-guan-li-xi.md): 本篇用图书管理系统BookReader类的封装(数据 + 行为)、EBook派生类的继承与多态(virtual 重写)、Library管理类的STL 容器(vector +… - [C++工程化:编译链接、调试与性能优化](https://wsj-blog.pages.dev/posts/c-gong-cheng-hua-bian-yi-lian-jie-tiao-shi-yu-xing-neng-you.md): 四阶段编译链接(预处理/编译/汇编/链接)与常见错误排查、GDB 调试(断点/单步/打印变量/调用栈)、内存检测(ASan 与 Valgrind… - [C++工程化:CMake构建与多文件项目管理](https://wsj-blog.pages.dev/posts/c-gong-cheng-hua-cmake-gou-jian-yu-duo-wen-jian-xiang-mu.md): 本篇讲解了 C++ 工程化核心的CMake 构建系统:最小项目与构建流程、多文件项目的目录组织与静态库与动态库的构建与选型(含对比表)、条件编译/option/查找与自动拉取依赖(find\_packa… - [C++并发编程:异步任务与线程池实战](https://wsj-blog.pages.dev/posts/c-bing-fa-bian-cheng-yi-bu-ren-wu-yu-xian-cheng-chi-shi-zhan.md): 一行启动异步任务并获取结果(含异常传递与 wait\_for 超时)、手动生产-消费单次结果、把任务与 future 打包、线程池的核心实现(条件变量任务队列 + packaged\_task 封装 +… - [C++并发编程:条件变量与原子操作](https://wsj-blog.pages.dev/posts/c-bing-fa-bian-cheng-tiao-jian-bian-liang-yu-yuan-zi-cao-zuo.md): 实现阻塞等待与通知(含谓词重载防虚假唤醒)、生产者消费者模型的完整实现、atomic 原子类型(fetch\_add/CAS… - [C++并发编程:线程与互斥锁](https://wsj-blog.pages.dev/posts/c-bing-fa-bian-cheng-xian-cheng-yu-hu-chi-suo.md): 的创建/join/detach 与参数传递、数据竞争的危害、std::mutex与 RAII 封装(lock\_guard / unique\_lock /… - [C++20新特性精讲:概念、范围与三路比较](https://wsj-blog.pages.dev/posts/c-20-xin-te-xing-jing-jiang-gai-nian-fan-wei-yu-san-lu-bi.md): concepts让模板约束可读、可复用;ranges以惰性视图与管道风格重构数据流;三路比较一次操作自动生成全套比较运算符;协程与模块开启语言新范式;std::span与constexpr扩展让代码更… - [C++17新特性精讲:结构化绑定、if constexpr与实用类型](https://wsj-blog.pages.dev/posts/c-17-xin-te-xing-jing-jiang-jie-gou-hua-bang-ding-if.md): 本篇讲解了 if/switch 初始化语句、结构化绑定、if constexpr 编译期分支、std::optional/variant/any 三种实用类型、string\_view… - [C++11/14新特性精讲:移动语义与智能指针实战](https://wsj-blog.pages.dev/posts/c-11-14-xin-te-xing-jing-jiang-yi-dong-yu-yi-yu-zhi-neng.md): 内容是关于C++现代特性:左值右值、移动语义、=default/=delete等。需概括核心。确保字数。本文介绍C++现代特性:五类值分类与右值引用生命周期延长… - [C++模板教程:类型推导与完美转发](https://wsj-blog.pages.dev/posts/c-mu-ban-jiao-cheng-lei-xing-tui-dao-yu-wan-mei-zhuan-fa.md): 完美转发是保留参数左右值属性// 接收函数:区分左值右值cout << "左值处理: " << value << endl;cout << "右值处理: " << value << endl;//… - [C++模板教程:变参模板、折叠表达式与SFINAE](https://wsj-blog.pages.dev/posts/c-mu-ban-jiao-cheng-bian-can-mu-ban-zhe-die-biao-da-shi-yu.md): 变参模板(Variadic Templates)允许模板接受任意数量的参数// 参数包:typename... ArgsArgs...是类型参数包。args...是函数参数包。获取参数个数… - [C++模板教程:特化、偏特化与类型萃取](https://wsj-blog.pages.dev/posts/c-mu-ban-jiao-cheng-te-hua-pian-te-hua-yu-lei-xing-cui-qu.md): 模板是「通用配方」,但某些特殊类型需要专门的实现。// 通用模板:处理一般类型a : b;// 全特化:为特定类型定制(如 const char\* 比较字符串而非指针)a : b;类型萃取(Type… - [C++模板教程:函数模板与类模板入门](https://wsj-blog.pages.dev/posts/c-mu-ban-jiao-cheng-han-shu-mu-ban-yu-lei-mu-ban-ru-men.md): 普通函数精确匹配优先于模板。模板可以匹配任何类型3. 用<>可以强制调用模板版本。public:// 类外定义:需要重复 template 前缀// 类外定义:需要重复 template… - [C++STL教程:容器适配器与实用工具](https://wsj-blog.pages.dev/posts/c-stl-jiao-cheng-rong-qi-shi-pei-qi-yu-shi-yong-gong-ju.md): 容器适配器是基于其他容器包装出的受限接口适配器底层容器(默认)特性stackdeque后进先出 LIFOqueuedeque先进先出 FIFOvector按优先级出队// 病情严重程度//… - [C++STL教程:函数对象与Lambda表达式](https://wsj-blog.pages.dev/posts/c-stl-jiao-cheng-han-shu-dui-xiang-yu-lambda-biao-da-shi.md): 函数对象(Functor)是重载了operator()的类对象,可以像函数一样调用。与普通函数相比,它可以保存状态。// 函数对象:重载 operator()private:int base;//… - [C++STL教程:迭代器与算法库](https://wsj-blog.pages.dev/posts/c-stl-jiao-cheng-die-dai-qi-yu-suan-fa-ku.md): 迭代器是统一访问容器元素的接口,让算法不关心容器类型。可以把迭代器理解为「智能指针」,支持->++--等操作。int score;// 默认升序// 降序int());//… - [C++STL教程:关联容器与无序容器](https://wsj-blog.pages.dev/posts/c-stl-jiao-cheng-guan-lian-rong-qi-yu-wu-xu-rong-qi.md): int age;// 自定义比较器(按年龄排序)people.insert({"张三", 30});people.insert({"李四", 25});people.insert({"王五",… - [C++STL教程:容器总览与序列容器](https://wsj-blog.pages.dev/posts/c-stl-jiao-cheng-rong-qi-zong-lan-yu-xu-lie-rong-qi.md): STL(Standard Template Library,标准模板库)是 C++ 标准库的核心,由容器、迭代器、算法、函数对象、适配器五大部分组成。它把「数据存储」与「数据处理」解耦,实现高效复用… - [C++进阶教程:文件流与字符串流](https://wsj-blog.pages.dev/posts/c-jin-jie-jiao-cheng-wen-jian-liu-yu-zi-fu-chuan-liu.md): 1.3 读取文件1.4 打开模式| 模式 | 含义 || — | — | — || | 读模式(ifstream 默认) || | 写模式(ofstream 默认,截断) || | 追加(不截断)… - [C++进阶教程:动态内存管理与智能指针](https://wsj-blog.pages.dev/posts/c-jin-jie-jiao-cheng-dong-tai-nei-cun-guan-li-yu-zhi-neng.md): RAII(Resource Acquisition Is Initialization,资源获取即初始化):把资源(内存、文件、锁)的获取放在构造函数中,释放放在析构函数中… - [C++进阶教程:继承与多态](https://wsj-blog.pages.dev/posts/c-jin-jie-jiao-cheng-ji-cheng-yu-duo-tai.md): 多态(Polymorphism)指同一个调用在不同对象上表现出不同行为。通过基类指针/引用调用虚函数,实际执行的是派生类的实现。多态三要素基类中定义虚函数。派生类重写虚函数。通过基类指针/引用调用… - [C++进阶教程:运算符重载与类型转换](https://wsj-blog.pages.dev/posts/c-jin-jie-jiao-cheng-yun-suan-fu-zhong-zai-yu-lei-xing.md): 运算符重载是让==<<等运算符可以作用于自定义类型,使代码更自然、更直观。例如c1 + c2让复数相加,直接打印对象… - [C++进阶教程:类与对象深入](https://wsj-blog.pages.dev/posts/c-jin-jie-jiao-cheng-lei-yu-dui-xiang-shen-ru.md): 本篇深入讲解了构造函数的种类与初始化列表、构造析构顺序、深拷贝与浅拷贝的区别及三法则、static 成员、const 成员函数、this 指针和友元,并用完整 String 类串联实战… - [C++入门教程:结构体、枚举与类初探](https://wsj-blog.pages.dev/posts/c-ru-men-jiao-cheng-jie-gou-ti-mei-ju-yu-lei-chu-tan.md): 结构体是不同类型数据的集合// 定义学生结构体int age;// 定义并初始化Student s1;// 默认构造s1.name = "张三";// 列表初始化(C++11)Student s2… - [C++入门教程:数组、字符串与指针入门](https://wsj-blog.pages.dev/posts/c-ru-men-jiao-cheng-shu-zu-zi-fu-chuan-yu-zhi-zhen-ru-men.md): 本文是C++系列教程的第4篇,重点讲解数组、字符串和指针的核心概念。主要内容包括:1) 一维/多维数组的声明、初始化和遍历,强调数组越界的危险性;2)… - [C++入门教程:函数与作用域详解](https://wsj-blog.pages.dev/posts/c-ru-men-jiao-cheng-han-shu-yu-zuo-yong-yu-xiang-jie.md): / 函数定义:返回类型 函数名(参数列表) { 函数体 }// 无返回值函数// 调用无参函数// 调用带参函数,接收返回值return 0;当函数定义在使用之后时,需要先声明//… - [C++入门教程:运算符、表达式与控制流程](https://wsj-blog.pages.dev/posts/c-ru-men-jiao-cheng-yun-suan-fu-biao-da-shi-yu-kong-zhi-liu.md): 本文是C++系列教程第二篇,重点讲解运算符、表达式和程序控制结构。主要内容包括: 运算符详解:分类介绍算术/关系/逻辑/位运算等8类运算符,特别说明整数除法截断、自增自减顺序、短路求值特性… - [C语言入门教程:从零开始学C语言编程](https://wsj-blog.pages.dev/posts/c-yu-yan-ru-men-jiao-cheng-cong-ling-kai-shi-xue-c-yu-yan.md): 本篇介绍了 C 语言的环境搭建、基础语法、运算符、条件循环,并用猜数字游戏串联实战。下一篇将深入讲解 C 语言的精髓——指针与内存管理,敬请期待! - [C++入门教程:从零开始学C++编程](https://wsj-blog.pages.dev/posts/c-ru-men-jiao-cheng-cong-ling-kai-shi-xue-c-bian-cheng.md): 本文是C++入门教程的第一篇,主要介绍了C++的基本概念、开发环境搭建、基础语法和实战练习… - [Python综合实战:从零开发一个命令行工具](https://wsj-blog.pages.dev/posts/python-zong-he-shi-zhan-cong-ling-kai-fa-yi-ge-ming-ling.md): 的收官实战篇(第 20 篇)。前 19 篇学习了语法、库、工程化等知识,本篇把它们串起来,从零开发一个。 - [Python进阶教程:Git版本控制与团队协作](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-git-ban-ben-kong-zhi-yu-tuan-dui.md): 本文是Python进阶教程中的Git版本控制指南,介绍了Git的核心概念与团队协作技巧… - [Python进阶教程:算法与数据结构入门](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-suan-fa-yu-shu-ju-jie-gou-ru-men.md): 本篇介绍了时间复杂度、常用数据结构(栈、队列)、排序与查找算法、递归和动态规划入门,并用 LRU 缓存串联实战。刷题建议:从 LeetCode 简单题开始,每天 1-2 题,坚持就是胜利。 - [Python进阶教程:机器学习入门(Scikit-learn)](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-ji-qi-xue-xi-ru-men-scikit-learn.md): 本篇介绍了机器学习的基本流程、分类/回归/聚类三大经典任务、交叉验证和特征工程,并用鸢尾花数据集跑通了完整实战。机器学习重在实践,建议用 UCI 或 Kaggle 的数据集多做练习。 - [Python进阶教程:自动化办公实战](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-zi-dong-hua-ban-gong-shi-zhan.md): 这篇Python办公自动化教程介绍了几个常用库的实战应用,包括:openpyxl处理Excel(读取/写入/合并)、python-docx操作Word文档、pdfplumber提取PDF文本… - [Python进阶教程:项目工程化与虚拟环境](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-xiang-mu-gong-cheng-hua-yu-xu-ni.md): 本篇介绍了虚拟环境、依赖管理、项目目录结构、.gitignore 规范等工程化基础。良好的工程习惯能让项目更易维护、协作和部署。下一篇将介绍自动化办公,用 Python 解放重复劳动。 - [Python进阶教程:单元测试与代码质量](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-dan-yuan-ce-shi-yu-dai-ma-zhi.md): 本篇介绍了 unittest 与 pytest 两大测试框架、Mock 模拟外部依赖、以及 flake8/black/mypy/coverage 等代码质量工具,并为计算器类编写了完整测试… - [Python进阶教程:装饰器与生成器深入](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-zhuang-shi-qi-yu-sheng-cheng-qi.md): 本篇深入讲解了装饰器(基础、带参数、内置装饰器)和生成器(基础、表达式、无限序列),并用手写缓存装饰器串联实战。理解这两个特性,能写出更简洁、更 Pythonic 的代码。 - [Python进阶教程:异步编程(asyncio)](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-yi-bu-bian-cheng-asyncio.md): 异步编程让程序在等待 I/O 时不阻塞,而是继续执行其他任务。单线程内实现并发,无锁竞争上下文切换开销极小适合大量 I/O 等待场景(网络请求、数据库)Python 3.7+… - [Python进阶教程:正则表达式进阶与文本处理](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-zheng-ze-biao-da-shi-jin-jie-yu.md): 本篇深入讲解了正则的分组捕获、贪婪匹配、前后断言、预编译等进阶技巧,并提供了日志解析和文本清理两个实战工具。正则表达式是文本处理的瑞士军刀,值得花时间熟练掌握。 - [Python进阶教程:调试技巧与性能优化](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-tiao-shi-ji-qiao-yu-xing-neng-you.md): 恭喜你完成Python 入门教程系列的全部 10 篇文章!篇目主题1Python 入门:基础语法2面向对象编程(OOP)3文件操作与异常处理4常用标准库与实用技巧5网络编程与数据抓取6多线程与多进程7… - [Python进阶教程:Web开发入门(Flask)](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-web-kai-fa-ru-men-flask.md): 简单:一个文件即可启动 Web 服务灵活:可以自由选择组件生态好:文档丰富,社区庞大本篇介绍了 Flask 的路由、模板、表单处理和 JSON API,并用待办清单应用串联实战… - [Python进阶教程:数据分析入门(NumPy与Pandas)](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-shu-ju-fen-xi-ru-men-numpy-yu.md): 本篇介绍了 NumPy 数组运算和 Pandas 的 Series、DataFrame、数据清洗、分组聚合,并用销售数据分析串联实战。下一篇将介绍Web 开发入门(Flask),敬请期待! - [Python进阶教程:数据库操作入门](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-shu-ju-ku-cao-zuo-ru-men.md): 数据库(Database)是有组织存储数据的仓库,支持高效增删改查(CRUD)。SQLite:轻量级,单文件… - [Python进阶教程:多线程与多进程](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-duo-xian-cheng-yu-duo-jin-cheng.md): 本文介绍了Python中多线程与多进程的使用方法。主要内容包括:1)多线程的创建方式(直接调用和继承Thread类)及线程池使用;2)线程安全与锁机制;3)多进程的适用场景(CPU密集型任务)及进程池… - [Python进阶教程:网络编程与数据抓取](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-wang-luo-bian-cheng-yu-shu-ju.md): 本文介绍了Python网络编程与数据抓取的基础知识,涵盖HTTP协议、urllib和requests库的使用、BeautifulSoup解析HTML以及爬虫规范… - [Python进阶教程:常用标准库与实用技巧](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-chang-yong-biao-zhun-ku-yu-shi.md): 摘要: 本文是Python入门系列第4篇,重点讲解常用标准库与实用技巧。涵盖os/sys(系统操作)、datetime(日期处理)、json(数据交换)、re(正则表达式)、random/collec… - [Python进阶教程:文件操作与异常处理](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-wen-jian-cao-zuo-yu-yi-chang-chu.md): 本文是Python入门教程系列的第三篇,主要讲解文件操作和异常处理。内容包括:文件打开与关闭(推荐使用with语句)、不同文件模式(r/w/a等)、读写文件方法(read/readline/for循环… - [Python进阶教程:面向对象编程(OOP)](https://wsj-blog.pages.dev/posts/python-jin-jie-jiao-cheng-mian-xiang-dui-xiang-bian-cheng.md): 面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程思想,它把数据和对数据的操作封装成对象… - [Python入门教程:从零开始学Python编程](https://wsj-blog.pages.dev/posts/python-ru-men-jiao-cheng-cong-ling-kai-shi-xue-python-bian.md): 本文介绍了 Python 的安装、基础语法和一个小实战项目。学习编程最重要的是多敲代码,建议每天坚持练习。后续我会继续更新 Python 进阶教程(面向对象、文件操作、数据处理等),欢迎关注! - [Ubuntu IBus 中文输入法终极优化指南:告别切换烦恼,提升输入效率](https://wsj-blog.pages.dev/posts/ubuntu-ibus-zhong-wen-shu-ru-fa-zhong-ji-you-hua-zhi-nan.md): 本文提供了Ubuntu 20.04/22.04系统下优化IBus中文输入法切换的完整指南… - [Orange Pi USB Device 模式设置指南](https://wsj-blog.pages.dev/posts/orange-pi-usb-device-mo-shi-she-zhi-zhi-nan.md): 本文介绍了在Orange Pi开发板上设置USB为设备模式的两种方法。推荐使用set\_device.sh脚本,执行简单命令即可完成设置;也可手动操作,通过echo命令写入mode文件并重启服务… - [数据精度和运算速度的中庸之道](https://wsj-blog.pages.dev/posts/shu-ju-jing-du-he-yun-suan-su-du-de-zhong-yong-zhi-dao.md): 最近在写步进电机的S型加速算法,遇到了这个问题,由于要计算s型曲线,使用exp函数一次全部计算完大概需要1.2s,单片机的实时性得不到保证,每次在pwm中断回调中计算也是耗费算力… - [freertos vTaskDelay卡死](https://wsj-blog.pages.dev/posts/freertos-vtaskdelay-ka-si.md): 解决办法,改成在main方法中创建任务,调用vTaskDelay工作正常,我用的是nuvoton的库,所以可能与sdk移植有关系,反正问题就是这么解决的,希望能帮到同路者… - [stm32高级定时器和基本定时器的踩坑指南](https://wsj-blog.pages.dev/posts/stm32-gao-ji-ding-shi-qi-he-ji-ben-ding-shi-qi-de-cai-keng.md): 高级定理器tim1和tim8的中断回调函数和通用定时器不相同。基本定时器中只有计数,没有分频。 - [深度计解算板的报错的问题解决(MS5437转串口模块)](https://wsj-blog.pages.dev/posts/shen-du-ji-jie-suan-ban-de-bao-cuo-de-wen-ti-jie-jue-ms5437.md): 做水下机器人控制中用到了深度解算板,写了相应的驱动程序,也遇到了一些问题,现把一些问题的解决方案放出来,供大家参考。驱动被设计为拥有指令器和接收机两个部分,完全被动方式运行,与具体的平台解耦… - [Espressif-IDE中文汉化教程全网首发](https://wsj-blog.pages.dev/posts/espressif-ide-zhong-wen-han-hua-jiao-cheng-quan-wang-shou-fa.md): Espressif-IDE中文汉化教程 - [Win32DiskImage写入123报错](https://wsj-blog.pages.dev/posts/win32diskimage-xie-ru-123-bao-cuo.md): 将SD卡格式化为FAT32,然后向其中写一个img文件。利用读卡器将SD卡连接在主机上,然后使用win32disimager软件向指定盘符写时报错123 - [这个东西让我的Python代码快了100倍](https://wsj-blog.pages.dev/posts/zhe-ge-dong-xi-rang-wo-de-python-dai-ma-kuai-le-100-bei.md): 转载于Python数据挖掘。Python 已经得到了全球程序员的喜爱,连续多期稳坐编程语言排行榜第一把交椅。但是还是遭到一些人的诟病,原因之一就是认为它运行缓慢。… - [关于大越创新的板载USB–TTL通信失败问题的修复](https://wsj-blog.pages.dev/posts/guan-yu-da-yue-chuang-xin-de-ban-zai-usb-ttl-tong-xin-shi.md): 问题描述:这几天用大越创新stm32f103rct6(升级版)进行传感器读取,发现使用板载串口,电脑识别ch340驱动比较慢,而且发送数据会卡死(如果判断没问题的话是单片机卡了),重新启动串口后… - [ROS使用的bug总结](https://wsj-blog.pages.dev/posts/ros-shi-yong-de-bug-zong-jie.md): \[rospack] Error: package 'xxxxxxxxxxx' not found - [ubuntu安装时窗口太小,点不到应用](https://wsj-blog.pages.dev/posts/ubuntu-an-zhuang-shi-chuang-kou-tai-xiao-dian-bu-dao-ying.md): 要注意的是,两数字间是x字母,⽽不是数字键区的\*号。另外此效果,只能在当前运⾏虚拟机下有效,如果关了虚拟机,之后就没⽤了。所以你必需,⽴刻在system setting⾥点击display… ## 页面 - [关于](https://wsj-blog.pages.dev/about.md): 关于 Wang Shijie 和他的博客 - [归档](https://wsj-blog.pages.dev/archives.md): 全部文章归档 - [标签](https://wsj-blog.pages.dev/tags/index.md): 标签索引 - [分类](https://wsj-blog.pages.dev/categories/index.md): 分类索引 - [语录](https://wsj-blog.pages.dev/words.md): 语录与片段 - [友情链接](https://wsj-blog.pages.dev/links.md): 友情链接 ## 友情链接 - [Astro](https://astro.build/): 现代化的静态站点生成器,本站的构建基础。 - [MDN](https://developer.mozilla.org/): 开放、易懂的 Web 标准文档,前端开发必备。 - [Feather Icons](https://feathericons.com/): 简洁优雅的开源图标库,本站导航图标来源。 - [Simple Icons](https://simpleicons.org/): 收录数千个品牌图标,品牌标识随取随用。 - [anime.js](https://animejs.com/): 轻量易用的 JavaScript 动画库。 ## AI 发现文件 - [llms.txt](https://wsj-blog.pages.dev/llms.txt): 站点摘要与文章索引 - [llms-full.txt](https://wsj-blog.pages.dev/llms-full.txt): 全部文章 Markdown 全文数据集 ## Developer resources - [OpenAPI specification](https://wsj-blog.pages.dev/openapi.json): Machine-readable description of the read-only blog API. - [Published post index](https://wsj-blog.pages.dev/api/posts.json): JSON metadata for published posts, including stable abbrlink identifiers. - [Post identifier index](https://wsj-blog.pages.dev/api/post.abbrlink.json): JSON mapping of published post titles to stable identifiers. ## When to use this site Use the read API or Markdown endpoints when you need to search, cite, summarize, or retrieve the author's published technical articles. Start with `/openapi.json` or `/api/posts.json`, then fetch a specific `/posts/{abbrlink}.md` resource. The endpoints are read-only and do not require authentication. ## 可选 - [RSS Feed](https://wsj-blog.pages.dev/rss.xml) - [Atom Feed](https://wsj-blog.pages.dev/atom.xml) - 每篇文章均提供 Markdown 源码,链接已指向 .md 版本