# 2026-05-11 记忆日志 ## 上午 ### 1. MDM 2026 论文审稿等待 - 用户论文状态仍为 "Not Yet Available" - 通知日期是 5月10日,但审稿结果延迟 - 安慰用户耐心等待,Demo Track 录取率较高 ### 2. 四级写作讲义评价 - 用户发送了 PDF 扫描版讲义 - 因为是图片版无法提取文字 - 建议用 OCR 工具提取后整理 --- ## 下午/晚上:ROS2 A* 路径规划实验 ### 实验背景 - 课程实验:地图构建及路径规划 - 硬件:香橙派 + 陀螺仪 + 激光雷达 - 已完成:Cartographer 建图 - 目标:实现 A* 路径规划并在 RViz2 显示 ### 实验过程 #### 1. 地图文件检查 - 确认 `map.yaml` 和 `map.pgm` 配置正确 - 分辨率:0.05m,地图尺寸:193x217 - 原点:(-4.9, -6.15) #### 2. 地图服务器启动 ```bash ros2 run nav2_map_server map_server --ros-args -p yaml_filename:=./map.yaml ros2 run nav2_util lifecycle_bringup map_server ``` #### 3. A* 算法实现 **核心问题与解决:** | 问题 | 原因 | 解决方案 | |------|------|----------| | 订阅不到地图 | QoS 不匹配 | 使用 `TRANSIENT_LOCAL` QoS | | 地图未加载就规划 | 时序问题 | 增加 `map_ready` 标志 | | 坐标转换错误 | 行列顺序 | 修正 world_to_grid 函数 | | 路径不显示 | 起点终点设置问题 | 支持 2D Pose Estimate + 2D Goal Pose | **最终代码功能:** - ✅ 订阅 `/map` 话题接收地图 - ✅ 订阅 `/initialpose`(2D Pose Estimate 按钮)设置起点 - ✅ 订阅 `/goal_pose`(2D Goal Pose 按钮)设置终点 - ✅ 8方向 A* 搜索(支持对角线) - ✅ 实时路径规划并发布到 `/astar_path` - ✅ RViz2 可视化显示 #### 4. 交互流程 ``` 1. 启动地图服务器 2. 启动 A* 节点 3. RViz2 显示地图 4. 点击 "2D Pose Estimate" 设置起点(绿色箭头) 5. 点击 "2D Goal Pose" 设置终点(红色箭头) 6. 自动计算并显示路径(蓝色/红色线) ``` ### 实验结果 - ✅ 地图加载成功:193x217 - ✅ 路径规划成功:161 个点 - ✅ 交互式设置起点终点正常工作 - ✅ RViz2 可视化完整 ### 代码版本迭代 1. `astar_rviz_v1.py` - 基础版,定时规划 2. `astar_rviz_v2.py` - 修复 QoS,支持地图订阅 3. `astar_rviz_v3.py` - 进阶版,支持 2D Goal Pose 4. `astar_rviz_v4.py` - 完整交互版,支持双按钮 5. `astar_rviz_v5.py` - 修复版,完善错误处理 ### 关键知识点 - **A* 算法**:f(n) = g(n) + h(n),Open/Close 表机制 - **ROS2 QoS**:`TRANSIENT_LOCAL` 用于持久化话题 - **坐标转换**:世界坐标 ↔ 栅格坐标 - **生命周期节点**:需要显式激活 - **RViz2 交互**:`/initialpose` 和 `/goal_pose` 话题 --- ## 其他 ### 蓝桥杯算法题 - 卡牌凑套问题 - 二分查找 + 贪心判定 - 时间复杂度优化:O(n) → O(n log n) --- ## 总结 今天主要帮助用户完成了 ROS2 机器人路径规划实验,从地图加载到 A* 算法实现,再到交互式可视化,完整走通了整个流程。实验最终成功,用户可以在 RViz2 中通过点击按钮设置起点终点,实时看到规划路径。 *记录时间:2026-05-11 20:41 UTC* --- ## 晚上:单词学习系统 ### 添加四级单词到原神背单词系统 **背景:** - 用户自建的原神主题单词学习网站(端口 3924) - 需要添加今天学习的 23 个四级单词 **解决过程:** 1. 初始尝试直接修改 `words.json` 文件失败(系统读取的是内存中的数据) 2. 发现系统有 API 接口 `POST /api/words` 3. 通过 curl 调用 API 成功添加 23 个单词 4. 系统自动为每个单词生成了原神主题的例句 5. 系统还生成了串联所有单词的完整故事 **API 调用示例:** ```bash curl -X POST http://localhost:3924/api/words \ -H "Content-Type: application/json" \ -d '{ "wordList": [ "subscribe", "stance", "renovation", "pension", "benefit", "beneficial", "profit", "profitable", "trivial", "fraction", "mortgage", "proposal", "idealism", "hazardous", "ambition", "ambitious", "action", "active", "authorization", "acquaintance", "jeopardy", "perilous", "prevalent" ] }' ``` **添加的单词(23个):** 1. subscribe - 订阅 2. stance - 立场 3. renovation - 翻新 4. pension - 养老金 5. benefit - 好处 6. beneficial - 有益的 7. profit - 利润 8. profitable - 有利可图的 9. trivial - 琐碎的 10. fraction - 分数 11. mortgage - 抵押贷款 12. proposal - 提议 13. idealism - 理想主义 14. hazardous - 危险的 15. ambition - 雄心 16. ambitious - 有雄心的 17. action - 行动 18. active - 活跃的 19. authorization - 授权 20. acquaintance - 熟人 21. jeopardy - 危险 22. perilous - 危险的 23. prevalent - 流行的 **系统功能:** - 自动生成原神主题例句 - 自动生成复习计划(艾宾浩斯遗忘曲线) - 自动生成单词串联故事 - 支持"故事生成器"功能 - 支持复习模式 **代码文件已保存到 copyparty:** - 文件夹:`http://129.211.3.54:3923/files/ros2/` - 包含 5 个版本的 A* 路径规划代码 *记录时间:2026-05-11 23:34 UTC* --- ## 单词学习系统 API 使用方法(重要!) ### 通过 API 添加单词(推荐方法) **API 端点:** ``` POST http://localhost:3924/api/words Content-Type: application/json ``` **请求参数:** ```json { "wordList": ["word1", "word2", "word3", ...] } ``` **完整 curl 命令:** ```bash curl -X POST http://localhost:3924/api/words \ -H "Content-Type: application/json" \ -d '{ "wordList": [ "subscribe", "stance", "renovation", "pension", "benefit", "beneficial", "profit", "profitable", "trivial", "fraction", "mortgage", "proposal", "idealism", "hazardous", "ambition", "ambitious", "action", "active", "authorization", "acquaintance", "jeopardy", "perilous", "prevalent" ] }' ``` **API 返回内容:** - ✅ `success: true` - 添加成功 - ✅ `words` - 每个单词的详细信息(id, phonetic, meaning, sentence) - ✅ `story` - 串联所有单词的原神主题故事(中英文) - ✅ `progress` - 学习进度统计 **系统自动完成:** 1. 查询词典获取音标和释义 2. 调用 LLM 生成原神主题例句 3. 生成复习计划(艾宾浩斯遗忘曲线) 4. 生成单词串联故事 5. 更新学习进度 **注意事项:** - 单词列表用逗号分隔 - 系统会自动转换为小写 - 每个单词会生成唯一的 id - 复习计划会自动创建(1, 2, 4, 7, 15 天间隔) **后续使用:** 用户可以直接提供单词列表,我通过上述 API 调用即可快速添加,无需手动修改文件! *记录时间:2026-05-11 23:38 UTC*