《机器人实践开发⑤:Foxglove可视化机器人的3D显示》

《机器人实践开发⑤:Foxglove可视化机器人的3D显示》
3D 可视化是 Foxglove 最强大的特性之一。本篇将介绍如何加载 URDF 模型、显示坐标系、关节状态、路径与障碍物,并解析 Foxglove 的三维渲染引擎原理,让你的机器人模型在浏览器中动起来。

《机器人实践开发》系列文章,请读者前往阅读 👀

《机器人实践开发①:Foxglove 开发环境完整搭建指南(含常见坑位)》

《机器人实践开发②:Foxglove 嵌入式移植 + CMake 集成》

《机器人实践开发③:Foxglove可视化机器人的眼睛-视频》

《机器人实践开发④:Foxglove可视化机器人的耳朵-声音》

《机器人实践开发⑤:Foxglove可视化机器人的3D显示》

《机器人实践开发⑥:Foxglove可视化机器人传感器数据》

《机器人实践开发⑦:Foxglove可视化机器人的日志显示》

《机器人实践开发⑧:Foxglove可视化机器人的地图显示》

《机器人实践开发⑨:Foxglove可视化机器人的MyBag 数据回放》


foxglove 数据可视化的核心数据结构CubePrimitive

/// @brief A primitive representing a cube or rectangular prismstructCubePrimitive{/// @brief Position of the center of the cube and orientation of the cube std::optional<Pose> pose;/// @brief Size of the cube along each axis std::optional<Vector3> size;/// @brief Color of the cube std::optional<Color> color;/// @brief Encoded the CubePrimitive as protobuf to the provided buffer.////// On success, writes the serialized length to *encoded_len./// If the provided buffer has insufficient capacity, writes the required capacity to *encoded_len/// and returns FoxgloveError::BufferTooShort./// If the message cannot be encoded, writes the reason to stderr and returns/// FoxgloveError::EncodeError.////// @param ptr the destination buffer. must point to at least len valid bytes./// @param len the length of the destination buffer./// @param encoded_len where the serialized length or required capacity will be written to. FoxgloveError encode(uint8_t* ptr, size_t len, size_t* encoded_len);/// @brief Get the CubePrimitive schema.////// The schema data returned is statically allocated.static Schema schema();};

定义数据更新通道SceneUpdateChannel

std::unique_ptr<foxglove::schemas::SceneUpdateChannel> visualization_scene_update_channel;

填充结构数据cubeentity

foxglove::schemas::CubePrimitive cube; cube.size = foxglove::schemas::Vector3{size, size, size}; cube.color = foxglove::schemas::Color{1,0,0,1}; foxglove::schemas::SceneEntity entity; entity.frame_id=visualization_frame_id; entity.id ="box"; entity.cubes.push_back(cube); entity.timestamp = timestamp;

发送到 foxglove 客户端

foxglove::schemas::SceneEntity entity; entity.frame_id=visualization_frame_id; entity.id ="box"; entity.cubes.push_back(cube); entity.timestamp = timestamp; foxglove::schemas::SceneUpdate scene_update; scene_update.entities.push_back(entity); visualization_scene_update_channel->log(scene_update);

3D可视化显示数据

在这里插入图片描述

可以定义不同的数据结构显示在图标,只需要正确的填充对应的结构数据即可

注意
model可以填充机器人的模型文件 比如 URDF
texts 可以在 3d 显示文字
arrows可以显示箭头
entity.cubes.push_back(cube); entity.spheres.push_back(sphere); entity.arrows.push_back(arrowPrimitive); entity.cylinders.push_back(cylinderPrimitive); entity.lines.push_back(linePrimitive); entity.texts.push_back(textPrimitive); entity.models.push_back(modelPrimitive); entity.triangles.push_back(triangleListPrimitive);

截图如下

在这里插入图片描述

友情提示🔔

🙏 感谢你的阅读!
如果这篇文章对你有所启发,欢迎关注我 ⭐,欢迎点击 “打赏支持作者” 支持一下我,你的支持是我持续创作的最大动力!
我会持续分享更多关于 智能摄像头 📷、机器人项目、 🤖音视频 RTC 🎧、App 开发 📱、嵌入式开发 🔧 等方向的实战经验,让你更快落地、更少踩坑。
欢迎浏览我其他文章 📚,或许能解决你当前的难题。
如果你正好在做相关项目产品,也欢迎随时私信我,一起技术交流、一起搞事情! 🤝💬📞 联系微信/电话:13826173658

Read more

Pi0具身智能应用案例:智能家居机器人控制方案解析

Pi0具身智能应用案例:智能家居机器人控制方案解析 1. 为什么需要具身智能来控制智能家居? 你有没有想过,当家里灯光、窗帘、空调、扫地机器人甚至厨房设备都联网后,真正缺的不是更多传感器,而是一个能理解你意图、看懂环境、并协调多个设备动作的“家庭管家”? 不是语音助手那种“你说我执行”的被动响应,而是像人一样——看到孩子把牛奶打翻在地板上,自动调用扫地机器人清洁,同时关闭附近插座电源,再提醒你查看监控。 这就是具身智能(Embodied AI)的价值所在。而Pi0(π₀),正是目前少有的、能在单台边缘设备上实际运行的视觉-语言-动作(VLA)基础模型。它不依赖云端API,不等待长延迟响应,而是像人类小脑一样,在本地完成“感知→理解→决策→动作”的闭环。 本文不讲抽象理论,也不堆砌参数。我们聚焦一个真实可落地的方向:如何用Pi0模型,为智能家居系统注入“物理动作能力”——比如让机械臂自动取药、让服务机器人开关柜门、或让嵌入式设备协同完成多步家庭任务。

AstrBot+NapCat 一键部署 5 分钟搞定智能 QQ 机器人!cpolar解决公网访问 :cpolar 内网穿透实验室第 777 个成功挑战

AstrBot+NapCat 一键部署 5 分钟搞定智能 QQ 机器人!cpolar解决公网访问 :cpolar 内网穿透实验室第 777 个成功挑战

这篇教程会带你用最简单的方式:**只用一份 docker-compose,一次命令,5 分钟以内完成 AstrBot + NapCat 部署,把 DeepSeekAI 接入你的 QQ。**AstrBot 本身就是为 AI 而生的现代化机器人框架,插件丰富、支持 DeepSeek/OpenAI 等大模型、带 WebUI、可扩展性强,真正做到"搭好就能用"。照着做,你马上就能拥有属于自己的 QQ AI 机器人。 1 项目介绍 1.1 AstrBot是什么? GitHub 仓库:https://github.com/AstrBotDevs/AstrBot AstrBot 是一个专为 AI 大模型设计的开源聊天机器人框架,

从社死边缘拯救我:用 AR 眼镜打造“亲戚称呼助手“

从社死边缘拯救我:用 AR 眼镜打造“亲戚称呼助手“

从社死边缘拯救我:用 AR 眼镜打造"亲戚称呼助手 本文应用基于Rokid灵珠智能体/CXR SDK开发,开发指南https://forum.rokid.com/index 一个真实的新年灾难 大年初二,我跟着新婚妻子回娘家。 刚进门,七大姑八大姨就围了上来。一位头发花白的阿姨笑盈盈地递过来一个红包,我脑子里嗡的一声——这到底是妻子的哪位亲戚?大姨?小姨?还是什么远房表姑? “小张啊,还认识我不?” 我支支吾吾半天,最后还是妻子打了圆场:“这是大姨,小时候还抱过你呢!” 那一刻,我看到了大姨眼里的失望。这种社死现场,相信很多人都经历过:春节期间,走亲访友是必修课,但那些一年见一次的亲戚,名字和称呼根本记不住。尤其是刚结婚的新人、不常回家的打工人,简直是"称呼灾难"高发人群。 回家后,我下定决心:明年春节,我绝不能再叫错人。

【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

【保姆级教程】从零入手:Python + Neo4j 构建你的第一个知识图谱

摘要: 大数据时代,数据之间的关系往往比数据本身更有价值。传统的 SQL 数据库在处理复杂关系(如社交网络、推荐系统、风控分析)时显得力不从心,而 知识图谱 和 图数据库 Neo4j 正是为此而生。本文将带你从 0 基础出发,理解知识图谱核心概念,安装 Neo4j 环境,并手把手教你用 Python 代码构建一个生动的人物关系图谱。拒绝枯燥理论,全是实战干货! 一、 什么是知识图谱与 Neo4j? 在动手写代码之前,我们先用大白话把两个核心概念捋清楚。 1. 什么是知识图谱 (Knowledge Graph)? 不要被高大上的名字吓到。知识图谱本质上就是把世界上的事物(节点)和它们之间的联系(关系)画成一张巨大的网。 * Excel 思维: 罗列数据。例如:张三,25岁;李四,