岗南游

【日期】 7.30 【杂谈】 场景重现 上午补日记,一直也没开始有效学习。看来畏难情绪仍然存在,使我对之前的成果感到质疑——思考程度很浅。与新朋友超伟商定好去水库玩,中午和c讲妥。最后定好2点出发,超伟骑电三轮接我们。 到时间后,拿三袋酸奶下楼,稍费周折相遇,同行的还有一个陌生旅伴,超伟的初中同学。之后开启过山车旅途:最初我们横坐在两侧的挡板上,c言有老家的风范;渐觉危险,便下蹲在厢内,如此坚持了好一会儿,屈膝承担了防震簧的作用,用以抵御高频颠簸;最后我先屈服,“直接坐下会不会舒服些?”,二人都找回自我。 路线是我们之前的骑行线路,也是我手机掉落的悲惨过去,很多场景历历在目:一个岔路上面通向大道,从下面低矮的桥洞穿行总让人不禁缩紧脖子;经过颠簸路段到平滑路段的过度仍是那么雀跃;一条唯美的路,宁静静谧,曾在这里拍下一段Vlog,当然随风而逝也;那个最后接触手机的标志地点,“朱豪”村标语,也是一个有特色的名字;还有前进到发觉手机不见的桥上,留下无奈的合影,风景依旧很美,清澈流水,漂向远处,重要的是河州中大团大团的绿意,生机勃勃。回忆到这里戛然而止,接轨现实,延续没有走完的过去,实在感慨真是一段不近的距离呢。 还是那个坝墙,路途经过曹火星纪念馆,他是《没有共产党就没有新中国》的作者,感觉没有开放。跟随超伟走一条我从未走过的道路,先翻过一个栏杆,拾级而下,经过砖石搭建的高耸平台,下面是桥洞,不由得感叹原来的水位真高。专业人士c鉴别沿途的岩石,可以确定的是石英,白色半透明,杂质是流畅的赤红色,很像五花肉那种样子,c说红色可能是铁杂质。还有顽强植物如苍耳,尝试人工寄托给c,但还未成熟,倒刺没有足够硬度扒住纺织物。 心碎湖 走到水边,他们都打起水漂,这里岩石都呈片状,在水的浸泡下也很脆,很容易分离成薄片型。因此他们很容易成功,我也尝试一个,居然也跳了一次,很开心。之后超伟想游泳,但我不方便,没办法游。其他人也不能游,他就在自己的据点下水,自己游水。我们坐了一会,另一同学去找超伟,我们决定兴建水利工程,搭建坝墙。 效果不如想象,我们指定它是外星人所为【水库怪圈】,并且结论外星人超出普通地球人的智力水平。出水的超伟也附议,我便颁发认证“这位也是高人”。之后前往下一地点,c提供的另一边,曾充满意境的枯树也抽出绿枝。刚靠近时,有一男一女在树后阴影处乘凉,真是引人羡慕。说时迟,那是快,c突然跑向高地,我可没有气力跟上。原来他在观察之前发现的【爱心湖】,但随着水涨,心底已现缺口,变为【心碎湖】,可仍是婚纱照热景。 踢足球 以为踏上归途,但路从我熟悉的马路突然转变为未名小道,疑问去哪?原来还有part2,邢家沟。我知道这里有个水库,爸爸或许钓鱼来过,听说有人淹死在此。后来在经过一个小学时停下,是后来新建的温塘学校,建筑和硬件可以看出不错。也是超伟读初中的地方,比起当年又好了不少。通过门洞别有洞天,一个较大的操场,c有踢足球的想法,操场上散落的几个球无气瘫软,踢一个足球,居然甩出不少雨水。 他提议踢矿泉水瓶,说着已把瓶子放在脚下有模有样踢起来,我也心痒很久,配合他守门,发现球门还是鹿晗冠名公益项目捐赠。之后去名为“农村青少年活动中心”建筑中参观,意外发现一个小足球,开心奔向操场。趣事很多,两人交换攻防,我先保持优势,后来c也渐渐赶上。之后在立定跳远划线处测试,我达到女生的满分还是很稳,c第一次超过男生的满分线,但如他预料坐在地上……最后是焦灼的投篮,坚持了很久,c才进第一球,之前3楼窗口曾探出的头不知什么时候伸了回去。我也在若干次失败尝试后,实现零的突破,并一鼓作气,连进第二球,紧接着c也进球。我们觉得舒坦了,把球归位,垃圾带走,便离开了。 【絮语·论文】 学姐为我提供了写论文的思路,让我拍手称快。到专业对口的国家基金网站(理工科:国家自然科学基金/社科:国家社会科学基金)搜索近年立项名单,对选题进行过目,寻找自身兴趣点。大方向不好写,可以针对其中一个具体的点开展工作。还向我提供一个代发文章的靠谱QQ号,向他咨询业务,对方会发来符合要求的系列期刊和要求。

Django-发送邮件找回密码

任务 完善登录模块,提供找回密码的途径。 具体逻辑为: 输入用户名和注册邮箱 数据库比对一致后,随机生成验证码 利用Django的邮件发送模块发送验证码 验证码通过后,能够重置密码 用户名和注册邮箱 关键在于利用标签id筛选到输入内容,并且需要加入{% csrf_token %}生成密钥,传入ajax作为参数,否则会出现403无法响应。 访问网址:https://paas-class.bktencent.com/t/demoli/mechat/find_pwd/ 前端发送输入用户名与邮箱 得到输入框中内容 如用户名部分为: 选择器为: 按钮事件触发 需要实现通过点击按钮发送验证码向填写的邮箱地址发送邮件,对按钮部分添加get_verify属性,一直监听按钮按下,并引入倒计时: 当按钮按下,且按钮文字为获取验证码时,此时点击按钮则会触发js中的submit_verify()函数 同步检验输入有效性 为了得到Ajax请求验证有效性函数的返回值,需要通过同步ajax实现,声明async: false, 利用POST请求将用户名与邮件地址传送至后端进行处理,其中的请求路径url利用相对路径格式书写,便于之后上传服务器。 后端检验用户名和邮箱有效性 在url.py中新增路由映射关系 在views.py中新增处理模块submit_verify() 取出POST中数据:username=request.POST.get(‘username’) 查询表baseUser一对一的表User中是否存在输入的用户名:usernameF = baseUser.objects.filter(user__username=username) 验证通过 发送邮件,开始倒计时,传入后端进行验证码生成与邮件的发送,并显示输入验证码框 异步发送验证邮件 但发送邮件是消耗时间的活动,因此一定要用异步Ajax实现,验证通过时调用函数send_verify() 随机生成验证码 后端发送验证邮件 在url.py中新增路由映射关系 在views.py中新增处理模块send_verify() 生成验证码 generateVcode(request) 前端处理返回数据res 完善send_verify()异步请求 在输入框下面加上span成员,如下 将错误信息打印到相应位置 清除错误信息 利用Django的邮件发送模块发送验证码 首先参考博文Django——发送邮件的步骤通过QQ邮箱完成测试,下面介绍类比如何通过学校邮箱进行发送: 首先在网页中搜索关键词华科邮箱+SMTP,找到相关说明 二、客户端设置 使用Outlook、Foxmail等桌面邮件客户端软件或手机邮件客户端软件设置学校电子邮箱时按如下配置信息设置: SMTP服务器:mail.hust.edu.cn POP3服务器:mail.hust.edu.cn IMAP服务器:mail.hust.edu.cn 在settings.py文件中加入设定: 同样需要配置路由映射到函数send_mail():… Continue reading Django-发送邮件找回密码

Django-登录

计划完成一款帮助学习计划管理的小程序,实现其中的登录功能
难点:由于采用蓝鲸的开发平台,其中的登录模块已经经过设定,需要进行重建。

Published
Categorized as SaaS Tagged

过程控制——PID

任务 第一次听到PID还要回溯到大一懵懂时参加的智能车大赛,学长的讲解觉得能够理解,当然在例程已经完整给出、又对编程一窍不通的情况下,并没有亲自应用过这种思想。 比赛培训学长经验 比例(P)是最基本的控制,简单,可靠,但很难达到很好的性能积分(I)可以提高控制精度,但容易引入延迟,造成控制迟钝微分(D)可以提高灵敏度,但容易引入噪声,导致震荡转向控制用PD,速度控制用PI 而今准备智能制造大赛的工业自动化线上赛项,需要对流程自动化方向进行学习,再次感到PID是控制算法的灵魂,慢慢学习积累中,整理学习资料于此。 PID基本知识 视频学习 CIMC-IMQ 【流程行业自动化】学习小组(2018)——SFC&PID讲解 讲解PID部分:0-15′ 公式 理想的模拟式PID控制算法为: PID控制器可以调整的参数是KC、TI、TD。适当选取这三个参数的数值,可以获得较好的控制质量。 Proportion比例 1.Kc接近于0时,控制器的输出u不受输入偏差e的影响,相当于控制系统不工作 2.Kc很大时,只要有一个很小的输入偏差e出现,就会使控制器输出u发生很大的变化 3.Kc由小到大变化,系统将由稳定向振荡发展 4.比例调节是有差调节,比例调节的余差随着比例增益的增大而减小有差,成倍变化,余差 5.比例增益越大,意味着执行机构(调节阀、挡板等)的动作幅度较大,被调节变量的变化较为剧烈 6.比例调节可以单独使用,也可以和其它调节动作结合成PI、PD或PID调节动作 Integral积分 1.积分凋节将输入偏差e按时间进行累积,偏差存在输出就增大,直到消除偏差为止 2.Ki趋向于0时,积分作用消除 3.Ki很大时,积分作用强烈,消除余差的能力强,但容易引起振荡 4积分调节是无差调节。只有当偏差e为0时,积分调节器的输出才会保持不变 5.积分速度越大,执行机构的动作越快,越容易引起和加剧振荡 6.积分调节可以单独使用,但调节的过程很慢。通常,积分调节和其它调节动作结合成PI或PID调节动作 Derivative微分 1.微分调节的输出与输入偏差e的变化速度成正比,e变化越大,微分调节的输出越大 2.Kd为0时,微分作用消除 3.微分调节总是力图抑制被调量的振荡 4.微分调节只能起到辅助的调节作用,可以与其它调节动作结合成PD或PID调节动作 小结 积分控制规律主要用于消除余差; 微分控制规律主要用于改善动态特性; 比例控制规律为调节器的主体; 实际调节器设有P、I、D功能,适当组合,分别可得P、PI、PD及PID调节规律。当TI置于无穷大时,积分作用消失,当 Td =0 时,微分作用消失

SLAM学习-应用齐次坐标实现矩形平移

任务 了解齐次坐标在三维空间的优势,以及在计算机图形学中的应用后,进行实战练习:利用键盘读取方向输入,控制矩形平移,其中矩形的坐标以齐次坐标形式表达. 齐次坐标 优势 便于表达某点是否在直线上 表达直线和直线交点,平面和平面交线 区分向量和点 能表示无穷远 欧式变换中的旋转和平移:由加法到乘法 注意问题 旋转和平移先后顺序有区别 经过了坐标变换之后: 缩放变换不改变坐标轴的走向,也不改变原点的位置,所以两个坐标系仍然重合。 旋转变换改变坐标轴的走向,但不改变原点的位置,所以两个坐标系坐标轴不再处于相同走向。 平移变换不改变坐标轴走向,但改变原点位置,两个坐标系原点不再重合。 坐标变换的顺序必须是: 缩放->旋转->平移 实际演练 完整代码 实现效果 参考文章 从零开始一起学习SLAM | 为什么要用齐次坐标? 齐次坐标的理解 2D Translation in Computer Graphics | Definition | Examples Eigen学习(六)高级初始化 【OpenCv】cvWaitKey获取键盘值 OpenCV doc of waitKey()

SLAM学习-C++新特性

任务 请使用C++新特性改写以下函数。该函数功能:将一组无序的坐标按照“Z”字形排序,并输出。 本程序学习目标:熟悉C++新特性(简化循环、自动类型推导、列表初始化、lambda函数) 题目来源: 从零开始一起学习SLAM | C++新特性要不要学? sort()函数 定义在 algorithm 头文件中的函数模板 sort() 默认会将元素段排成升序 对[first,second)之间的元素进行排序,需要能提供随机访问迭代器的容器如vector,array, deque等.如果提供comp比较器函数,便可根据该函数的要求排序. comp/cmp 可以直接通过<algorithm>中提供的equal_to<Type>、not_equal_to<Type>、greater<Type>、greater_equal<Type>、less<Type>、less_equal<Type>库函数实现不同方式 的排序. 也可以通过自定义cmp()实现非基本数据类型的比较方式定义,如下面例子所示,实现: 首先比较第一位大小,小者在前 若第一位相同,再比较第二位 完整代码 结果展示 优化 参考博文C++排序函数中cmp()比较函数详解 思考:int 和const int&有什么区别呢?原来:作为函数参数:int这种写法是值传递,const int&则是引用传递。“值传递”——由于函数将自动产生临时变量用于复制该参数,效率较低。“引用传递”仅借用一下参数的别名而已,不需要产生临时对象。效率较高。tips:“引用传递”有可能改变参数,const修饰可以解决这个问题。 可以在cmp()的定义处采用引用传递,即: 参考文章 C++ sort(STL sort)排序算法详解 sort-C++ reference c++sort函数的使用总结 C++排序函数中cmp()比较函数详解

SLAM学习-文件按序批量重命名

任务 我们知道SLAM是处理序列图像的,有时候需要格式化的图像名字用作输入。前面提到的TUM的RGB-D数据集中图像是根据时间命名的,请从下面链接下载数据集fr1/desk https://vision.in.tum.de/data/datasets/rgbd-dataset/download# 并解压。请编程实现将文件夹/rgb下以时间命名的序列图片重新命名为0000-9999的格式。 题目来源:从零开始一起学习SLAM | 学习SLAM到底需要学什么?-计算机视觉life Linux下C++实现文件批量重命名 获取所有文件名findFileNames 虽然给出DIR为__dirstream的别名,但在本地的头文件中寻找不到后者的定义,是不透明的数据类型.dirent结构体: 首先我们要弄清楚目录文件(directory file)的概念:这种文件包含了其他文件的名字以及指向与这些文件有关的信息的指针(摘自《UNIX环境高级编程(第二版)》)。1 当使用readdir(pDir)时,pDir中指向文件指针后移,通过rewinddir(pDir)可以复位.3 c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同.(其实它指向的是string对象内部真正的char缓冲区),所以返回const,以防止用户的修改。这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。2对于strcmp()函数,需要const char*类型的输入,因此可以通过c_str()将string类型变量得到该类型内容 此外,可以通过递归访问一个路径下包括子目录在内的所有文件,如注释所示. 批量重命名bulkRename 由于题目要求修改的数字需要补零,因此封装函数fillNum()完成工作.5 ‘setw’ is not a member of ‘std’ 需要引入头文件iomanip 使用iterator遍历所有文件名 可以通过sort()函数将vector容器中的文件名排序,需要头文件<algorithm>6 通过函数rename()将系统文件重命名,需要头文件<cstdlib>4 效果展示 完整代码 参考 [1] Linux下DIR,dirent,stat等结构体详解 [2] c++ string.c_str()小结 [3] C语言readdir()函数:读取目录函数 [4] C++修改文件名 [5] 字符串前面自动补零? [6] C++ 中vector的使用方法