imuncle.github.io
imuncle.github.io copied to clipboard
大叔的个人小站
hhh,突然想起了去年玩过的Live2D,但是中途经过重建网站所以丢失了,现在突然心血来潮想重新给网站来一个。具体的效果,见页面左下角(手机上不可见),或者查看这个[Demo Page](https://imuncle.github.io/live2d)。 # Live2D简介 Live2D是一种应用于电子游戏的绘图渲染技术,由日本Cybernoids公司开发,通过一系列的连续图像和人物建模来生成一种类似二维图像的三维模型,换句话说就是2D的素材实现一定程度的3D效果,但只能是一定程度3D,因为Live 2D人物无法大幅度转身。 Live2D可以用于很多场景,比如桌面动态壁纸,手机游戏(~~比如最近挺火的闪耀暖暖~~),电脑桌面应用,以及网页,这里只谈论在网页中的使用。 live2d官方提供了很多平台的SDK(介绍见[这里](http://www.live2d.com/en/products/cubism_sdk)),包括iOS,Android,Flash,Unity,openGL等,如果要在网页中呈现,则可以提供了WebGL SDK,可以在这里下载:[Cubism SDK WebGL 2.1](http://sites.cybernoids.jp/cubism-sdk2_e/webgl2-1) 但这里面的js核心文件是被压缩混淆的,不容易上手,不过国内已经有一些对live2d web进行实践的先驱,他们提供的JS资源在使用上要简单的多,基本上就是把官方提供的案例中的WebGL的一个复杂代码整合在了一起。好处在于基本功能使用简单的,不足在于若想定制和扩展,则要走旁门左道了(如提词器效果,只能走传统web交互)。 # 使用方法 这里以我接触到的两个上手挺方便的live2d举例: ## 方案1 具体步骤如下: * 页面上放一个canvas: ```html ``` * 引入[live2d.js](https://cdn.zhangxinxu.com/sp/demo/live2d/live2d/js/live2d.js),例如: ```html ``` * 一行JS代码执行绑定:...
卡尔曼滤波
卡尔曼滤波的学习源于机器人自瞄的需求,奈何自己太菜,好几次打开教程想看最后都因看不太懂而放弃,今日再看,拿出稿纸一步一步跟着推导,到最后推导出卡尔曼滤波公式的时候,竟然有点错愕,仿佛还没有看见卡尔曼就已经走进它的世界一样。 我也不多写什么总结,直接列出我看的三个教程,按我学习的时间先后顺序排列,真的是很好的教程,浅显易懂! 1. [Artificial Intelligence for Robotics - Udacity](https://classroom.udacity.com/courses/cs373) 2. [如何通俗并尽可能详细解释卡尔曼滤波?](https://www.zhihu.com/question/23971601/answer/375355599) 3. [卡尔曼滤波器及其在云台控制中的应用](https://zhuanlan.zhihu.com/p/38745950) 最后附上两张图,来源见水印。  
距离上一篇文章已经有一个半月了,越咕越得劲(其实是因为小学期整天上实验课啦),前天刚结束小学期的课程,觉得是时候给这个小项目结个尾了。 我花了四个小时设计机械结构,十二个小时接线,三个小时写代码,九个小时改错调试,最后的作品长这样:  (~~这TM也太丑了吧~~) 因为能力有限,机械结构的刚度也不够,前面文章所设想的部分功能未能实现,深表遗憾。 骚话不多说,直接进正题。 # 腿部运动 我使用的是飞特的[SCS0009舵机](https://item.taobao.com/item.htm?spm=a1z09.2.0.0.66582e8dmATkeS&id=539949416714&_u=l2osqi7a9c5d),体积很小,扭矩足够,串行总线,简直不要太爽! 因为舵机个体以及舵机安装方式的问题,同一个位置信号发过去,不同的舵机反应不一样,所以最开始我们需要校准。 我记录的是四条腿都伸直的时候的舵机位置反馈值,存储在一个数组里面: ```c int init_position[12] = {550, 641, 796, 525, 491, 79, 600, 864, 766, 274, 342, 207}; ``` 当然小狗是不能保持伸直的,所以我在初始化的时候给了一个足尖初始坐标(0,0,86.6),坐标系的建立见后面的图。 从前面的文章([四足机器人制作(一)...
看了《机器人学》后颇有感触,觉得我之前使用的几何法解角度实在是费劲,也就这小狗一条腿就三个自由度,要是六轴机械臂,用几何法解起来就很费神了(感兴趣可以随便翻一本机器人运动学的书,一般都会用几何法推一遍)。忽的我又想起来大一时线性代数老师说的一句名言:**万物皆矩阵**。 # 身体姿态表示 在机器人学中,一般用四维齐次变换矩阵表示坐标系的旋转和平移: $$A=\left[ \begin{array}{ccc} { } & { } & { } &{ p_x }\\\ { } & {R} & {}&{ p_y } \\\ {} &...
在使用浏览器插件登录微信的时候,发现一个有趣的现象:在浏览器最小化的情况下,桌面右下角依然可以实现消息弹窗提示  当时就眼睛一亮,觉得这个功能非常有趣也非常实用。经过进一步摸索我发现网页版微博也有这个功能。 这其实是使用了H5的新属性`Web Notification`,目前还只有Firefox和Chrome支持良好。 # 获取用户权限 像下图所示的这种其实就是在获取消息提示的权限。我记得之前有段时间,很多网站包括QQ空间,微博,简书等等都出现了这种弹窗,不过现在好像有的就没有了。  (别想了,我就看看,买不起) 总之,想展示弹窗要先拿到用户的允许。获取权限使用方法`Notification.requestPermission(callback)`,这个方法只能被用户行为调用(比如:onclick 事件),并且不能被其他的方式调用。 ```javascript Notification.requestPermission(function (permission) { console.log('用户是否允许通知: ',permission === 'granted' ? '允许' : '拒绝'); }); ``` `Notification.permission`是一个静态属性,可以获取用户当前的通知权限状态,返回一个String,可以根据返回值判断用户是否授予了通知权限。返回值有三种情况: * default:用户还未被询问是否授权,所以通知不会被显示。 *...
小学期上实验课快烦死我了,那些实验设备里面的系统常年不维护,也不联网,被插过无数个U盘,也不知道是哪些U盘就把病毒传播到电脑里面了,结果后面的U盘插一个感染一个。 本贴长期更新,记录各种U盘被锁文件,藏文件的解决办法。 # 1、文件夹被隐藏 这种隐藏使用Windows自带的“查看隐藏文件”选项是没用的。 新建一个文本文件,重命名为`1.bat`(随便啥名字,只要后缀是`.bat`就行),文件内容如下: ```bat for /f "delims=" %%i in ('dir /ah /s/b') do attrib "%%i" -s -h ``` 命令的意思解释: `for /f "delims=" %%i in` 循环 `dir /s`...
今天才注意到原来GitHub上面返回的时间是UTC时间。首先说说什么是UTC时间。 # UTC时间 UTC时间,又称世界标准时间,是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间(GMT)。 GMT 和 UTC 可以互换,但是实际上,GMT 是一个时区,而 UTC 是一个时间标准。 UTC时间一般格式为:`"2010-05-04T05:52:33Z"`。 UTC时间与北京时间相差了八个小时。 # 解决办法 参考了[网上教程](https://cloud.tencent.com/developer/ask/146562)和[Unix时间戳在线转换工具](http://tool.chinaz.com/tools/unixtime.aspx)后,成功解决了时间差的问题。代码如下: ```javascript function utc2localTime(time) { var time_string_utc_epoch = Date.parse(time); var unixTimestamp = new Date(time_string_utc_epoch); return...
今天发现一个非常有意思的项目,原地址在这里:[Animating URLs with Javascript and Emojis](http://matthewrayfield.com/articles/animating-urls-with-javascript-and-emojis/) 你可以把浏览器的URL地址变成数个emoji的合成的一张动态图:  还有钟表:  用emoji制作进度条:  除了使用emoji之外,我们还可以用代码绘制几何图形,也可以做出有趣的效果。 我们可以绘制[Box-drawing Characters](https://en.wikipedia.org/wiki/Box-drawing_character)  使用JavaScript的`fromCharCode()`方法,就可以将 Unicode 编码转为一个字符。 我最喜欢的效果如下:  实现的代码如下: ```javascript function loop() { var i, n, s...
通过下载百度网盘资料时浏览器会提示打开百度网盘程序,淘宝咨询客服时会提示打开阿里旺旺程序,显然像这种很有名的软件可能会留有官方的渠道,可以通过一个链接唤起系统的其他程序。 于是突然想实现在网页上点击链接就能直接开启QQ聊天界面的功能。在各种寻找之后,终于在[这篇文章](https://idealclover.top/archives/545/)找到了链接。 使用的是QQ推广的官方渠道,可以使得无论网页端还是手机端,无论QQ还是TIM,都可以自动调用相关应用并联系到我。 ```javascript http://wpa.qq.com/msgrd?v=3&uin=QQ号&site=qq&menu=yes ``` ```javascript tencent://message/?uin=QQ号 ``` 上面两个链接都可以使用。比如 [点我联系作者](http://wpa.qq.com/msgrd?v=3&uin=1378006772&site=qq&menu=yes)
今天翻到了一个有趣的小玩意儿,也体现了程序员的浪漫,可惜的是这位程序员在两天前分手了。 原地址在这里:[Love-Gift](https://github.com/idealclover/Love-Gift) 页面演示在这里:[idealclover](https://love.idealclover.top/) 第一眼看到就被惊艳到了,确实很用心!于是我赶紧下载下来研究了一下源代码。 这个项目参考了[pen#pwlxxp](https://codepen.io/jakealbaugh/pen/PwLXXP)项目,基本思想是动态改变网页的style标签和body内容。关键代码如下: ```javascript (function() { var codeTime, commentTime, finalStyle, isOn, openComment, skip, styles, writeStyleChar, writeStyles; styles = "将要展示的style样式,也就是页面动态显示的内容" openComment = false; isOn = true; writeStyleChar = function(which)...