基于法奥FR5与Klipper的3D打印系统实现
笔者在苏州大学的本科专业其实是机器人工程,但是貌似好像博客里从来没有出现过相关内容(笑,这一篇文章是基于我这一学期的一个大作业改出来的,私以为很有意思,放在这里供大家参考。
在传统的增材制造领域,3D打印通常被局限在三轴龙门架或并联臂的框架内。然而,当我们将目光投向工业级协作机器人时,无限的可能性便产生了:更大的操作空间、六自由度的柔性、以及非平面打印的潜力。
所以这个项目的目标就是利用法奥(Fairino)FR5机器人,集成BIQU高性能打印末端,并结合机器视觉实现一种“感知-决策-执行”一体化的自动化3D打印系统。本文将详细记录从硬件连接到视觉联动控制的全过程。
一、硬件清单
1.机械臂
法奥机器人FR5
2.视觉摄像头
海康威视MV-CU060-10UC
3.3D打印末端
BIQU H2 V2S
4.3D打印控制板
BIQU Manta M5P
二、连接拓扑
我们将笔记本电脑作为核心控制单元,通过不同的通讯协议将各组件串联:
机械臂:通过以太网(RPC 协议)进行 TCP/IP 通讯。
视觉系统:通过 USB 直连,调用海康官方 SDK。
打印头:PC 通过 ...
OTA系统从玩具走向工程
上一篇简单OTA系统设计与实现 | 四叶草の博客里我们聊了这套 OTA 系统的“现在”。如果说上一篇主要是在解释“它为什么长这样”,那么这一篇就是要把他从一个玩具变为一个真正的工程。作为一个在实验室里临时搭建的系统,能在内网跑通只是第一步,要让它真正成为一个健壮的工程,笔者还有很长的路要走。
1. 任务队列
在 register/registerServer.py 的代码中,我们采用了递归的写法:
1234567891011121314def updateNext(): if (len(dM.updateList) > 0): # ... status = dM.update(updatePackage) # 执行更新分发 if (not status): # 失败分支 # ... 记录日志 ... dM.updateList.pop(0) # 移除失败任务 updateNext() # 递归调用,继续处理下一个 <--- 这里有递 ...
二分答案巧思
一、二分答案介绍
二分查找是我们很熟悉的一种算法,通过对一个有序序列进行分割,最终能实现查找到目标数值。而二分答案就是基于这种思想衍生出来的解决最优化问题的策略。在题目中,我们最常看见的字眼就是最大值最小化或最小值最大化等目标,就在暗示我们使用二分答案算法。
从专业的角度来介绍二分答案算法,该算法基于二分的思想,通过对解空间进行不断分割,逐步逼近最优解。
今天这篇文章将结合具体例子,介绍笔者关于二分答案这个算法的应用范围的一点巧思
二、具体例子
以下这道题作为一个例子来介绍这个算法,P1182 数列分段 Section II - 洛谷
题目描述
对于给定的一个长度为 NNN 的正整数数列 A1∼NA_{1\sim N}A1∼N,现要将其分成 MMM(M≤NM\leq NM≤N)段,并要求每段连续,且每段和的最大值最小。
关于最大值最小:
例如一数列 4 2 4 5 14\ 2\ 4\ 5\ 14 2 4 5 1 要分成 333 段。
将其如下分段:
[4 2][4 5][1][4\ 2][4\ 5][1]
[4 2][4 5][1]
第一段和为 666,第 222 段和为 99 ...
简单OTA系统设计与实现
博主在24年5月在学校的OPPO实验室里负责物联网的OTA系统构建,当时在博客里留下了一些的设计OTA更新系统(详细设计) | 四叶草の博客,但是没有详细阐述过时如何实现的,这篇文章就是来补一下坑,从整体架构到细节方面介绍一下整个OTA系统的设计,第一次设计CS系统,有很多粗糙的甚至不安全不合理的地方,我以后也会慢慢形成思路进行改进。
1. 系统架构概述
整个 OTA 系统采用典型的 C/S (Client-Server) 架构,并引入了一个独立的注册/管理节点来协调更新流程。
1.1 核心组件
Server (OTA 文件服务器)
职责: 存储升级包(Zip文件)及其元数据(version/content.json)。提供版本查询 API 和文件下载服务。
角色: 这一组件相当于“仓库”,只负责“给我最新的版本号”和“给我文件”这两个简单的请求。
Register (设备注册与管理中心)
职责: 维护所有 IoT 设备的列表、状态(在线/离线)以及当前安装的软件包版本。提供管理控制台(Dashboard),管理员在此进行更新发布。
角色: 这一组件是系统的“指挥单 ...
百度Apollo自动驾驶系统之cyberRT编程:Component实践
参考文献:https://apollo.baidu.com/community/Apollo-Homepage-Document
以及Apollo方面课程
一、Component概念
Cyber RT是一个高性能、高吞吐、低延时的计算运行框架,其中,动态加载技术和有向无环图(DAG)是其实现高性能重要途径之一。
Cyber RT采用了基于Component模块和**有向无环图(DAG)**的动态加载配置的工程框架。即将相关算法模块通过Component创建,并通过DAG拓扑定义对各Component依赖关系进行动态加载和配置,从而实现对算法进行统一调度,对资源进行统一分配。采用这个工程框架可以使算法与工程解耦,达到工程更专注工程,算法更专注算法的目的。
Node: cyberRT中的基本组成单元
Reader/Writer: Channel中的消息读写类
Channel: cyberRT中组件间的数据通信总线
DAG: cyber用于描述整个计算拓扑
二、Component类型
基类都为ComponentBase
1. 数据驱动的Component
支持一路或多路数据输入 ...
百度Apollo自动驾驶系统之cyberRT编程:通讯机制实践
参考文献:https://apollo.baidu.com/community/Apollo-Homepage-Document
以及Apollo方面课程
一、通信机制
按方式分类:
基于Writer/Reader的通信方式
基于C/S的通信方式
基于参数服务
按作用域分类:
进程内通信(对象指针,函数)
进程间通信(共享内存,管道,消息队列)
跨主机通信(RTPS、GRPC)
cyberRT使用的通信方式:进程内采用INTRA(函数与指针),进程间采用SHM(共享内存),跨主机通信采用RTPS(实时发布订阅的网络通信协议)
此外还有一种由Apollo决定的混合通信方式,根据对端的IP和进程PID信息决定采用什么方式进行通信,称为Hybrid
二、基于Write/Reader的通信方式
1. 概念
Node:是整个数据拓扑网络中的基本单元,可以根据需求创建和管理Writer、Reader、Service、Client
Writer:发布订阅模式中的发布者
Reader:发布订阅模式中的订阅者
Channel:通信中的topic,通过channel连接发布者和订阅者
M ...
2024 NewStar CTF比赛有感
2024 NewStar CTF比赛有感
前情提要:帮老板娘在她们学校参加她们校内信息安全社的校内赛,笔者第一次了解到了CTF这个比赛,颇觉得有趣,于是撰写如下博客
一、CTF比赛
CTF(Capture The Flag,夺旗赛)是一种流行于网络安全技术人员之间的一种信息安全技术竞赛。 其前身是传统黑客之间网络技术比拼的游戏,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。 起源于1996年第四届DEFCON。 现在已成为全球范围网络安全圈流行的竞赛形式。
比赛形式大抵是从加密串、网页、存在漏洞的可执行程序中找到形如flag{}的答案,所以被成为夺旗赛。
题目类型主要包含 Web 网络攻防 、 RE 逆向工程 、 Pwn 二进制漏洞利用 、 Crypto 密码攻击 、 Mobile 移动安全 以及 Misc 安全杂项 这六个类别。
Misc 是英文 Miscellaneous 的前四个字母,杂项、混合体、大杂烩的意思。
Recon(信息搜集)
主要介绍一些获取信息的渠道和一些利用百度、谷歌等搜索引擎的技巧
Encode(编码转换)
主要介绍 ...
Ranger妙用
Ranger妙用
相信大家在日常生活中总能看到一群人,以vim为主要工具,桌面环境使用平铺式窗口。纯键盘操作在一些技术社区中广受推崇,尤其是在开发者、黑客文化和开源社区中。这种操作方式不仅是一种工具使用习惯,也代表了高效工作、掌控技术的理念。Vim、Emacs 等编辑器自 Unix 时代以来就有着深厚的文化积淀,很多用户在学习过程中受到了这些经典工具的影响,从而养成了纯键盘操作的习惯。这类人群热衷于手指在键盘上跳舞的快感,鼠标对他们来说就是个摆设,连桌面都懒得给它留地方。仿佛手指越少离开键盘,他们的生产力就越接近超能力。他们相信:在键盘上打出一长串复杂命令,才是人生的终极艺术形式。
今天要介绍的ranger就是这样一个工具,而对于这些键盘艺术家来说,Ranger 就是他们心头好。作为一个纯键盘操作的文件管理器,Ranger 可以让你在终端里潇洒地穿梭文件夹、预览文件,靠着几个快捷键轻松完成各种文件操作,而手指只需要在键盘上上下翻飞。
当然,对于我们不那么高贵的(笑)程序员来说,ranger的优势往往体现在我们操作没有图形界面的服务器操作系统时,也能让我们轻松的操作各种文件。
零、特 ...
Python优雅计划(一)
Python优雅计划(一)
众所周知,从OI赛场里出来的选手总有一些奇奇怪怪的编码习惯,而压行缩减代码量又是其最为广为流传的《恶习》之一,我曾经也是他们的一员;对着执行了十几亿次的GTA代码嗤之以鼻,对着Windows的多年屎山表示不屑,然而……
时代变了,进入大学的笔者也有幸加入了一个工程性的项目组,写了廖廖几千行的工程性代码。
天哪,每当我打开一个月之前的代码时,我都要鼓起莫大的勇气,边看着边咒骂着一个月前的自己。
当一个函数套一个try-catch成为习惯,if的缩进套五六层成为常态,字典找不到key的报错成为日常,很显然我也成为了创造屎山代码的一员。
这篇文章的产生背景就是这样,我希望以Python为例子,回顾一下如何写出优雅的代码。当然,由于熵增定律的存在,你最终可能还是会创作出一个属于你的屎山(笑),但是笔者寄希望于这篇文章能让你在读自己屎山的时候能减少一点负罪感(大笑)
本次Python优雅计划(又称:屎山消消乐计划,乐) 将分为代码规范、模块化编程、Python小技巧和异常处理这四个章节来介绍,或在一篇文章中,或分为两篇文章进行实用性的阐述。
一、代码规范
或许在做 ...
OTA更新系统(详细设计)
OTA
包的content.json
键值
类型
备注
package
字符串
包名称
description
字符串
描述
updateInfo
字符串
更新描述
version
字符串
版本号
branch
字符串
分支
local
字符串
本地包位置
remote
字符串
OTA服务器
sha256
字符串
升级包的SHA256校验码
AfterUpdate
字符串
更新后指令
dependencies
JSON
依赖
一、生产运行侧
重启设备
daemon程序
依赖:flask、requests
JSON配置文件
由于单个设备的包较少,所以维护一个json文件
daemon整体配置文件(device.json):
键值
类型
备注
id
INT
设备唯一id
device
字符串
设备名称
registry
字符串
设备注册服务地址
description
字符串
描述
flask
JSON
flask配置项(见下)
package
列表
列表中每一项是一个json,为每 ...









