Hacking registers and bits.

2020-05-05
自制CPU系列(一):软件安装与配置

自制CPU系列(一):软件安装与配置

前言

我记得自己大三在上《计算机组成原理》课程的时候,曾经独自完成过一个基于MISP指令集的多周期CPU,虽然当时它只能执行大概50多条基本指令且没法像流水线CPU那样可以并行工作,但是当看到自己编写的Verilog模块代码能够通过Modelsim仿真得到正确的波形时,那种成就感是编写普通的软件程序所无法比拟的。也许正是得益于此次经历,让我后来萌发了想要DIY一个完整CPU的想法,不过由于学业和工作上的种种原因,这个想法就被暂时搁置了。

随着近几年RISC-V开源指令集逐渐在学术和工业界得到认可,个人设计CPU已经不再是遥不可及的事情,再加上自己最近被胡振波老师的《教你设计CPU—RISC-V处理器》这本书中的内容所深深吸引,于是我决定重启自制CPU项目。当然,因为我目前只能算是一个初学者,所以如果接下来的文章中有哪些内容写得有误,欢迎各位大佬指正!

阅读此文

2019-12-07
生活随笔系列(一):我与EOP键盘钢琴

生活随笔系列(一):我与EOP键盘钢琴

前言

从大学时代开始,我就是很多人眼中的技术大神,除了完成课内的作业之外,我基本上把时间都投入到了机器人或个人项目的开发上,我记得那会儿自己写代码的时候经常会听日韩风格的轻音乐,但是脑子里却从来没有产生过想要自学乐器并进行演奏的想法,也许是因为童年时期音乐老师教的五线谱给自己心里留下的阴影比较重(开个玩笑),所以导致我一直认为学习乐器是一个非常困难的过程。虽然我很羡慕那些在艺术节的舞台上轻松驾驭各种乐器的同学,但是如天书般的乐理知识和不协调的双手还是让我意识到了理想和现实之间的巨大差距,直到后来自己在QQ空间看到别人分享的一个视频之后(因为油管视频不翻墙无法显示,所以就暂时引用B站上其他UP主搬运的),才让我对学习乐器的想法发生了质的转变。

阅读此文

2019-07-21
参与活动系列(四):2019仓木麻衣北京演唱会

参与活动系列(四):2019仓木麻衣北京演唱会

前言

我在《生活随笔系列(一):我与EOP键盘钢琴》这篇文章里曾提到过自己今年4月份的时候因《渡月橋 ~君 想ふ~》这首歌开始重新喜欢上了仓木麻衣,当时自己几乎将音乐播放器上所有麻衣的歌曲都听了一遍,并且还在网上观看了很多她参加活动时的演唱视频,可以说是打心底里越来越喜欢这位平成年代曾红极一时的日本歌姬,不过也许是因为脑海中一直存在偶像距离普通人很遥远的固有见解,所以自己从来没有产生过要去现场看演唱会的奢望,只寄希望于能用EOP钢琴弹奏来表达自己对偶像的敬意之情。

后来4月底的一天,我在B站上又重温了一遍麻衣的TAT演唱会视频,竟无意中从视频的弹幕中得知麻衣7月19号要来中国开演唱会,当时我以为这是好几年前的事了,可是没想到自己在网上一搜发现演唱会的举办年份就是2019年,而且第一场的举办地还在北京!

阅读此文

2018-08-18
参与活动系列(三):2018世界机器人大会

参与活动系列(三):2018世界机器人大会

前言

随着暑期的来临,我一直翘首以盼的世界机器人大会也将如期举行,因为有了去年的惨痛教训,所以这次我提前好几个月就在官网上预约好了博览会门票,就当我在为自己的英明决策而感到心满意足之时,一个天大的好消息竟然幸运地砸向了我——可以通过工作单位免费申请论坛票!,要知道一个单日论坛票就要2000元钱,如果要参加两天或三天的话,票价就更贵了,这对于刚参加工作的我来说是不可奢望的,而且我觉得主办方应该也不会这么做,毕竟像我们这样小单位都能申请的话,那主办方不得亏死?不过最后我还是抱着试一试的态度在网上申请了论坛票,当时我心里想的是如果能申请下来就赚了,不行的话也没什么损失。

也许是上天比较眷顾我这个喜欢机器人的小伙子吧,在世界机器人大会举行的前一周,我收到了主办方发来的一条短信,告知我已经成功申请到论坛票并可通过短信中的二维码链接到现场取VIP证,看来无心插柳柳成荫这句话终于在我身上应验了,咱啥话也不说了,就等着接下来的梦幻之旅吧!

阅读此文

2018-08-06
参与活动系列(二):2017世界机器人大会

参与活动系列(二):2017世界机器人大会

前言

我第一次听说世界机器人大会还是在2015年10月,那会儿基地学长跟我们讲在当年11月底召开的世界机器人大会(后来才知道是第一届举办)上会有RoboCup国际赛冠军队伍的展示,当时我听完之后十分惊讶,因为我们舞蹈机器人基地曾经在7月份暑假期间受邀参加了在合肥举办的RoboCup国际赛,算是亲眼见证了那些国内外机器人强校之间的激烈对抗,所以我对那些获得RoboCup(世界最高级别机器人比赛)国际赛桂冠的队伍是相当崇拜的,没想到这次大会组办方能够把那么厉害的队伍邀请过来参加表演赛,就是从那一刻起,我意识到这个世界机器人大会可能并没有我们想象中的那样只会卖名字的噱头,看来它还真是有点货真价实的东西的。

因为在西安上大学的缘故,我错过了前两届世界机器人大会,2017年6月底我本科毕业回京参加工作,于是自己终于迎来了在家门口观看世界机器人大会的机会,从小到大算下来,这还是我头一次能够去现场参加如此规模的博览会,兴奋之情溢于言表,总之非常期待到时候能够看到各种各样有意思的机器人!

阅读此文

2018-07-28
参与活动系列(一):2017北京Maker Faire大会

参与活动系列(一):2017北京Maker Faire大会

前言

我记得高考完的那个暑假自己有一次去书店买书,在选书的过程中偶然在旁边的架子上发现好了几本名字叫做《爱上制作》的杂志,我当时出于好奇就翻看了其中的一本,里面介绍了很多国外大神制作的各种充满想象力和创造力的项目,内容不仅描述得非常详细而且还具有很强的可操作性,真的是让人越看越入迷,后来我还买了好几本回家看。就是从那时起我开始逐渐接触国外的创客项目,并喜欢上了这些项目背后所蕴含的那种创客文化。

而作为美国乃至全世界创客文化的先驱,我相信很多人我一样,把Make公司当作自己的偶像。我认为Make公司除了发行《爱上制作》等杂志或书籍之外,最大的贡献就是创建了Maker Faire大会,它为各国的创客以及DIY爱好者们提供了一个绝佳的交流平台,有效促进了创客理念在全球的传播。北京从2015年开始连续举办了两届Mini Maker Faire大会,经过两年的努力,2017年的北京Maker Faire大会终于由Mini级升级为城市级,虽然大会的规模还比不上纽约和湾区,但是能够在家门口参加一次城市极的Maker Faire大会,怎么说呢,也算是圆了自己的一个心愿吧。

阅读此文

2018-06-13
自制机器人系列(三):小型自平衡机器人

自制机器人系列(三):小型自平衡机器人

前言

今年春节左右我拿到了maksyuki所设计的Breezeduino板子,Breezeduino是一个基于ATmega328P-AU芯片(32引脚QTFP封装)的AVR单片机最小系统板,由于现在Arduino非常流行,所以我们也顺理成章地给Breezeduino刷入了最新的Arduino Nano固件,使其可以通过Arduino所提供的软件封装来编写嵌入式程序。在能够正常烧写Blink程序后,我在想如何能把这个板子用起来,首先进入我脑海里的是做一个游戏机,因为游戏机的硬件原理不难而且还可以自己DIY写一些小游戏去玩,比较有意思,目前国外类似的开源项目有MAKERbuinoGamebuino,做得已经相当不错了。不过在经过一番深思熟虑后,我还是决定回归我最喜欢的老本行——机器人,因为对于我来说做一个可以与物理世界进行交互的机器人要比其只能在游戏机的OLED 12864屏幕里能跑能跳要有意思的多。

阅读此文

2018-05-21
自制机器人系列(二):小型六足仿生机器人

自制机器人系列(二):小型六足仿生机器人

前言

这个小型六足机器人是我在大四做的,是我大学本科生涯的最后一个个人项目。至于为什么我要做六足机器人,还要从高考完之后说起:当时刚考完的我一直想做一些有意思的事情,直到有一天我发现了一个叫PVCBOT的网站,里面记录了很多如何使用PVC材料来制作简单机器人的教程,其中有一款叫做PVC六足机器昆虫(见下图)的机器人彻底震撼了我,当时看完教程之后我就下定决心也要做一个类似的六足机器人,于是我便从懒猫侠前辈那里购买了六足机器人套件(目前应该已经绝版了),并打算按照提供的教程完成自己的六足机器人,但无奈当时的我所掌握的知识太少,什么单片机、串口通信、舵机PWM、电源管理、传感器、舵机控制板等都不懂,特别是机械结构方面我更是一窍不通,所以大一那会儿我还闹出了笑话:用硬纸板做六足机器人的肢体,在安装好舵机并通电测试后,眼睁睁地看着自己的“纸板六足”在舵机的震动下不断地解体。。。

阅读此文

2018-05-15
自制机器人系列(一):简单轮式机器人

自制机器人系列(一):简单轮式机器人

前言

制作这个项目的起因是大一下学期那会儿我通过学校图书馆里的《无线电》杂志开始接触Raspberry Pi卡片式计算机和Arduino微控制器,其中Raspberry Pi给当初什么都不懂的我留下了非常深刻的印象:一个信用卡大小的板子竟然可以跑带有图形界面的GNU/Linux操作系统。在强烈探索欲的驱使下,我从网上购买了两块Element14的Raspberry Pi一代Model B(现在早已经绝版了)板子以及其他相关配件,开始在Raspbian系统上自学Python和各种传感器的使用方法,后来为了检验一下自己的学习成果,于是我便花费几周的时间做了这个简单的轮式机器人。虽然它涉及的原理并不复杂,但是对于那会儿刚开始接触嵌入式的我来说,能成功搭建一个完整的机器人系统还是挺有挑战性的。

阅读此文

2018-05-13
自制机器人系列(零):总纲

自制机器人系列(零):总纲

前言

我相信很多男生都非常喜欢机器人,其中很大一部分因素是受动漫或影视内容(比如像《铁臂阿童木》、《机器人总动员》和《终结者》等)的影响,而我对机器人的喜爱却来源于第一次进行DIY电子制作时的难忘经历。我记得那时高考已经考完有一段时间了,有一天我在网上闲逛,无意间发现了一个叫PVCBOT的网站,里面记录了很多有关如何使用PVC材料来制作简单机器人的教程,我越看越入迷于是就买了几个套件回家进行制作,尽管制作的过程因为自己不懂如何焊接(当时的确如此)而走了很多弯路,但是当最后机器人能够移动时,我的内心感受到了前所未有的快乐!也许就是这种对机器人的喜爱让我在之后的大学生活中不断尝试制作更复杂的机器人,甚至有机会加入机器人基地并亲身参与到高级智能机器人的研发工作当中去。

阅读此文

2018-02-01
Breeze微型四轴系列(六):软件开发总结

Breeze微型四轴系列(六):软件开发总结

前言

一款出色的四轴飞行器除了要有设计严谨的硬件、稳定可靠的飞控之外,还需要具有图形界面的上位机以及可扩展软件接口才行。毕竟对于那些基于四轴飞行器平台进行深入研究(比如视觉SLAM、视觉避障、室内自主悬停等)的学者来说,带有各种参数仪表盘和数据曲线显示功能的地面控制站可直观地显示出当前四轴飞行器在空中的运动姿态和相关传感器数据等信息,便于算法调试。此外,四轴飞控所集成的软件接口API也能够加快上层应用的开发速度,提高其与其他开源框架(ROS、OpenCV、PCL、TensorFlow等)的集成和交互能力。

因此,本篇文章会以Breeze微型四轴飞行器为例来简要介绍目前国内外几个比较成熟的四轴飞行器地面控制站(GCS)软件以及软件接口协议,欢迎各位前来阅读。

阅读此文

2018-01-15
Breeze微型四轴系列(五):STM32嵌入式开发-飞控算法理论

Breeze微型四轴系列(五):STM32嵌入式开发-飞控算法理论

前言

前面我介绍了很多有关微型四轴飞行器嵌入式底层开发的知识,虽然对于很多初学者来说,其中有一些概念比较晦涩难懂,但是它们确实能够让大家对于嵌入式底层开发有更深入的理解与掌握。好了言归正传,在本篇文章中我会向大家介绍有关微型四轴飞行器飞控算法理论方面的相关内容,而至于什么是飞控,我想很多自己买过成品飞控板、组装过航模或四轴飞行器的同学都不会陌生,顾名思义,飞控指的是飞行控制算法,即通过获取IMU(惯性传感单元)数据,并采用滤波、PID等算法对飞行器当前的姿态进行实时解算,得到各电机的转速和转向,从而完成对飞行器的控制。由于飞控算法本身涉及到很多自动控制原理和线性代数方面的理论知识,所以推荐大家先把自控和线代好好复习一遍再去研究飞控算法,这样理解起来可能会容易一些。

阅读此文

2017-12-30
Breeze微型四轴系列(四):STM32嵌入式开发-代码编写规范

Breeze微型四轴系列(四):STM32嵌入式开发-代码编写规范

前言

对于一个成功的开源项目来说,我个人认为代码规范在某种程度上要比代码本身更为重要。至于为什么会得到这样的结论,主要归结于当初我自己还在舞蹈机器人基地的时候就曾遇到过因代码不规范所导致的一系列问题:那时我们晓萌软件组每人负责一个机器人模块的代码编写工作,由于比赛日期逐渐迫近,我们都在尽全力完成各自的任务而没太注意代码的编写规范,可是到后期要做各模块代码集成的时候我们却发现由于彼此的代码规范不统一,导致我们需要更多的时间来理解对方所编代码的含义,并且重新修改很多软件接口以实现数据的无障碍传输。

总之,以往的经历让我明白严谨的代码规范可以显著提高代码的质量、降低后期的开发和维护成本、提升团队开发的效率并减少错误的发生。因此,我们又有什么理由不去学习并制订自己团队的代码编写规范呢?

阅读此文

2017-11-18
Breeze微型四轴系列(三):STM32嵌入式开发-Makefile详解

Breeze微型四轴系列(三):STM32嵌入式开发-Makefile详解

前言

在上一篇文章中,我详细介绍了STM32嵌入式开发工具的相关内容,也通过具体的操作向大家展现了STM32嵌入式开发环境的整个搭建过程,但是如果你想看懂本篇文章或者想尝试自己在GNU/Linux下编写STM32嵌入式程序,那以上的知识是远远不够的,你还需要自学MakeMakefile,理解它的语法和用法,并亲手进行实践。

本篇文章因为篇幅有限,并不对Make和Makefile进行详细介绍,请大家先自行上网查找教程资料进行学习,这里我个人强烈推荐大神陈皓曾在CSDN上发表过的《跟我一起写Makefile》系列文章(当初我就是通过这份教程学会Makefile的),里面对Makefile的基本规则、命令、变量、条件判断、函数、运行和隐含规则等内容进行了详细的介绍,讲的非常棒,网上也有PDF版本的,可以下载到本地,方便阅读。

阅读此文

2017-11-07
Breeze微型四轴系列(二):STM32嵌入式开发-开发环境搭建

Breeze微型四轴系列(二):STM32嵌入式开发-开发环境搭建

前言

我跟很多刚开始接触STM32的同学一样,都是先通过各种渠道获得战舰的开发板(我是从机器人基地电子组那里借了一个STM32最小系统板),然后边看着《原子教你玩转STM32》,边用KEIL MDK编写代码来入门STM32嵌入式开发的。在学习的过程中,我发现虽然KEIL MDK集代码编辑、编译、下载、调试为一体,并且提供了非常友好的图形操作界面,但是它的代码编辑功能实在是做得很一般,而且最关键的是它不能在GNU/Linux和Mac OS上跨平台运行。因此,为了提高项目的开发效率并且践行开源的宗旨,我决定遵循HandsFreeOpenRE库(由我们西工大舞蹈机器人基地学长们联合创立的开源机器人软硬件项目)以及很多国外开源飞控项目所做的那样,使用GNU/Linux下的开源工具链来搭建Breeze微型四轴飞行器的嵌入式开发环境。

阅读此文