一、项目概述本项目基于ROS2 Humble与Qt5开发实现图形化界面控制 turtlesim 小乌龟运动。项目支持手动按键实时控制与预设轨迹自动绘图。包括五角星、爱心、组合绘图等功能。程序采用 QtmoveToThread标准多线程架构UI界面与ROS业务逻辑线程完全分离界面流畅不卡顿同时支持画布清空、小乌龟重置等系统功能是非常完整的 ROS2 人机交互综合实训项目。二、项目功能介绍1. 手动控制功能界面按钮控制小乌龟上、下、左、右移动随时暂停停止运动支持一键清空画布、一键重置小乌龟初始状态2. 自动绘图功能核心亮点本项目实现纯轨迹连续连体绘图无需抬笔、无需瞬移通过精准的角度与距离分段控制让小乌龟一笔连续画出多种标准几何图形单一五角星图案绘制参数方程高精度爱心绘制几何画廊组合绘图自动连续绘制 正方形 → 正三角形 → 正六边形 → 五角星全程一笔连贯形成图形展览效果三、技术架构设计1. 多线程架构采用 Qt 经典moveToThread 子线程模型UI主线程负责界面渲染、按钮事件捕捉、指令信号发送ROS子线程独立执行ROS自旋、位姿订阅、轨迹状态机运算、速度发布通过互斥锁保护共享变量信号槽跨线程通信全程线程安全无卡死、无界面冻结问题。2. ROS消息与服务通信订阅/turtle1/pose实时获取小乌龟坐标、角度发布/turtle1/cmd_vel速度指令实现运动控制调用/clear、/reset服务实现画布管理3. 轨迹控制原理项目采用转向前进双阶段状态机根据目标角度与当前角度差值精准旋转对准方向角度匹配完成后直线前进指定距离单段轨迹完成后自动切入下一段轨迹实现图形无缝衔接爱心图案采用心形线参数方程采样拟合精度高图形圆润标准。4.项目文件结构qt_turtle_draw/ ├── src/ │ ├── main.cpp │ ├── mainwindow.h/cpp // UI界面与按钮信号 │ ├── ros_node.h/cpp // ROS线程、绘图逻辑 ├── CMakeLists.txt └── package.xml四、项目核心代码1. mainwindow.cpp子线程启动节点// moveToThread started - run 核心代码 RosTurtleNode* ros_node new RosTurtleNode; QThread* ros_thread new QThread; ros_node-moveToThread(ros_thread); connect(this, MainWindow::sigSendCmd, ros_node, RosTurtleNode::setCmd, Qt::DirectConnection); // 线程启动后自动执行run() connect(ros_thread, QThread::started, ros_node, RosTurtleNode::run); // 线程退出时清理内存 connect(ros_node, RosTurtleNode::destroyed, ros_thread, QThread::quit); connect(ros_thread, QThread::finished, ros_node, RosTurtleNode::deleteLater); connect(ros_thread, QThread::finished, ros_thread, QThread::deleteLater); ros_thread-start();2. 核心逻辑 ros_node.cpp// 心形线参数方程x16sin³t, y13cost-5cos2t-2cos3t-cos4t void RosTurtleNode::loadHeart(std::vectorSegment out) { std::vectorstd::pairdouble,double pts; double scale 0.22; int N 60; for (int i 0; i N; i) { double t 2.0 * M_PI * i / N; double x 16.0 * pow(sin(t), 3) * scale; double y (13.0*cos(t) - 5.0*cos(2*t) - 2.0*cos(3*t) - cos(4*t)) * scale; pts.push_back({x, y}); } // 插入原点作为起点乌龟当前位置即爱心中心 pts.insert(pts.begin(), {0.0, 0.0}); for (size_t i 1; i pts.size(); i) { double dx pts[i].first - pts[i-1].first; double dy pts[i].second - pts[i-1].second; double dist sqrt(dx*dx dy*dy); if (dist 0.001) { double angle atan2(dy, dx); out.push_back({angle, dist, 0.3}); } } } // 正多边形 void RosTurtleNode::loadPolygon(std::vectorSegment out, int n, double side) { double angle 0; double turn 2.0 * M_PI / n; for (int i 0; i n; i) { out.push_back({angle, side, 0.3}); angle turn; } }五、项目效果说明本项目的组合绘图功能区别于普通单点图案绘制程序通过连续轨迹拼接让小乌龟一笔连贯完成正方形 → 平移过渡 → 三角形 → 平移过渡 → 六边形 → 平移过渡 → 五角星整体呈现出几何图形展览馆的视觉效果。全程无抬笔、无瞬移纯靠算法规划轨迹衔接考验轨迹插值与角度闭环控制能力。六、编译与运行cd ~/ros2_ws colcon build --packages-select qt_turtle_draw source install/setup.bash # 启动仿真 ros2 run turtlesim turtlesim_node # 启动Qt控制界面 ros2 run qt_turtle_draw qt_turtle_draw_node七、项目总结本项目整合了ROS2 消息/服务通信、Qt多线程编程、有限状态机控制、参数方程图形拟合、几何轨迹规划等多项核心知识点。项目功能丰富、架构标准、运行稳定既实现了基础手动操控又实现了连续几何自动绘图。如果需要完整源码可以评论区留言。
企业数字化 ERP 产品动态
相关推荐
孩子视力好但总喊眼睛累?调节力训练是关键 1. 被忽略的“调节力”到底是什么1.1 调节力的本质:眼睛的“自动对焦系统”先讲一个我验光时经常遇到的场景。一位妈妈带8岁的儿子来复查,进门第一句话就是:“医生,我们上次配的眼镜是不是度数配低了?孩子说看黑板有时… · 2026/9/26 6:04:17
HTML——那些自带交互特征的HTML元素(progress元素、) 那些自带交互特征的HTML元素5、务必使用<progress>元素实现进度条5.1、<progress>元素的基本特性5.2、<progress>元素的样式自定义6、务必使用<meter>元素显示密码强度6.1、<meter>元素的基本特性6.2、<meter>元素的美化技巧5、务必使用&l… · 2026/9/26 6:04:17
opencode组件详解-性能优化 1. 禁用不必要的插件:
jsonc
{"plugin": \[] // 只保留必要的插件
}2. 调整 RAG 配置:
jsonc
{"rag": {"autoRepoFactsOnSessionStart": false // 按需执行}
}3. 优化 Memory 配置:
jsonc
{"memory&quo… · 2026/9/26 6:37:26
微信聊天记录流式处理:结构化同步到Codex与Obsidian 1. 微信聊天记录为什么值得被“流”起来微信聊天记录这东西,绝大多数人只把它当成一个能翻回去看的对话框。但如果你手上同时用着 Codex 这类 AI 编程助手,又在用 Obsidian 搭自己的知识库,你会发现一个很尴尬的现实:每天真正有价… · 2026/9/26 6:37:26
2026年培训学校除甲醛企业实力参考:专业治理服务商推荐 长沙喜净环保科技有限公司作为湖南本土专注室内空气治理的知名服务商,长沙喜净环保科技有限公司核心业务为室内甲醛治理与空气净化服务,覆盖家装、工装全场景,可针对性解决新装修空间的甲醛超标、苯系物污染、装修异味等空气质量问题… · 2026/9/26 6:37:26
企业级AI Agent项目失败的深度复盘:从架构设计到落地避坑指南 我先说结论:这个项目不是死在技术上,死在“把Agent当成人”这件事上。过去半年,我接触了不少准备上AI Agent的企业,也接手过几个“做完了但不敢用”或者“上线了没人用”的半成品。标题里这个案例是其中最具代表性的。客户花50万&… · 2026/9/26 6:37:26
Oracle 学习总结三:用 TaoToken 统一 Key 调试 bulk collect 批量取数脚本 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 6:37:20
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46