驱动自己的机器人

DJI RoboMaster EP 年初我打算花半年时间研究自动驾驶,以及计算机图形学,于是开始调研开发自动驾驶系统的硬件,最先考虑的是nvidia在2019年发布jetson nano平台时开放的jetbot,基本是一台玩具小车,配备3D打印车身,两个小轮子以及一块jetson nano developer kit,一个camera,官方项目地址,考虑搭建整个车子的硬件平台所需要的成本以及可玩性,我决定不考虑类似玩具方案的car robot,最后我瞄准了DJI robomaster EP,因为它开放了完整的SDK,并且整个机器人平台是用于教育比赛而设计的,可玩性非常丰富,自己也不需要过多的去考虑底层硬件的装配。这样我就可以借鉴jetbot的自动驾驶设计,将其移植到robomaster EP上,打造最原始的自动驾驶开发平台。 Coral Edge TPU As Robot Brain 经过一段时间的动手测试,我决定在robomaster EP上采用的硬件方案是raspberry pi 4 + google edge tpu,具体架构如下: 左边是自动驾驶会用到的一些工具,视觉加速芯片我使用的是google edge tpu,相比nvidia Jetson GPU,它的功耗更低,这样在做视觉运算时不会大量消耗机器人有限的电池电量。 右边是需要自己搭建的一个机器学习运维平台,从数据的收集,模型训练以及测试,最后模型部署,都是自动化的。

March 30, 2023

关于价值

探索人生价值 去年七月份通过朋友介绍我进入了一家小型外企,在工作半年之后我还是决定离职,开始自由职业生涯,我期望能够把更多的时间投入到自己感兴趣的领域,像艺术,电影,音乐,计算机,通过不断的探索新的领域,从而丰富自己的认知。在大学的时候我喜欢捣鼓计算机,毕业之后我从事了计算机的工作,刚开始工作的时候,自己的知识面特别的狭隘,一直停留在自己的专长领域里。后来慢慢的接触了很多同事以及朋友,自己的想法也发生了改变,开始接触交叉领域,玩摄影,学绘画,记得最冲动的是在2017年,我把自己积攒了半年工资拿去买了DJI Inspire 2 专业套装,大概在人民币5W左右,一名小白玩专业套装最后也算是学会了很多本领,比如影视后期的调色,电影的拍摄技法,影视后期特效,学习的动力都来自于兴趣,刚开始没有想到需要学习很多摄影内容,玩着无人机发现自己拍摄的内容毫无章法,于是开始补习摄影知识,然后就接触了电影。回过头看以前自己做的事情,我发现人确实需要失去点理智去做自己想做的事情。人生的价值就是做你想做的事情,放手去做,即使孤军奋战最后失败了,你的人生也是圆满的,因为你走出了自己的人生,而不是活在别人设计好的迷宫里。我想用两件事情来描述探索人生价值的重要性。 小提琴制作 我在2021年购买了波兰年轻制琴师Piotr Pielaszek的一把小提琴,非常幸运的是这把琴在第十六届意大利提琴制作比赛中获得了银奖,并且金奖空缺,于是这把琴成功升值了,最初我的购买价格是14W人民币,Piotr现琴价格目前是人民币22万,那么这把获奖琴目前可以估计价值在28W。因为成本原因投资当代乐器,比投资古董乐器更有价值潜力,所以我继续探索有潜力的国外年轻制琴师傅,从yujieviolin我了解到了一位女制琴师,她的名字叫LISON BETTLER。图片来源bellanger-bettler-luthiers 从网上寻找她的相关资料和当时piotr一样,资料非常少,至少piotr我还可以听到他之前比赛琴的声音,Lison的音频资料几乎没有,但是网站上的一个标题吸引了我,VIOLIN-MAKING: The Work Of A Life,大意就是,做为一名提琴制作师,对于越来越快的生活节奏,已经处于社会边缘,我们仍然将快速的走过这一生,时间不再具有相同的价值。我们越往前走,景观就越丰富,越复杂。我的分析和感知能力将越敏锐,这将指导我成为音乐家,乐器以及弓之间的核心桥梁。 时间不再具有相同价值,我们今天所需要做的事情,留到明天,也许所呈现出来的价值也就不一样了。小提琴制作更是如此,每一把琴在它的制作者手中都要经历很多道复杂的工序,但是这些工序不像制作计算机的芯片一样通过程序化的方式进行,而是存在一定的人为随机性,面板多少厚度,音孔长度宽度设计,提琴的模版,正是因为提琴制作中影响一把琴的因素趋于无穷,所以每一把小提琴都有它的特点,而Lison所做的就是在不断变化的时间中去积累提琴制作中的技艺,敏锐的去察觉提琴制作中的细节,我想这就是人生的价值,因为lison将自己的生命延展,帮助音乐家制作出音乐家心中所想要的乐器。 腕表 以下图片和影像截图来自Cartier 无意之中我看到了卡地亚推送的新品广告,Cartier Française Tank,电影广告拍得相当惊人,短短一分钟就会让你感觉到Française Tank的优雅。 我们先来看下整个短片拍摄的分镜,将电影艺术与腕表结合在一起呈现法国艺术的浪漫情怀,影片背景音乐使用了日本音乐家Jun Miyake的《Lilies of the Valley》,音乐的前卫风格与法国艺术融为一体,也给影片带来了加分项。 法国塞纳河畔,空中大全景 Cartier Française Tank 化身为男主出现在河岸边 通过无缝的遮罩转场,男主走上了桥 男主看到了当下的女主角Catherine Deneuve 男主用现代的莱卡相机拍摄女主角 在按下快门的那一刻,时光倒流,男主手中的现代相机变成了传统胶片相机,拍摄年轻时候充满时尚气息的Catherine Deneuve 一个无缝转场,出现了朴素典雅端庄的Catherine Deneuve,而我们的男主已经转变成了画师 接着镜头跟着男主视线改变的方向上摇,然后缓慢下摇,时光来到了电影拍摄现场,这个时候的Catherine Deneuve显得格外的严肃和知性 一个无缝转场,男主回到现实,这个时候的Catherine Deneuve坐在车里,看了下手表,朝男主微微一笑,最后就是前后呼应一个空中大全景,女主的车向前方驶去 电影短片并没有使用复杂的场面调度,简单的几个镜头衔接,体现出了法国人的优雅极简主义,虽然时光流逝,但是男女主手腕上的腕表一直没有变。当我看完这部短片我毫不犹豫的购买了这款腕表,因为我知道时间就是一种无形的价值,时间一直在流动变化,那么什么才是不变的,热爱艺术,追求优雅,简单而不平凡,这部简短的影片让我体会到了这些,影片中的腕表就是这种精神的代表。不得不说Cartier拍摄的这部短片太具有电影艺术性质了。 同样的工具在不同人的手里,它体现出来的价值就是不一样,一部iPhone,如果我们通过随意拍摄video的方式去录制,那么得到的作品就不会有时间的价值,相反我们采用film的方式去拍摄,通过镜头去捕捉脑海中想要的画面,那么这部作品就含有时间价值,它的意义将永远的定格在作品里面。 总结 通过两件事情,我想说,在生命的长河里,时间才是最宝贵的,流逝的每一分每一秒,都是价值的流逝,我们要抓住这些时间,抓住价值抓住永恒,在提琴制作中对工艺的不断探索那是永恒的,在人生的不同阶段依旧喜欢自己手腕上的那块表那是永恒的,在电影拍摄中对每一个所要呈现的画面进行琢磨那是永恒的,生命的价值体现就是在不断流逝的时间中,找寻到那一束不灭的光,然后你就朝着那一束光奔跑,直到生命的尽头,最后你的价值就会体现在一把琴中,一只腕表上,或者是凝固在胶片里。

February 25, 2023

Google Coral Edge TPU 简短介绍

Coral生态以及技术 References: Coral AI 介绍下google coral edge TPU computing整个生态: 用于生产环境的SoM以及带PCI接口的加速器。 用于开发测试的四款口袋型开发板。 外围传感器包括环境检测模块以及摄像头,Wi-Fi/PoE扩展板。 Cloud TPU / Edge TPU 介绍 技术 Coral Edge TPU是谷歌为加速边缘设备神经网络推理而研发的专用芯片,并且在保持低功耗的前提下运行专门优化过的神经网络模型。 Edge TPU 运行速度为4 Tops,并且功耗为0.5W/Tops,相当于如果Edge TPU全天满负荷运行,那么一天的功耗总共为48WH,这样对于工业环境的要求,低功耗绝对是一个优势。上图为嵌入式CPU和Edge TPU推理速度的比较,可以看出在edge TPU上运行时间远远低于embedded cpu,降低功耗但保持模型推理的准确度并且加速运算,这就是edge tpu在工业领域的优点。 可扩展性 Coral产品线包括最初的原型设计开发板,到产品PCI edge TPU模块,最后再到微控制器micro dev board,整个生态链都有供应,缺点就是由于芯片限制的原因在中国很难买到,国外因为生产原因的关系,也需要时刻关注供应商的库存。像我之前购买的Environmental Sensor Board是通过HK代购进入中国的,还有micro dev board是通过pi3g供应商从EU发货到达国内的。 模型兼容 edge TPU可以运行tensorflow以及keras构建的模型,当然模型需要转换成int8 tensorflow lite ,这一步称之为quantized,这样就可以降低模型在edge device上内存的开销,然后tflite模型通过edge tpu compiler的编译,最后运行在edge tpu上。 Mendel Linux Coral Dev Board和Coral Dev Mini Board以及SOM都可以运行google自己维护的Mendel Linux,系统的缺点就是独立性太强,使用的linux内核是4.x系列,比起raspberry pi生态,coral的内核已经相当老旧了,并且无法使用linux内核的新功能,而像raspberry pi官方一直支持Linux内核到6.x系列。在编程接口方面,google提供了,pycoral + libcoral,还有shell命令行工具MDT。 Coral Micro ...

February 3, 2023

AI Is Not AI

OpenAI ChatGPT Reference DeepMind Reference InstructGPT Reference 最近看到推特上聊的最多的话题是ChatGPT,很多人对它赞不绝口。对于一个创作者而言将人工智能用于自己的创作流程中,能够快速实现作品的原型,这在商业领域当然是一件很好的事情。chatGPT可以给编剧增加灵感,给找问题的人提供解决思路,给翻译人员提供更精准的语言翻译帮助。那么ChatGPT算不算真正意义上的AI,也就是说它能否通过图灵测试。虽然我们不知道答案,但我们可以确定ChatGPT肯定收集了海量的互联网数据来进行模型训练,最后模型的参数也是惊人的巨大。 首先参考OpenAI官网,我们看下OpenAI模型训练的过程: 训练模型采用了Reinforcement Learning From Human Feedback,首先OpenAI从题词数据库里面抽取样本,标记者会解释该问题的预期答案,然后将样本和预期答案通过GPT-3.5模型进行监督学习(A模型),然后收集对比数据,通过人工的方式将问题得到的多个答案进行排序打分,以此训练奖励模型(B模型),最后输入新的词条到A模型,其输出进入B模型中得到奖励评分,采用PPO方法优化A模型的参数。 我门再来看下OpenAI的DALL-E 2,通过语言描述来生成照片级的图像,当然还有开源版本的Stable Diffusion v2,也是类似的功能。其中采用的机器学习模型是diffusion models,通过连接语言描述与图像之间的关系,从无到有生成一张符合描述的完整的高分辨率图像,这也许在2D图像处理和3D模型制作中给创作者提供很大的帮助。 受到DALL-E工具的启发,Baker Lab的研究人员使用diffusion models来生成新的蛋白质结构,A diffusion model for protein design,通过新的方法研究人员能够快速的组装出具有功能性的蛋白质结构,而在使用diffusion models之前需要通过数以万计的分子进行测试。从文本生成,到文本图像生成,再到蛋白质结构生成,这里面涵盖了通用的模型设计,那么这些模型能否被称之为通用AI,不谈论创造性,我们可以将chatGPT理解为狭义通用AI,因为它的目标就是模仿人类,给出的答案尽量接近人类,比如一个智能搜索引擎,一个开放式的智能数据库,那么能否通过图灵测试,我猜测是不可能。 有了这么多具有启发性的应用之后,我们想象建立一个DeepL-Ops领域,为了保证生产环境的稳定性,我们会有一个chaos agent一直在搞破坏,比如关闭集群的某些服务,极度消耗服务器的网络流量,假装破坏硬盘,之后如果系统还可以正常对外工作,那么这个系统就是可靠的,这项工作我们称之为混沌工程。这里会出现一个问题,工程师无法100%去列举出哪些问题会导致服务异常,需要不断的依靠实际经验去积累,这样我们也就引入了DeepL-Ops训练机制。系统中存在一个chaos agent和一个order agent,前者是搞破坏使得系统故障,后者是修复系统使得系统正常工作,我们设计了一个机器学习模型,当chaos agent搞破坏的时候,order agent去努力修复系统,同时chaos agent也在进化,尽可能的破坏系统让order agent无法修复,如果order agent无法修复系统,agent会根据环境给予的反馈调整order rules generator模型,如果order agent修复了系统,chaos agent会根据现有环境更新chaos rules generator模型。当该模型训练完成之后我们把order agent放到系统中,当系统出现故障时,我们将故障信息输入到order rules generator模型中,从而让order agent去修复系统问题。

December 7, 2022

Moosefs Master 高可用实现

我自己设计了一套简陋的k8s persistentvolumeclaims方案,后端采用Moosefs做为分布式数据存储,原理是基于kubernetes events机制,当接收到create pvc的消息时,后台control应用会在moosefs上创建对应的pv,并绑定相应的pvc,为了方便应用在各个节点间移动,我将moosefs文件系统挂载到了每一个worker节点下,这里就产生了一个问题:如何保证moosefs master高可用!moosefs官方有两个版本一个是opensource,另外一个是Pro,Pro版本自带HA功能,而opensource只有备份master的功能,当出现故障时只能通过手动恢复master。为了满足高可用的需求,我申请了Pro版本为期一个月的使用权限,购买永久授权官方价格是1425EUR/10TBi,其中包括了一年的维护费570EUR,这个价格对于我个人使用Raspberry Pi来说实在过于昂贵,并且我测试了mfsmaster pro的性能,发现和opensource版本相比没有显著的提升,考虑到mfsmaster是单线程应用,我决定以后自己维护一套mfs源码,增加它在kubernetes上的功能。这样经过调研,我发现了mfs master高可用的方案(上图所示)。 MFS Opensource Master HA 总共分为三部分: mfsmaster DRBD Keepalived mfsmaster:存储mfs的元数据。 DRBD:实现网络层块设备的实时复制,类似RAID 1。 Keepalived:监控两台mfsmaster的健康状况。 当mfsmaster A出现异常时,keepalived会将VIP迁移到mfsmaster B上,并将A由原先的master变成backup,同时卸载mfs metadata的DRBD USB磁盘,将B由原先的backup变成master,同时挂载mfs metadata的DRBD USB磁盘,启动mfsmaster,这样就完成了故障节点的恢复。 在使用moosefs之前,我测试过openebs,longhorn,beegfs,glusterfs这些分布式文件系统,对比了它们之间的性能和易用性,最终还是选择了moosefs,因为mfs的扩展实在是太方便了,并且客户端是通过fuse访问文件系统,像macos,freebsd,netbsd都可以使用,在ARM64平台上的读写性能也是优于其他几个分布式文件系统的。当然最后的缺点是官方好像停止维护mfs v3版本了(github一直没有更新),v4版本仍然处于闭源状态。

November 23, 2022

没有什么比生命更重要

九月份我购买了一只只有两个月大的垂耳兔🐰,通过对它的精心照顾,让我感受到了没有什么是比生命更重要的,尤其是兔子生病了,我和我的爱人通过各个信息渠道去了解如何治疗兔子疾病的方法。一个小生命也许在商场里的价格也就是200多人民币,但是它带个我们的快乐应该是无法用金钱来衡量的。自然界的生命小到昆虫蚂蚁🐜,大到捕食类的狮子🦁️,他们都是由一种最基本的单位组成,那就是细胞。为什么一堆细胞聚集在一起就能产生生命,并且是一种拥有自由意识的生命,这也许就是整个宇宙的复杂度起到了作用,在一组简单的规则作用下,系统随着时间演化,最终呈现出极具复杂性的生命体结构。对于人而言,我们拥有其他生命无法比拟的大脑,正是因为人类能够学习并且创造才促使我们能够立足于这颗蓝色的星球上,这也是生命恩赐给我们人类的礼物,我们需要敬畏每一个在地球上成长的小生命,因为在这些生命体内成长的每一个细胞,也同我们人体中的每一个细胞一样,使用着同样的一套自然法则。每一个生命体都是生长在同一棵生命树上的不同枝叶,然而他们的根基都是相同的。敬畏生命使我们领悟生命的真谛。 这里给大家介绍一本最近我自己在读的由物理学家Schrödinger写的书《What is Life?》,本书主要是从物理生物角度去阐述生命是什么。也许人类本身的存在意义就是去探究生命背后的真相,去探究这棵生命树的根基。

October 4, 2022

Kubernetes Pod Security Admission

今天我将自运营的kubernetes生产环境集群升级到了v1.25.0,升级过程中遇到了一个问题,集群中使用了PodSecurityPolicy,然而在kube v1.25.0中PodSecurityPolicy已经被移除,并且被pod security admission(psa)取代。于是我需要将PodSecurityPolicy合并到psa中。对此我对psa进行了一些调研。 PSA在v1.25.0版本中已经被定义为稳定接口,并且默认开启了PodSecurity控制器。PSA控制器将pod强制在一个特定权限的环境中运行,通过在namespace中创建权限规则,该namespace下的所有pod对宿主环境的访问将被限制在该权限之下。 pod security 级别分为: privileged:拥有系统级别的特权 apiVersion: v1 kind: Namespace metadata: name: my-privileged-namespace labels: pod-security.kubernetes.io/enforce: privileged pod-security.kubernetes.io/enforce-version: latest baseline:基础权限,满足大部分pod的运行时权限 - 详细阅读 apiVersion: v1 kind: Namespace metadata: name: my-baseline-namespace labels: pod-security.kubernetes.io/enforce: baseline pod-security.kubernetes.io/enforce-version: latest pod-security.kubernetes.io/warn: baseline pod-security.kubernetes.io/warn-version: latest restricted:非常严格的限制权限 - 详细阅读 apiVersion: v1 kind: Namespace metadata: name: my-restricted-namespace labels: pod-security.kubernetes.io/enforce: restricted pod-security.kubernetes.io/enforce-version: latest pod-security.kubernetes.io/warn: restricted pod-security.kubernetes.io/warn-version: latest kubernetes 控制器通过给namespace标记标签来定义pod的权限级别,其中的security mode分为enforce,audit,warn。 Enforce:违反权限级别的pod将被拒绝运行 Audit:违反权限级别的pod的信息将被记录到审计日志中,但照常运行 Warn:有违反权限级别的pod,集群只发出警告 具体定义如下: # The per-mode level label indicates which policy level to apply for the mode. # # MODE must be one of `enforce`, `audit`, or `warn`. # LEVEL must be one of `privileged`, `baseline`, or `restricted`. pod-security.kubernetes.io/<MODE>: <LEVEL> # Optional: per-mode version label that can be used to pin the policy to the # version that shipped with a given Kubernetes minor version (for example v1.25). # # MODE must be one of `enforce`, `audit`, or `warn`. # VERSION must be a valid Kubernetes minor version, or `latest`. pod-security.kubernetes.io/<MODE>-version: <VERSION>

September 5, 2022

ETH 主网合并 - 从PoW到PoS

Ethereum 主网合并 在今年的八月份,ETH goerli测试网进行了2.0的合并,我也参与了测试网的合并,整个合并过程是成功的,我采用lighthouse做为ETH Consensus layer,geth做为Execution layer,目前测试网运行的validator节点状态是good。在接下来的九月份,ETH主网将进行2.0的合并,我也单独运行了Consensue Layer和Execution Layer,希望这次重大的合并能够顺利完成。 goerli testnet validator 状态 合并过程 ETH 2.0 Beacon Chain 将首先进行一次Bellatrix升级,从而激活两条链的合并,时间大概会在UTC 2022-09-06,之后当PoW链达到一定工作量难度时,会启动合并程序,PoW的链上数据将合并到PoS Beacon Chain上,PoW到达终止难度的日期大概在2022-09-10 - 2022-09-20。文章最开始的第一张图,可以很直观的看出当开始合并之后,PoW将被废弃,整个网络都将由validator来维护。 Bellatrix升级将在beacon chain epoch 144896开启,Paris升级将在Terminal Total Difficulty (TTD) 58750000000000000000000 开启,当难度到达TTD时,之后的块都将由beacon chain validator生成,生成第一个Post TTD 块大概需要13分钟,当beacon chain能敲定validator生成的新块时,意味着合并成功了。 问题 node ops 节点运维 节点维护者需要运行consensus layer(CL)和execution layer(EL),并且EL需要开启Engine API,然后CL通过JWT认证接入EL。 Staker Validator 质押者 在post merge阶段,validator 需要独立运行EL,并且配置fee recipient地址来获得收益。 contracts 合约#### post merge对合约的影响非常小,几乎所有的接口都是保持稳定的状态。 ETH holder 持有者 合并之后,ETH持有者不需要做任何处理。 Miner 矿工 合并之后,PoW已经被移除,Miner无法再将算力贡献到PoS中。

August 31, 2022

故事与情感

July 30, 2022