PID控制器在纵向控制中的应用

在自动驾驶中,我们通常需要对于汽车的纵向运动进行控制,即控制油门、刹车以调整速度。一种常见的方法是PID控制器,全称是比例-积分-微分控制器。我们在使用的时候需要自己定义三个参数:$ K_p, K_i, K_d $。

假如我们有这么一个场景,我们有一个实时更新的期望速度 $ v_e $,以及我们当前的速度 $ v_c $,我们需要求出我们需要踩下多少刹车,多少油门,刹车以及油门的区间都在 $ [0, 1] $之间。为了模拟实时推理,我们假设行车总共的时长为200s,每0.33s为一个sample_time,当过了sample_time个时间之后,就会更新PID控制器的状态,获取最新的输出。

这种场景下,我们会输入到PID控制器一个错误 $ e = v_e - v _c $ ,理想速度与实际速度的差值。如果我们的速度为5 m/s,期望速度为10 m/s,我们就会进行如下计算:
$$
P = K_p \times e \\
I += K_i \times e \times t_s \\
D = K_d \times \frac{\text{d}{e}}{\text{d}{t}} \\
Output = P + I + D
$$

阅读更多...

记一次SNI分流

因为最近备用服务器到期,导致原本两个监听于443端口的服务需要整合到一台服务器上,本来以为这个方法不太可行,后来在网上找到了Nginx的解决方案,即利用ngx_stream_ssl_preread_module模块进行SNI分流,具体的结构如下:

我们直接将静态网页交给Nginx处理,如果是指定域名就转发到特定的服务。Nginx目前的版本已经内置了这个模块,我们只需要在Nginx的主配置配置文件中添加如下几行:

阅读更多...

让Paddle Lite遇上Node.js

最近想找到自己未来的方向,也在一直在关注我们手机和电脑上面的程序是用什么语言或者平台来开发,不同的平台的体验又怎么样?在桌面端,我很惊讶地发现Electron技术正在崛起,可能我们正在使用的代码编辑器、聊天软件、游戏都是基于Electron进行开发的。

在一般情况下,我们开发一个客户端,做一套漂亮的UI出来可能比较困难。而对于习惯于使用Node.js做后端开发的朋友来说,上手桌面客户端开发可能成本也比较高。那么Electron技术就是一个非常棒的解决方案,这款开源的技术允许开发者使用 JavaScript,HTML 和 CSS 构建跨平台的桌面应用程序,客户端UI完全和网页一样,非常方便,还能够在多平台上面运行。

那么在桌面客户端上面,我们能否让开发者做到本地部署Paddle Lite进行推理呢?答案是肯定的。因为Paddle Lite对于C++提供了支持,并且在v2.6.0版本中,能够在Windows中编译。这给了我们将Paddle Lite封装成Node.js的C++插件提供了可能。如果能够成功移植,那我们开发桌面应用的时候,可以允许在客户端上完成图片分类等任务,相信Paddle Lite的轻量化模型运行在常规PC上,能够有不错的表现。对于其他Node.js场景来说,比如网站后端,我们也可以直接使用Paddle Lite进行推理。

于是我做了一个Demo出来,其本质上是将Paddle Lite的C++ API封装为PaddleLite类,这个类目前提供了两个方法,分别是set_model_fileinfer_float。在此之上,我使用N-API来编写Node.js插件,将其组合起来,允许Node.js调用Paddle Lite的C++ API。

阅读更多...

ESP32线控LED与温湿度监控

上一篇文章讲述了如果将ESP32与Google助手结合起来做一个声控LED灯,但是后来发现连接Adafruit IO的网络状态不太好,而且我们购买的国产模块并不需要接100Ω电阻。这次我们直接抛弃掉声控,改为USB线控,配合一个桌面客户端进行控制。我们可以直接在电脑上看到温湿度,下面的拾色器可以任意调节LED灯的颜色,右侧的开关决定了是否开启炫彩效果,如果需要关灯的话只需要把颜色调到黑色即可。

开源代码:ESP32 Wire-controlled LED with DHT22 Sensor

阅读更多...

基于ESP8266和DHT22的迷你气象站

本文并非第一次发表,仅为旧版本两篇文章的合并恢复。

本来是想发一篇关于Blockchain的文章,因为最近区块链好像很火,但是从网上找来的教程都比较详细,自己动手用Python写一个也不是太难,所以以后有机会再写。

那么今天我们就来玩一些硬核一点的东西,尝试用ESP8266来搭建一个迷你气象站。(萌新之作,大佬们轻喷。)

先放一张成品图镇文章:

阅读更多...

Adobe XD x Flutter = 所见即所得的移动UI设计

一直以来我想找一款类似于腾讯Demo的软件,可以方便地将绘制的UI直接导出为代码,达到所见即所得的效果。在Flutter开发的过程中,尽管现在构建UI已经非常方便,但对于复杂的视觉效果和交互还是不太方便。最近Google宣布推出了一款Adobe XD插件可以直接将设计的页面导出为Widget,所见即所得的移动UI设计成为可能。

在使用Adobe XD之前,我们需要新建一个Flutter项目,并在pubspec.yaml中添加adobe_xd包。假如我们的UI使用到了图片,也需要在assets内写明图片的路径。同时需要在Adobe XD上安装插件XD to Flutter,除了官方插件外还有其他第三方导出到Flutter的插件,如果感兴趣也能去体验。

阅读更多...

使用飞桨框架部署SSD目标检测模型

这篇文章详细介绍使用飞桨进行SSD目标检测模型训练,并将其部署到服务器和移动端。

非常感谢许多网友无私的付出,以及开源社区的努力,给了很多入门者快速学习的机会。文末会给出一些有用的资料,本文的代码基于百度AI Studio官方示例代码,文章的代码在PaddlePaddle 1.7.1上运行通过,Python版本为3.7。

SSD模型

如果你对经典的CNN模型比较熟悉的话,那么SSD也并不难理解。SSD大体上来说是将图片分为6种不同大小的网格,找到目标中心的落点,确定物体的位置。在分成不同网格之后,会在此之上取到不同数目的先验框,对先验框进行回归、分类预测。先验框的数目足够多,几乎能够涵盖整个图片,因此我们可以找到包含物体的很多个先验框,最后进行非极大抑制就能得到正确结果。

阅读更多...

Real-time Object Detection on Android using Paddle-Lite

Recently I have created a repository on GitHub named Real-time Object Detector. It’s a Flutter App using the Paddle-Lite framework and Yolo v3 model to detect specific objects. However, I found that some mobile inference framework popular in China like Paddle-Lite by Baidu and MNN by Alibaba is not so well-known by developers out of China. So I decided to write this article explaining how to create your Deep Learning model and make it run on your phone.

If you don’t know how a model looks like inside, it doesn’t matter. There should be no barrier to a starter. Let’s start.

阅读更多...
  • Copyrights © 2020 Kevin Li
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~