那些年,我玩的C++
我尝试过很多使用C++版本的东西,opencv、libtorch、qt,不得不说真的快,所以这篇文章来谈谈,在Clion 上折腾的一些东西。
Clion 上使用 OpenCV了解我的人都知道我非常喜欢使用 JetBrains 公司的软件,所以使用C++的时候选择了 Clion ,但这款软件使用 OpenCV 的时候有些麻烦,我也是好不容易克服了这些。
因为 Clion 使用的是 CMake 来管理编译环境,所以我先写一下我使用的时候怎么配置的CMakeLists.txt文件:
123456789101112131415161718cmake_minimum_required(VERSION 3.16)# 修改这个地方,用来直接设置项目名称set(MY_PROJECT_NAME OpenCV)# 修改这个地方,可以直接设置 OpenCV 的路径set(OpenCV_DIR "D:\\Software\\Languages\\C++\\opencv\\mingw-build\\install")set(CMAKE_CXX_STANDARD 14)set(OpenCV_L ...
3d打印机,起飞!!
我终于做好了一台3d打印机!!
说到底最重要的是打印机的程序,我直接使用了开源的 Marlin,这样我还可以在这基础上添加我自己的程序。
配置Marlin固件说来有意思,我最近在整一些arduino的东西,没想到Marlin固件也是基于arduino而开发,这就省事了好多,所以直接下载Marlin就行了源代码就可以了。
Marlin官网:http://marlinfw.org/
我下载的是1.1.9.1版本的固件,实际上是无所谓,也就是多多少少有些地方会有所不同。
下载之后会有一个 arduino 项目文件,所以直接使用 arduino IDE 打开就可以。
这个项目中其他文件尽量不要去修改,因为涉及到一些单片机的程序,当然我肯定会自己修改,毕竟我是
当然,有个文件还是需要修改的,找到Configuration.h,你可以叫这个文件为配置文件(好low的名字),打开之后,如果你会 C/C++ 的话,你就会发现里面全是宏定义,这就有意思了(我超爱宏定义的)。
接下来我会说一下比较重要或需要修改的宏定义。
串口设置这个主板与电脑通信使用的是串口通信,所以需要设置一下端口号:
1#de ...
我的MatrixGame
我很喜欢 arduboy 这个小东西,但一开始我对 arduino 抵触很大,所以有点看不起 arduino,但这几天我不得不说:
我之所以看不起arduino就是因为总有一部分人认为自己会个arduino编程就以为自己可以挑战嵌入式,与其说讨厌arduino,不如说讨厌这群人……好了,废话少说,开始介绍这段时间的项目。
我是打算制作arduboy的,说真的这个小东西还真是优雅。
这款游戏机主要芯片为 ATmega32u4 ,性能肯定没有stm32强悍,当然还是AVR加购,我是有考虑要不要将这个库移植到stm32上去,但我没有那么多时间,还是不要自己造轮子了。
绘制PCB使用的是立创EDA,本来是使用的AD的,但我意外发现立创EDA格外的好用,而且我在嘉立创打样,所以整体下来轻松了不少。
就这样,开始了这个项目,接下来我会介绍我制作每个版本的特点。
MatrixGame_V1这是,梦开始的地方……
绘制一个原理图:
这是最初的板子原理图,有很多bug,但在这个原理图之前已经修改过来了。
于是就开始绘制PCB:
这一代板子有个致命的错误,我把电源画反了,导致第一次上电直接冒烟了 ...
PID控制算法详解
PID控制算法可以说是我比较早听说的算法了,但几年前我并不太了解原理,我只能按照公式敲除代码,但经过考研之后,我的高数进一步提高,有些东西我逐渐看透了。
本篇文章我将详细讲解我对PID控制算法理解。
首先,什么是PID,估计有人一脸懵逼的进来,还不知道什么是PID吧。
PID是一个控制算法,小到风扇调速,大到火箭轨道调整,都能有它的痕迹。
我会根据下面这个视频进一步讲解。
首先我先放出PID的图:
不难发现PID是一个闭环系统,问题来了,什么是闭环系统?什么是开环系统?
开环系统亦称“无反馈系统”,系统的输入影响输出而不受输出影响的系统。简单来讲就是我行我素,我直接输出。
闭环系统亦称“反馈系统”,系统的输入影响输出同时又受输出的直接或间接影响的系统。简单来讲就是我必须时刻检查我自己的情况,根据我自己的情况来进行输出。
由此可见闭环系统下需要至少一个传感器,用来检查自身情况。自身情况可以这样判断,因为我们需要一个目标值,由于使用了传感器,所以我还有一个检测值,那我就定义了一个变量:
error = 目标值 - 检测值我们可以这样理解 error 这个值,这是一个偏差, ...
Python的全部内置方法
当用Python定义一个类的时候,其实有一些固定的方法,这些方法是固定的,当然程序员是可以根据自己的需求去更改。
每次我在使用这些方法的时候,我还需要去自己去查,很麻烦,因此我打算总结一套全部的内置方法。
关于对象周期的方法这部分其实主要就是构造方法和析构方法。
构造方法
__new__(cls,[...)
或许大部分人认为构造方法为__init__(),其实在这之前还有一个方法,这个方法在对象实例化的时候调用,而且比__init__()执行的时间还要早,但不经常用,除非特殊情况。
__init__(self,[...])
这就很常见了,一般用作初始化,注意,形参的参数是决定实例化的时候传进来的参数,所以这很重要,一般都会自己去重写。
析构方法
__del__(self)
主要是在销毁的时候会调用这个方法,但是需要注意的是,当Python解释器退出但对象仍然存活的时候, __del__()并不会 执行。 所以养成一个手工清理的好习惯是很重要的,比如及时关闭连接。
操作符有些方法可以根据操作符执行,利用好的话可以玩出很多花样。
比较运算符
__cmp__(self, other ...
Git的详细教程
是时候整理一下Git命令了,以前总是单独去使用,太不方便了,这次我就直接整理一份,方便以后直接使用。
Git简介Git 是程序员学习和工作都离不开发工具,也是非程序员好用的文档版本管理工具。
Git 是一种分布式版本控制系统,它可以不受网络连接的限制,加上其它众多优点,目前已经成为程序开发人员做项目版本管理时的首选,非开发人员也可以用 Git 来做自己的文档版本管理工具。
Git 的api很多,但其实平时项目中90%的需求都只需要用到几个基本的功能即可,所以本文将从 实用主义 和 深入探索 2个方面去谈谈如何在项目中使用 Git,一般来说,看完 实用主义 这一节就可以开始在项目中动手用。
常用操作先大概看一下,我整理了什么命令:
git clone
git config
git branch
git checkout
git status
git add
git commit
git push
git pull
git log
git tag
git clone
从git服务器拉取代码
1git clone https://github.com/g ...
我的java学习笔记
这是我当初学习java时的一些笔记,这几天翻出来看了一下,感觉可以作为一些参考,由于当时我有C/C++的基础,所以学习的速度非常快,有些地方直接和C/C++进行了对比,所以在观看的时候最好有一些编程基础。
语言只是算法的载体,会得再多,也仅仅是获得了一个又一个躯壳,真正称得上灵魂的是算法,一个没有灵魂的躯壳,只能算一个行尸走肉。
开始前的一些准备Java的三大版本
JavaSE:标准版(桌面应用程序,控制台开发)
JavaME:嵌入式开发(手机app)
JavaEE:企业开发
JDK、JRE、JVM
JDK:Java开发者工具(用来开发Java程序)
JRE:Java运行环境(可以运行Java的程序)
JVM:Java虚拟机(核心部分)
虚拟机机制.java文件编译成.class文件,在虚拟机(JVM)上运行,实现“一次编译处处运行”。
垃圾回收机制C/C++是程序员手动回收内存,高效准确,但容易失误。
java自动垃圾回收,可以自动检测内存,虽然规避了失误,但不会非常高效。
环境搭建官网下载JDK,尽量使用稳定版本,推荐使用压缩包进行解压,之后再进行环境变量配置,在版本上可以 ...
卷积双目匹配
双目立体系统中,匹配算法是必不可少的一个环节,但是当今的双目匹配算法效率并不是非常的理想,我在原有的匹配算法中改进了一种算法,并这种算法甚至可以自成一套体系,我称它为卷积双目匹配。
接下来我会介绍我的算法原理,我的算法步骤主要分成以下几步:
图像相对滑动
图像整体差值
通过卷积来计算损失矩阵
从损失矩阵中查找最合适的视差值
我会使用下面的两幅图片来进行分析:
两张图片的特点当左右摆放的相机时,同一个物体在两张图片上的位置会有一个特点:右图片的物体会普遍靠左,左图片物体会靠右。这个现象很容易说明,左相机会照的左面东西多一点,右相机会照右边多一点。
例如,下图中红色矩形标记的桌角,左图桌角的坐标为(200,190),右图桌角的坐标为(167,190),两张图片的桌角的行坐标为是相同的,都是第190行,但列坐标就不同了,而且左图的列坐标为第200列,右图的列坐标为第167列,很明显左图中桌角和右图中桌角相比较更偏右一点。
这个特点会体现在两张图片中所有的物体上,而且,如果这个物体非常靠近相机,这种特点就越明显。在接下来的过程中我会用到这个特点进行处理。
图像相对滑动利用以上两张图片 ...
这就是我的信条
前段时间我看了《信条》,我很喜欢这部电影,而且这部电影让我百感交集,并不是电影中复杂的设定,而是它触及到了我最沮丧的时刻,让我明确了属于我的自己的人生观。
整部电影描述了一个重要的概念:熵。
什么是熵,熵是热力学中重要概念,用来描述一个体系混乱程度的度量,有序则对应熵低,混乱对应熵高。下图是一个例子,刚开始的时候非常有序(因为我们提前摆好了字母),然后让它随机运动,最后非常的混乱,这就是一个熵增的过程。
熵很重要,是因为它总结了宇宙的基本发展规律:宇宙中的事物都有自发变得更混乱的倾向,也就是说熵会一直增加。破镜难以重圆,青春不会永驻,一切事物正在朝着一个方向去演变。蜡烛燃烧、冰块融化、酒精挥发、食物腐烂等都是熵增加的过程。
很不可思议吧,我们的世界熵在不断增加,电影有意思的地方就是,构造了一个熵减的世界,整体下来与真实世界相反。一个熵增,一个熵减,整部电影玩出各种想不到的操作,诺兰真的很厉害。
但这篇文章关注点不是熵,我只是想用熵来引出另一个细思极恐的概念。
弹一枚硬币,如果能知道所用的力量、空气阻力等等所有因素,把这些因素量化成数据,根据这些数据是能百分百计算出接下来硬币落地的 ...
开开心心玩树莓派
这是一篇长系列,就是折腾折腾,玩玩树莓派。
我使用的是树莓派3b,其他版本的基本操作都差不多。
树莓派装系统树莓派不装系统,和板砖没什么区别,当然还没板砖有分量,所以至少装个系统吧。
首先,简单科普一下,树莓派的CPU是ARM架构(嵌入式工程师狂喜),所以我们可以下载个linux系统玩玩,就装官方的系统即可,毕竟官方系统稳定,否则你一定不喜欢改一些奇奇怪怪的bug。
硬件准备
树莓派就是一台小电脑,需要一张tf卡,这是用来装系统的,最小为4GB,最好使用Class 10,写入速度可以达到10MB/s,这样使用起来就比较流畅。有卡了就需要读卡器,不要使用笔记本自带的SD卡插槽,不管用,烧不进去系统,来自我自己带泪的提醒。tf卡最好格式化一下(备份重要资料,格式化就没了),最好是fat32格式。
网线
电源线
下载镜像现在有卡了,就需要系统镜像,可以去官网去找:
https://www.raspberrypi.org/downloads/
官网推荐了三种系统,如图所示:
简单介绍一下:
第一个是带图形界面和常用软件,比较推荐下载。
第二个只有图形界面。
第三个是精简版,其实只有 ...