精华内容
下载资源
问答
  • 什么算法工程师也叫调狗?

    千次阅读 2019-01-24 10:47:18
    这位是广东仲恺毕业算法工程师。...算法工程师都自嘲自己为调师、调狗、特征猪、指标奴。 这就和我们常常说的产品汪、运营喵、程序猿,是一样一样的。   算法工程师的工作流水帐   下面这部分的...

    这位是广东仲恺毕业算法工程师。

    曾在广州棒谷(跨境电商)工作,近期入职环球易购(跨境电商)

    还记得上一篇文章中提及到当算法工程师发现导航的时间和实际时间有差异时会做什么吗?

    没错,就是要调整其算法中的参数。

    算法工程师都自嘲自己为调参师、调参狗、特征猪、指标奴。

    这就和我们常常说的产品汪、运营喵、程序猿,是一样一样的。

     


    算法工程师的工作流水帐

     

    下面这部分的流水帐,不建议你们看,可直接路过看图。

    1. 接到一个项目之后心潮澎湃,脑子里马上闪现出faster rcnn、resnet、mask rcnn等各种牛逼的算法。
    2. 结果发现图片都不知道存在哪……于是反馈给产品经理,开了一通会议,确定图片数据库在某个位置,准备读表爬虫!
    3. 结果发现表的信息是乱七八糟的,一张表里面有图片链接,但没有这个图片的标签信息;另一张表里面有标签信息,但又没有图片链接。找了许久才发现两张表可以用图片id来结合,行吧,不就是查表的事情,写一堆代码把这些信息整理起来吧!
    4. 花了一天终于整理出图片链接的csv了,交给爬虫组爬了三天三夜,期间在YY到时图片下下来之后可以用什么算法。
    5. 拿到图片了,发现类别有了,但是bbox、关键点坐标信息都没有啊!咋整,上网找了个labelme自己整个1000张用着先呗,然后花了两天整了少量图片出来,期间还要劝服同事帮忙。
    6. 剩下的图片交给标注员去标注。接着就是根据前两天YY到的算法,上github找找有没有现成的模型,然后git clone。修改了一点输入输出,用公共数据集顺利跑通!看来还是不错的嘛!
    7. 回头把自己的数据放进去试试,简直一塌糊涂,那是当然的。现在就得回去仔细研究论文,看看作者的各种实现细节,然后魔改模型finetune。再次测试,咦,有点效果喔
    8. 这时候领导紧急开了个会议,说现在目标有点改变,我们往另一个方向走吧。
    9. 开始研究这个领域的所有经典论文,每篇论文都看上好几次,看到最后几乎把整个领域的主要脉络摸清了,然后磨刀霍霍向模型!
    10. 国际惯例先找github,但是很不幸我想要的算法并没有开源实现,那我来做第一个吧!
    11. 马上照着菜单(论文),啪啪啪构建proposal模型,各种自定义层结构,特殊的loss function,菜单中提到的weight decay、learning rate decrease,几乎把论文所有角落的细节都翻遍了,目前为止进度还行,但是慢着!论文里提到的一个层,作者只是一笔带过了,没详细说明这是怎么实现的!
    12. 都到这地步了还能放弃?开玩笑,立刻照着related work那一章提到的所有论文寻找线索,于是各种谷歌github知乎stackoverflow,终于弄懂了这个层的数学原理!
    13. 好不容易把模型复现出来了,好家伙,开始用标注员准备好的数据来训练。
    14. 慢着,这loss曲线不对劲啊?为啥会是直线,而且一轮收敛?不不不,肯定哪里出了错误,我得把代码重头检查一遍!
    15. 费好大劲终于找出bug,代码也顺利跑通了,然后进入各种调参无限死循环。
    16. 老板:那个,我们决定还是换个方向吧,需求变了

    从土黄色的Justin Ho开始,到黄色的数据异常及调参,则是整个算法工作的闭环。

    这基本上是整个图像识别算法工程师,大致的工作流。

     

    一句话:

    定义问题-数据预处理(ETL/特征工程/特征筛选等)-模型评估-模型训练及优化-应用


    举2个例子

     

    假设

    Eno想要买一个杯子

    它是长成这样

    打开淘宝拍照搜商品

    哇!!!

    有没有发现

    发现11个点星星

    组成星座图

    自动识别出:相似马克杯/杯子

    点击查看

     

    一模一样

    黑外壳

    白内衬

    大耳朵

    Eno选了一家商店进行购买

    交易新增量为1

     


     

    过两天Eno老婆生日,之前其老婆在商场里看中了一条皮裤,大约是这样的。

    淘宝扫描之后,是这样的

     

    商品却是这样的

    于是,Eno就默默的关闭了淘宝

    交易新增量为0

    交易新增量为0


    这个背后,算法工程师们做了什么呢?

    • 定义问题:提高以图搜商品交易量5%
    • 数据预处理:提取1亿张杯子或皮裤的图片数据,完成特征工程及特征筛选
    • 模型评估:自己开发算法模型或使用开源算法模型
    • 模型训练及优化:看最终是否得出那个星座图
    • 应用:直接上线到淘宝上面

    从上面可以看出,显然杯子的算法模型训练得非常杯,而皮裤的算法模型可能还需要进一步优化,是不是特征的筛选有问题,不过至少黑色这个特征是没有问题的。

     

    本期内容就到这里,此次是以图像识别算法来举例,下期我们进行到第三个问题:算法工程师的分类等交易新增量为0


    这个背后,算法工程师们做了什么呢?

    • 定义问题:提高以图搜商品交易量5%
    • 数据预处理:提取1亿张杯子或皮裤的图片数据,完成特征工程及特征筛选
    • 模型评估:自己开发算法模型或使用开源算法模型
    • 模型训练及优化:看最终是否得出那个星座图
    • 应用:直接上线到淘宝上面

    从上面可以看出,显然杯子的算法模型训练得非常杯,而皮裤的算法模型可能还需要进一步优化,是不是特征的筛选有问题,不过至少黑色这个特征是没有问题的。

     

    本期内容就到这里,此次是以图像识别算法来举例,下期我们进行到第三个问题:算法工程师的分类等


    名词通俗解释

     

    CV:

    Compute Vision,计算机视觉,(这可不是HR眼中的那个CV哦)

     

    关键节点信息:

    还记得马克杯上的星座图式的点吗?其实我们知道整个图片都是由一个又一个图素组成,每个相素都是有坐标的。这些坐标,就是关键节点信息的一种。

    RGB的色系,也是关键节点信息

     

    特征工程:

    获取关键节点信息的过程,就是特征工程

     

    特征筛选:

    将无关的关键节点信息删除,以免影响算法的结果。比如马克杯,如果其扫描出背景颜色的信息作为特征,可能会出现灰色的马克杯。

    RCNN 目标检测技术

     

    我们只要理解,将图片切割成不同的区域,然后将区域中的关键节点信息放入到CNN(卷积网络),再通过CNN进行判定,哪个部分是人。

     

    CNN:

    简单理解为,假设我们使用Photoshop做设计时,我们需要把不同的图片放在不同的图层。这样,我们可以把不相关的图层进行隐藏,做好目标图层的设计,再放其他部分放出来,这样我们可以更专注设计,而不会受其他图层的干扰。CNN,大致的意思也是类似的吧。

     

    RESNET(CNN)残差网络

     

    用一张图解释会比较好,柱状图是误差值。

    ResNet 层次是152层,而之前的GoogleNet 才22 层,VGG才19层。(只是个名字)

    一种误差更小的CNN模型。

    1080P的视频为什么更清晰,480P的视频为什么会差一些,大致是因为像素差一些。

    题外话

    提出ResNet模型的人是一个中国人,何凯明。

    2003年广东省高考理科状元,2007年清华本科,2011年香港中文大学博士。

    其导师孙剑博士,旷视科技(Face++)首席科学家。

     

    题目

     

    特征工程和特征筛选,与HR领域的什么工作最相似?

    展开全文
  • 关于CSDN"原力计划"活动说明

    万次阅读 多人点赞 2019-10-23 14:54:41
    优先获得CSDN主办会议特邀会名额; 更多权益将陆续推出… 参与条件: 账号类型【个人】 参与内容为投稿者原创、不得洗稿抄袭 字数超过2000字【含代码及图片】 参与方式: 声明【原创...

    在这个内容为王的互联网时代,如何让优质的内容展现到观看者的面前,让别人喜欢你的内容或者喜欢你的人。CSDN社区作为一家覆盖了国内90%的IT从业者的技术社区,重磅推出“原力计划”,以挖掘和争夺技术原创实力作者及团队为核心目标,鼓励和扶持原创、高质量内容产生为核心的策划。以社区的“高覆盖、高流量”的特性,带来“水、养分、土壤”的供给,点燃内容原创者的无尽可能。
    在这里插入图片描述

    CSDN“原力计划”英雄榜

    10月24日,CSDN将发布“原力计划”,CSDN博主可报名参与“CSDN原力计划英雄榜”,我们将在12月24后公布第一季“CSDN‘原力计划’英雄榜”结果。与此同时,在活动期间选取优质内容作者提供流量扶持,奖金/奖品设置。

    原力计划-个人英雄榜

    “CSDN‘原力计划’个人英雄榜”是CSDN社区为鼓励原创博主推出的创作激励活动,社区将根据内容质量进行评选,活动旨在帮助更多技术爱好者提供扩大影响力平台。

    个人英雄榜评选形式及奖项:【稿费或礼品形式待定】

    • 每周优质博文奖:每周奖励5-100篇博文,每篇奖励稿费50元,每篇给予10万的流量曝光,并在周二发布上周的优质博文榜单;
    • 月度优质博文奖:每月奖励10-50篇博文,每篇奖励稿费300元,每篇给予30万的流量曝光,,并在下月的第一周发布上月的优质博文榜单;
    • 月度优秀博主奖:每月10名,入选CSDN社区月度博主英雄榜,奖励2020年CSDN主办的全年大会门票套票价值20000元;

    “CSDN‘原力计划’个人英雄榜”获奖者-6大权益

    • 流量扶持:每篇获得不少于10万的流量曝光;

    • 原创作者获得“原力计划”荣誉勋章;

    • 周/月优秀榜单博文均获得以下推荐资源,触达数千万用户;

      • 1)CSDN网站首页推荐;
      • 2)CSDNAPP首页推荐;
      • 3)月度优秀博文有机会获得CSDN微信公号推广机会;
    • TOP月度博主受邀参与CSDN社区独家访谈活动;

    • 邀请加入“原力计划-个人英雄群”,获得官方支持、优先推荐及资源共享;

    • 优先获得CSDN主办会议特邀参会名额;

    • 更多权益将陆续推出…

    参与条件:

    • 账号类型【个人】
    • 参与内容为投稿者原创、不得洗稿抄袭
    • 字数超过2000字【含代码及图片】

    参与方式:

    • 声明【原创博客】,在提交博客页面勾选「加入原力计划」即可参与;
      在这里插入图片描述
    • CSDN将从参加“原力计划”的申请博文中,挑选优质博文进行推荐;
    • 按周及月度评选,参与活动的文章必须是投稿者原创;

    评选规则:

    CSDN“原力计划”英雄榜【每周优质博文】评选要求:

    • 内容载体为「文章」,且字数在2000字以上【含代码及图片】;
    • 内容在CSDN社区为投稿者原创博文,且已声明「原创」;
    • 专业技术、实战经验、程序人生等与开发者学习成长相关的技术文章优先入选。非短讯、非软文引流等相关内容,立场中立,观点客观,不偏激不臆测;
    • 依据博文发布、博文点赞、收藏、评论、热度等多维度数据,按照权重计算出综合指标;
    • 内容言之有物,排版美观优先;标题党、错别字多、营销软文、黑稿、通告类不予奖励。

    CSDN“原力计划”英雄榜【月度优质博文】评选要求:

    • 内容为深度技术文章,并获得【每周优质博客】奖项;
    • 专业技术、实战经验、程序人生、职场心得等与开发者学习成长相关的技术文章优先入选,非短信息和快讯类内容,立场中立,观点客观,不偏激不臆测;
    • 依据博文发布、博文点赞、收藏、评论、热度等多维度数据,按照权重计算出综合指标;
    • 内容言之有物,排版美观优先;标题党、错别字多、营销软文、黑稿、通告类不予奖励。

    CSDN“原力计划”英雄榜【月度优质博主】评选要求:

    • 当月至少获得1次【CSDN“原力计划”英雄榜】奖励;
    • 综合内容质量、阅读量、收藏量、点赞量、分享量、粉丝增长数、活跃度等综合数据指标评选。

    原力计划-华为技术博文英雄榜

    月度优质博文奖

    1、内容为技术文章,围绕华为相关的产品和技术;
    2、专业技术、实战经验、程序人生、实践心得等与开发者学习成长相关的技术文章优先入选,非短信息和快讯类内容,立场中立,观点客观,不偏激不臆测;
    3、依据博文发布、博文点赞、收藏、评论、热度等多维度数据,按照权重计算出综合指标;
    4、内容言之有物,排版美观优先;标题党、错别字多、营销软文、黑稿、通告类不予奖励。

    月度最佳参与奖

    1、内容为围绕华为相关的产品和技术的文章;
    2、技术分享、产品体验、观点分享等与开发者学习成长相关的技术文章优先入选,立场中立,观点客观,不偏激不臆测;
    3、依据博文阅读量等权重计算出综合指标;
    4、内容言之有物,排版美观优先;标题党、错别字多、营销软文、黑稿、通告类不予奖励。

    奖品:

    月度优质博文奖 赠送价值109元的华为手环3e 10-20个
    在这里插入图片描述

    月度最佳参与奖 赠送价值79元/个的华为mini体重秤 50-100个

    在这里插入图片描述

    参与方式:

    把参与文章统一发送至邮箱:zhanghy#csdn.net(#号换成@),备注华为英雄榜博文投稿!

    原力计划-企业英雄榜

    “CSDN‘原力计划’企业英雄榜”是CSDN社区为鼓励企业博主推出的创作激励活动,社区将根据企业博客内容质量进行评选,旨在帮助更多企业和机构以优质内容,吸引更多开发者关注,从而扩大其技术品牌和市场影响力。

    参与条件:

    • 账号类型【企业博客】
    • 参与内容为【原创文章】

    参与方式:

    • 声明【原创博客】,在提交博客页面勾选「加入原力计划」即可参与;
    • CSDN将从参加“原力计划”的申请博文中,挑选优质博文进行推荐;
    • 参与活动的文章必须是原创。

    企业奖励详情

    • 每周优质博文奖:每篇给予10万的曝光流量;
    • 月度优质企业英雄榜奖励:每月评选TOP前10名,每篇奖励20万曝光流量。

    CSDN‘原力计划 企业英雄榜”6大权益

    • 流量扶持:企业英雄榜获奖者每篇将得到10-20万流量曝光;

    • 账号博主将获得「“原力计划”荣誉勋章」;

    • 原力计划企业英雄榜TOP10榜单每月发布并进行推广宣传;

    • TOP10优秀企业博客内容均有机会获得以下推荐资源:

      • 1)CSDN网站首页置顶推荐;

      • 2)CSDNAPP首页推荐;

    • 优秀企业将有机会优先获得CSDN专访;

    • 优秀企业均优先受邀参与CSDN线上公开课;

    • 更多权益将陆续推出…

    评选要求:

    “CSDN原创企业博客英雄榜”评选要求:

    • 当月声明【原创】的内容不少于4篇;
    • 综合考量内容质量、阅读量、月关注量等各项数据指标。

    榜单

    企业榜

    FAQ:

    针对以上内容,如果您有异议或者更好的反馈,欢迎联系客服:

    客服QQ
    客服邮箱;kefu#csdn.net(把#换成@)

    声明:
    所有博文禁止存在刷量的行为,一经发现将取消参加CSDN“原力计划”活动;
    活动最终解释权归CSDN所有。

    展开全文
  • 分布式系统概念

    万次阅读 多人点赞 2018-11-15 16:25:36
    Redis: 我们讲缓存,或者内存数据库,小巧强大,什么数据适合放在redis也就是缓存中,一个是经常查询的,需要频繁磁盘io的,例如有个快件系统,有个需求是当快件状态为异常时候,需要发送邮件提醒给系统管理员。...

    一 分布式系统

    分布式系统的由来:
    国内来讲,移动互联网的爆发伴随着分布式系统的突现,移动互联网最大的特点是2(to)c的o2o产品越来越多,这跟传统2B的系统最大区别就是用户量的不同,2C系统的用户量远远要高于2b系统,这就对系统提出了各种各样的高标准,响应时间,性能,灾备,吞吐量等等,各种分布式技术也是为了这些标准而服务。
    分布式架构的应用:
    分布式文件系统
    分布式缓存系统
    分布式数据库
    分布式WebService
    分布式计算

    举例说明:
    分布式文件系统: 出名的有 Hadoop 的HDFS ,还有 google的 GFS , 淘宝的 TFS 等

    分布式缓存系统:memcache , hbase , mongdb 等

    分布式数据库 : MySQL , Mariadb, PostgreSQL 等

    以分布式MySQL数据库中间件MyCat 为例子,MySQL 在现在电商以及互联网公司的应用非常多,一个是因为他的免费开源,另外一个原因是因为分布式系统的水平可扩展性,随着移动互联网用户的暴增,互联网公司,像淘宝,天猫,唯品会等电商都采用分布式系统应对用户的高并发量以及大数据量的存储。
    而在Mycat的商业案例中,有对中国移动的账单结算项目中,应用实时处理高峰期每天2亿的数据量,在对物联网的项目中,实现处理高达26亿的数据量,并提供实时查询的接口。
    在这里插入图片描述

    二 大型分布式网站系统的性能要求

    1.响应时间(Response time)

      2-5-8原则:(据统计当网站慢一秒就会流失十分之一的客户)
    
      当用户再2-5秒之间得到响应时,会感觉系统的响应速度还可以;
    
      当用户再5-8秒内得到响应时,感觉蛮,但是还可以接受;
    
      当用户大于8秒内得到响应时,感觉无法接受;
    

    2.吞吐量(Throughput)

     指的是在单位时间内客户端和服务器成功传送数据的数量;
    

    3.资源使用率(Resource utilization)

      常见的有:cpu占用率、内存使用率、磁盘I/O、网络I/O;
    

    4.每秒点击数(Hits per Second)

      客户端每秒向服务器提交的请求数量,如果客户端发出的请求数量越多,与之相对的平均吞吐量也应该越大;
    

    5.并发用户数(Concurrent users)

      客户端的同一批用户同时执行一个操作的数量。
    

    三 Java后台技术

    在这里插入图片描述

    四 技术名词解释

    1. 分布式和集群

      分布式和集群在通常情况下不做严格区分,正如同并发和并行一样,应用情况下很少会去考究它的区别,许多大公司面试也直接问分布式集群怎样怎样,一般都拿等同来讲了。在这里只在概念上做一下区别,使大家更合理的去理解,没有对错之分。

      分布式:一个电商系统,用户模块部署在server1, 订单模块部署在server2, 促销模块部署在server3, 商品模块部署在server4,他们之间通过远程rpc实现服务调用,这就叫分布式。强调的是不同功能模块,单独部署在不同的server上,所有server加起来是一个完整的系统。

      集群:更多强调的是灾备,一个电商系统,完整的部署在server1上一个,完成的部署在server2上一个,server1宕机后,server2仍然可以正常提供请求服务,这叫集群。同样对于某一功能模块,比如用户模块部署在server1上,同样部署在server2上,也叫做集群。分布式系统的每个功能模块节点,都可以用多机做成集群。

      抽象问题具体化:拿做菜示例,假如一个厨师做菜要经历切菜,炒菜两个功能,饭店为了提高速度招了两个厨师,每个厨师的工作一样,都是切菜,炒菜,这是集群。还有另一种方法提高效率,饭店招了一个切菜师傅,配合厨师,厨师不管切菜,只管炒菜了,和切菜师傅共同配合把菜做好,这叫分布式。

    2. Nginx

      作用是反向代理和负载均衡。

      反向代理是指请求真实是到server1的,但是系统中为了统一或者做比如单点登录,会在server2服务器上安装一个nginx,里面配置到server1的反向代理,那么之后请求url就可以写server2的地址,发出后到server2, server2会转发到server1上,类似一种代理的模式。

      负载均衡是指如果一个系统的请求很多,我们可以把请求转发到不同的服务器上,用来分流。就类似于接了一个水管放水,水流量很大时候,水压大很可能会让一个水管爆炸,这时候接三个水管,就没问题了(这三个水管就是一个集群)。类似的在nginx服务器中配了3个tomcat服务器,每个tomcat服务器上都部署了整个系统,那么当请求数大的时候,可以分发到不同的tomcat。(其实这里每个tomcat上部署同一个功能模块也叫集群)

    3. Java在分布式下的通信
      在这里插入图片描述
      RPC(远程过程调用)
      对于分布式系统来讲,tomcat1上部署了用户模块,tomcat2上部署了订单模块,当用户下单时,请求到tomcat2,这时候可能要判断这个用户是否是vip,或者是否有优惠券,这些方法是在tomcat1用户模块上的,那么tomcat2调用tomcat1的服务获取这些信息,就叫rpc调用。

      常见的rpc框架:轻量级的hessian, 阿里dubbo(当当dubbox), 新浪Motan, apache的Thrift,google的grpc, 百度的brpc, 腾讯的tars。

      rpc调用底层涉及到对象的序列化,反序列化,http/tcp传输,网络异步传输netty。

    4. 消息中间件(MQ)

      mq消息中间件在分布式系统中的作用有很多,但是经常用到的还是异步解耦。

      比如天猫下单流程,当用户支付后,后台接口执行的操作可能包括:1 验签,2 支付密码校验,3 扣库存,4 用户积分增加等等操作,其实我们希望的是2操作执行成功后立即给用户结果提示,而不是等到后续各个操作完成后才去提示,因为后续的操作往往大部分是rpc调用,方法执行时间相对较长。另外对于下单支付这个操作,3和4是后续业务的需要,在设计上不能和下单支付本身出现强耦合度。所以这里我们可以引入mq解决,也就是说1和2执行完成后,生产者只需要通知下3和4,把后续的操作扔给消息队列,立即返回。这里的mq起到的作用一个是异步调用,一个是解耦。

    5. NoSQL(非关系型数据库)

      NoSQL是所有非关系型数据库的统称,在分布式系统中用到很多,主要用来提高QPS(query per second)。

      Redis: 我们讲缓存,或者内存数据库,小巧强大,什么数据适合放在redis也就是缓存中,一个是经常查询的,需要频繁磁盘io的,例如有个快件系统,有个需求是当快件状态为异常时候,需要发送邮件提醒给系统管理员。接口入参是快件id,通常做法我们需要拿到id,去数据库查状态,然后发送,但是快件基数很大时候每天的问题件也可能会很多,接口调用频繁时候就需要改进做法,这时我们可以把快件状态信息放在redis里面,key是快件id, value是快进状态,每次进入接口时候直接redis里面取status就可以,速度很快。另一个是查询数据缓慢的,可以放在缓存中。

      MongoDB: 可称为分布式文件数据库,可用来存储海量数据,它是NoSQL里面最像关系型数据库的,它的数据的存储形式可以就理解为json格式。之前曾经两次用到过mongoDB,一次是系统里面有个实时监控设备电流电压的功能,硬件设备实时会把数据同步到数据库里面,我们系统2-3s需要去拉次列表。另一个系统是一个轻型的行业IM工具,每天会有很大的聊天数据存储,我们直接用了mongoDB存储,后来系统相当稳定,从来没有出现过性能瓶颈。

    展开全文
  • px4官网调指南 多旋翼无人机PID调指南

    万次阅读 多人点赞 2017-02-13 21:31:39
    译文部分:多旋翼无人机PID调指南不用碳化纤维或增强碳化纤维桨调整多轴,不使用损坏的桨片。 出于安全考虑,系统默认增益都设置的比较小。请增加增益以便获取更好的控制响应。 本指导方案适用于所有的多轴飞行...

    译文部分:

    多旋翼无人机PID调参指南

    不用碳化纤维或增强碳化纤维桨调整多轴,不使用损坏的桨片。
    出于安全考虑,系统默认增益都设置的比较小。请增加增益以便获取更好的控制响应。
    本指导方案适用于所有的多轴飞行器。比例,积分,微分控制(PID)是最广泛的控制技术。对于典型的预估性控制而言,PID控制实质上优于执行性控制技术,比如,线性二次型调节器(Linear Quadratic Regulator) 与线性二次高斯(linear quadratic gaussian),因为这些技术都或多或少的需要系统的精确模型,所以得不到广泛的使用。PX4的目的是在个人电脑上实现设备的尽可能快速的控制,因为不是所有的被控对象的系统模型都是可获得的,因此PID调参是非常有意义的,并且PID控制适用于所有情况。
    介绍
    PX4采用双闭环PID控制,其外环为角度(angle)控制,角度值是由滤波与姿态解算后得到的欧拉角,有延迟且存在误差,所以单纯的单闭环无法实现姿态控制过程。所以需要引入内环,内环选择角速度(rate)控制,角速度由陀螺仪直接测量得到,误差小,响应快,延迟短。所以,综上,整个控制系统外环选择纯比例控制,没有I,D,所以参数只有三个方向的P;内环选择PID控制器,参数有P,I,D三个量;同时方向控制上还引入了前馈控制,所以还有一个参数为MC_YAW_FF
    file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wps4638.tmp.jpg
    PX4地面站外环执行的飞行器角度控制 ,依靠的参数有:
    Roll control (MC_ROLL_P)
    Pitch control (MC_PITCH_P)
    Yaw control (MC_YAW_P)
    内环使用三个独立的PID控制器实现飞行器姿态控制:
    Roll rate control (MC_ROLLRATE_P, MC_ROLLRATE_I, MC_ROLLRATE_D)
    Pitch rate control (MC_PITCHRATE_P, MC_PITCHRATE_I, MC_PITCHRATE_D)
    Yaw rate control (MC_YAWRATE_P, MC_YAWRATE_I, MC_YAWRATE_D)
    外环输出以机身期望姿态比例为准(如果机身期望姿态为水平状态但是当前横滚方向有三十度的倾角,那么此时控制器将以每次60度输出)。内环速率控制改变电机转速以便飞行器以期望角速率旋转。
    实质上增益具有直观的物理意义,比如,如果参数MC_ROLL_P增益为6,那么飞行器将以3弧度(170度)补偿0.5弧度(30度)的偏差。如果内环MC_ROLLRATE_P增益为0.1,那么内环输出为3乘0.1=0.3(外环输出输入给内环,进过PID控制后输出,若只有P=0.1,输入3,那么输出0.3)这意味着飞行器将降低一侧电机的转速,增加另一侧电机的转速使其恢复水平状态。
    同样的,对于MC_YAW_FF参数,用于控制多大的用户输入用于前馈补偿给偏航速率控制器。0意味着非常慢的控制。控制器只能在检测到偏航位置误差时才开始修正。1意味着快速的响应,但是有超调,控制将执行的非常快速,误差总是保持在0附近。
    电机幅值限制
    正如上面的例子所展示的,在某些情况下会出现某种可能使得电机得到一个比其上限还要大的输入或者一个比0还要小的输入。如果这种情况发生,电机违背控制模型产生的升力可能会使飞行器翻筋斗。为了防止这种情况发生,PX4中加入了油门限幅。如果其中一个电机的转速偏离安全范围,系统总体推力将被变低以便控制器输出的相关比率达到一个期望值。其结果会是电机转速不会增加甚至降低,但是永远不会翻。

    第一步 准备

    首先设置所有参数到初始值。
    1 设置所有的MC_XXX_P到0(roll,pitch,yaw)
    2 除了MC_ROLLRATE_P与MC_PITCHRATE_P之外的所有MC_XXXRATE_P,I,D归零。
    3 设置MC_ROLLRATE_P与MC_PITCHRATE_P到一个很小的值,比如0.02
    4 设置MC_YAW_FF到0.5
    所有参数缓慢增加,每次增加约百分之20到30,在最后调试时甚至可以降低到百分之10,。
    注意:过大的增益(甚至仅仅比理想值多1.5到2倍)都可能导致大的抖动。

    第二步 稳定俯仰和翻滚速率

    P增益调节
    参数:MC_ROLLRATE_P, MC_PITCHRATE_P
    如果飞行器结构对称,那么ROLL与PITCH的概念应该等价,如果不对称,则应该分开讨论。
    把飞行器拿在手中,中油门上下,到刚好平衡重力。向俯仰或翻滚方向上稍做倾斜,观察反应。(我不明白这个是怎么实现的,用手托着吧,飞行器平稳时升力最大,不会飞起来,那么有偏角了升力减小,更不会飞起来。但是这也太危险了吧,建议用细绳拉住两颗电机,不要用手)飞行器应该温和的抵抗倾斜过程,但保持倾斜角之后不会尝试恢复水平姿态。如果出现震荡,降低P。如果反应正确但非常慢,调大P直到开始出现抖动。重新调回P到稍稍有一点抖动甚至不再抖动(大概回调百分之十),到稍稍超调,典型值一般为0.1。
    D增益调节
    参数:MC_ROLLRATE_D, MC_PITCHRATE_D
    如果参数处于某一值时,飞行器稍微抖动并且P值已经适量的减少。从0.01开始缓慢增加RATE_D直到消除最后一点震荡。如果此时飞行器又一次出现抖动,那就是D值过大。(一定会出现由抖动到平稳的过程,D值再大才会再次抖动,所以调参是不能着急,一点点增加,不然可能错过理想值)一般通过调节P与D就可以得到比较良好的电机响应。RATE_D的典型值一般在0.01–0.02
    在QGoundControl可以锁定pitch与roll的速率。一定不能出现震荡,但是百分之十到二十的超调是允许的。
    I增益调节
    如果飞行器可以实现定点但是定点的位置与期望存在误差,那么增加MC_ROLLRATE_I 和MC_PITCHRATE_I(上面一句的翻译是个人想法,原句是never reach the setpoint but have an offset。我觉得它的意思是实现了悬停,但是此时的点不是想要的点,所以说,按照个人想法,I值并没有什么用处,我不会在乎悬停之后的误差)以增益MC_ROLLRATE_P的值得百分之五到百分之十开始向上增加。

    第三步 稳定翻滚与俯仰角度

    参数 MC_RATE_P, MC_RATE_P
    把飞行器拿在手中,中油门上下,到刚好平衡重力。向俯仰或翻滚方向上稍做倾斜,观察反应。飞行器应该缓慢回到水平。如果出现抖动,减小P。如果反应正确但非常慢,调大P直到开始出现抖动。最佳的反应应该是超调10%–20%后得到良好的响应。
    在QGoundControl可以锁定pitch与roll。姿态角度超调不要超过10%–20%.

    第四步 稳定航向速率

    P增益调节
    参数:MC_YAWRATE_P
    设置很小的MC_YAWRATE_P,比如0.1。
    把飞行器拿在手中,中油门上下,到刚好平衡重力。转动飞行器方向轴,观察反应。电机声音应该发生改变,飞行器应该阻碍方向变化。但是这个响应应该弱于俯仰与横滚方向,这是正常现象。如果飞行器出现抖动,减小MC_YAWRATE_P。如果响应非常剧烈甚至在小幅转动(full throttle spinning vs idle spinning propellers不懂这句什么意思),减小P。典型值大概为0.2–0.3。(四轴因为其结构,导致航向上的不灵敏,yaw-p要小于pitch与roll)
    在航向的速率控制中,如果响应非常强烈或出现震荡,会影响俯仰和横滚方向的响应。统筹调节pitch,roll,yaw达到平衡。

    第五步 稳定航向角

    把飞行器拿在手中,中油门上下,到刚好平衡重力。转动飞行器方向轴,观察反应。飞行器应该缓慢的回到初始方向。如果飞行器出现抖动,减小P。当响应正确但速度慢,增加P直到反应达到稳定,但不要出现震荡。典型值大概为2–3。
    在QGoundControl观察ATTITUDE.yaw。超调不应该超过2%–5%.小于pitch与
    Roll。(个人认为,航向上不用太较真啦,不影响另外两个就好)
    前馈补偿调节
    参数 MC_YAW_FF
    这个参数不太重要,并且可以在飞行过程中调节。但是不理想的参数会使响应变慢或过快。应该调节MC_YAW_FF使飞行器得到良好的响应过程。其有效范围0–1,典型值大概为0.8–0.9。(有时为了航拍效果考虑,可以再改小MC_YAW_FF,以便得到平滑的响应过程)
    在QGoundControl观察ATTITUDE.yaw。超调不应该超过2%–5%.小于pitch与
    Roll。

    外文部分:

    Multirotor PID Tuning Guide
    NEVER do multirotor tuning with carbon fiber or carbon fiber reinforced blades. NEVER use damaged blades.
    For SAFETY reason, the default gains are set to small value. You HAVE TO increase the gains before you can expect any control responses.
    This tutorial is valid for all multi rotor setups (AR.Drone, PWM Quads / Hexa / Octo setups). Proportional, Integral, Derivative controllers are the most widespread control technique. There are substantially better performing control techniques (LQR/LQG) from the model predictive control, since these techniques require a more or less accurate model of the system, they not as widely used. The goal of all PX4 control infrastructure is move as soon as possible on MPC, since not for all supported systems models are available, PID tuning is very relevant (and PID control sufficient for many cases).
    Introduction
    The PX4 multirotor_att_control app executes an outer loop of orientation controller, controlled by parameters:
    Roll control (MC_ROLL_P)
    Pitch control (MC_PITCH_P)
    Yaw control (MC_YAW_P)
    And an inner loop with three independent PID controllers to control the attitude rates:
    Roll rate control (MC_ROLLRATE_P, MC_ROLLRATE_I, MC_ROLLRATE_D)
    Pitch rate control (MC_PITCHRATE_P, MC_PITCHRATE_I, MC_PITCHRATE_D)
    Yaw rate control (MC_YAWRATE_P, MC_YAWRATE_I, MC_YAWRATE_D)
    The outer loop’s output are desired body rates (e.g. if the multirotor should be level but currently has 30 degrees roll, the control output will be e.g. a rotation speed of 60 degrees per second). The inner rate control loop changes the rotor motor outputs so that the copter rotates with the desired angular speed.
    The gains actually have an intuitive meaning, e.g.: if the MC_ROLL_P gain is 6.0, the copter will try to compensate 0.5 radian offset in attitude (~30 degrees) with 6 times the angular speed, i.e. 3 radians/s or ~170 degrees/s. Then if gain for the inner loop MC_ROLLRATE_P is 0.1 then thrust control output for roll will be 3 * 0.1 = 0.3. This means that it will lower the speed of rotors on one side by 30% and increase the speed on the other one to induce angular momentum in order to go back to level.
    There is also MC_YAW_FF parameter that controls how much of user input need to feed forward to yaw rate controller. 0 means very slow control, controller will start to move yaw only when sees yaw position error, 1 means very responsive control, but with some overshot, controller will move yaw immediately, always keeping yaw error near zero.
    Motor Band / Limiting
    As the above example illustrates, under certain conditions it would be possible that one motor gets an input higher than its maximum speed and another gets an input lower than zero. If this happens, the forces created by the motors violate the control model and the multi rotor will likely flip. To prevent this, the multi rotor mixers on PX4 include a band-limit. If one of the rotors leaves this safety band, the total thrust of the system is lowered so that the relative percentage that the controller did output can be satisfied. As a result the multi rotor might not climb or loose altitude a bit, but it will never flip over. The same for lower side, even if commanded roll is large, it will be scaled to not exceed commanded summary thrust and copter will not flip on takeoff at near-zero thrust.
    Step 1: Preparation
    First of all set all parameters to initial values:
    Set all MC_XXX_P to zero (ROLL, PITCH, YAW)
    Set all MC_XXXRATE_P, MC_XXXRATE_I, MC_XXXRATE_D to zero, except MC_ROLLRATE_P and MC_PITCHRATE_P
    Set MC_ROLLRATE_P and MC_PITCHRATE_P to a small value, e.g. 0.02
    Set MC_YAW_FF to 0.5
    All gains should be increased very slowly, by 20%-30% per iteration, and even 10% for final fine tuning. Note, that too large gain (even only 1.5-2 times more than optimal!) may cause very dangerous oscillations!
    Step 2: Stabilize Roll and Pitch Rates
    P Gain Tuning
    Parameters: MC_ROLLRATE_P, MC_PITCHRATE_P.
    If copter is symmetrical, then values for ROLL and PITCH should be equal, if not - then tune it separately.
    Keep the multi rotor in your hand and increase the thrust to about 50%, so that the weight is virtually zero. Tilt it in roll or pitch direction, and observe the response. It should mildly fight the motion, but it will NOT try to go back to level. If it oscillates, tune down RATE_P. Once the control response is slow but correct, increase RATE_P until it starts to oscillate. Cut back RATE_P until it does only mildly oscillate or not oscillate any more (about 10% cutback), just over-shoots. Typical value is around 0.1.
    D Gain Tuning
    Parameters: MC_ROLLRATE_D, MC_PITCHRATE_D.
    Assuming the gains are in a state where the multi rotor oscillated and RATE_P was slightly reduced. Slowly increase RATE_D, starting from 0.01. Increase RATE_D to stop the last bit of oscillation. If the motors become twitchy, the RATE_D is too large, cut it back. By playing with the magnitudes of RATE_P and RATE_D the response can be fine-tuned. Typical value is around 0.01…0.02.
    In QGroundControl you can plot roll and pitch rates (ATTITUDE.rollspeed/pitchspeed). It must not oscillate, but some overshot (10-20%) is ok.
    I Gain Tuning
    If the roll and pitch rates never reach the setpoint but have an offset, add MC_ROLLRATE_I and MC_PITCHRATE_I gains, starting at 5-10% of the MC_ROLLRATE_P gain value.
    Step 3: Stabilize Roll and Pitch Angles
    P Gain Tuning
    Parameters: MC_RATE_P, MC_RATE_P.
    Set MC_ROLL_P and MC_PITCH_P to a small value, e.g. 3
    Keep the multi rotor in your hand and increase the thrust to about 50%, so that the weight is virtually zero. Tilt it in roll or pitch direction, and observe the response. It should go slowly back to level. If it oscillates, tune down P. Once the control response is slow but correct, increase P until it starts to oscillate. Optimal responce is some overshot (~10-20%). After getting stable respone fine tune RATE_P, RATE_D again.
    In QGroundControl you can plot roll and pitch (ATTITUDE.roll/pitch) and control (ctrl0, ctrl1). Attitude angles overshot should be not more than 10-20%.
    Step 4: Stabilize Yaw Rate
    P Gain Tuning
    Parameters: MC_YAWRATE_P.
    Set MC_YAWRATE_P to small value, e.g. 0.1
    Keep the multi rotor in your hand and increase the thrust to about 50%, so that the weight is virtually zero. Turn it around its yaw axis, observe the response. The motor sound should change and the system should fight the yaw rotation. The response will be substantially weaker than roll and pitch, which is fine. If it oscillates or becomes twitchy, tune down RATE_P. If responce is very large even on small movements (full throttle spinning vs idle spinning propellers) reduce RATE_P. Typical value is around 0.2…0.3.
    The yaw rate control, if very strong or oscillating, can deteriorate the roll and pitch response. Check the total response by turning around, roll, pitch and yaw.
    Step 5: Stabilize Yaw Angle
    P Gain Tuning
    Parameters: MC_YAW_P.
    Set MC_YAW_P to a low value, e.g. 1
    Keep the multi rotor in your hand and increase the thrust to about 50%, so that the weight is virtually zero. Rotate it around yaw, and observe the response. It should go slowly back to the initial heading. If it oscillates, tune down P. Once the control response is slow but correct, increase P until the response is firm, but it does not oscillate. Typical value is around 2…3.
    Look at ATTITUDE.yaw in QGroundControl. Yaw overshot should be not more than 2-5% (less than for attitude).
    Feed Forward Tuning
    Parameters: MC_YAW_FF.
    This parameter is not critical and can be tuned in flight, in worst case yaw responce will be sluggish or too fast. Play with FF parameter to get comfortable responce. Valid range is 0…1. Typical value is 0.8…0.9. (For aerial video optimal value may be much smaller to get smooth responce.)
    Look at ATTITUDE.yaw in QGroundControl. Yaw overshot should be not more than 2-5% (less than for attitude).

    展开全文
  • STM32学习笔记(1)——STM32基础知识

    千次阅读 多人点赞 2018-08-11 10:51:13
    ❤ 2018.8.11  最近入了STM32的坑,主要是马老师又有新项目,老师看我最近有点闲(哪里闲了?),就让我来协助,之前学了一些基础的东西了,不过...○什么是STM32 ○ STM32有什么功能   ○ 开发板的硬件资...
  • JAVA构造函数(方法)

    千次阅读 多人点赞 2018-12-27 14:47:11
    一、什么是构造函数 java构造函数,也叫构造方法,是java中一种特殊的函数。函数名与类名相同,无返回值。 作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象了属性和方法。 构造函数是...
  • 贝叶斯超优化方法

    万次阅读 多人点赞 2018-08-21 13:51:57
    很多算法工程师戏谑自己是调工程师,因为他们需要在繁杂的算法参数中找到最优的组合,往往在调的过程中痛苦而漫长的度过一天。如果有一种方式可以帮助工程师找到最优的参数组合,那一定大有裨益,贝叶斯超优化...
  • 主要介绍了oracle数据库实现获取时间戳的无函数的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
  • 深度学习入门

    万次阅读 多人点赞 2017-11-05 21:23:46
    如果η太小,网络调的次数就太多,从而收敛很慢。如果η太大,容易错过了网络的参数的最优解。因此,合适的η大小,在某种程度上,还依赖于 人工经验 。 5.5 感知机的表征能力   1969年,马文·...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    C#基础教程-c#实例教程,适合初学者。 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。...
  • Python list函数

    万次阅读 多人点赞 2018-10-05 22:17:51
    创建一个空列表(无调用list函数) 2. 将字符串转换为列表 3. 将元组转换为列表 4. 将字典转换为列表 5. 将集合转换为列表 6. 将其他可迭代序列转化为列表 注意事项 1. 参数必须是可迭代序列对象 2. 无意义的转换...
  • ,因为liblinear也有自己的弱点!我们知道,逻辑回归有二元逻辑回归和多元逻辑回归。对于多元逻辑回归常见的有one-vs-rest(OvR)和many-vs-many(MvM)两种。而MvM一般比OvR分类相对准确一些。郁闷的是liblinear只...
  • 深度学习调经验

    千次阅读 多人点赞 2018-06-29 16:39:20
    知乎 深度学习调有哪些技巧?一. 初始化 有人用normal初始化cnn的参数,最后acc只能到70%多,仅仅改成xavier,acc可以到98%。二.从理解CNN网络以产生直觉去调参数的角度考虑,应该使用可视化 可视化(知乎用户 ...
  • 详解 TensorBoard-如何调

    万次阅读 2017-05-12 12:46:11
    什么是 TensorBoardTensorBoard 是 TensorFlow 上一个非常酷的功能,我们都知道神经网络很多时候就像是个黑盒子,里面到底是什么样,是什么样的结构,是怎么训练的,可能很难搞清楚,而 TensorBoard 的作用就是可以...
  • 人工调实在是太麻烦了,最近试了下水,感觉还不错,能在帮你调的同时,把可视化的工作一起给做了,简单明了。其可以可以看到当前试验的进展情况,搜索参数和效果最好的一些超参数组合。例如: 通过下面的颜色图...
  • 构造函数是一个特殊的成员函数,名字和类名相同,创建类类型对象时由编译器... } 默认构造函数全缺省和无之能出现一个,所以以下写法是的: CLOCK(int newhour=10, int newminute=10, int newsecond=10); CLOCK();
  • Bp神经网络的调(未完,待续)

    千次阅读 2019-08-13 19:45:52
    Bp神经网络的调(上)  各位数据游侠,炼丹师,由于最近项目上的数据迟迟未到,闲的无聊,so 盘一盘神经网络。虽说之前各种大大小小的网络都使用过,然而对其网络的改进工作却迟迟没有落实,所以。。。不过经过几...
  • 这篇博客讲讲对AlexNet如何调,最近因为科研的原因,对卷积神经网络进行了调,忙活了大概一两个星期,期间对AlexNet进行了全方面、多层次、宽领域的调,总结了一些调技巧,在这儿总结一下。 调的技巧,我...
  • SVC调总结+调实例

    千次阅读 2018-12-16 22:25:12
    C上升, αi\alpha_iαi​的取值范围扩大, μ∗\mu^{*}μ∗取值范围扩大, ε∗\varepsilon^*ε∗取值范围缩小,导致 w∗和b∗w^*和b^*w∗和b∗调整,以便于满足 w⋅xi+b∗w·x_i+b^*w⋅xi​+b∗从分数值(假定 ...
  • 1.子类和父类都定义了带和无构造方法,且在子类中第一行写了super(xx);并且测试类里面实例化的是子类的带构造方法,那么,此时不会先调用父类的无构造方法,而是先调用父类有构造方法再调用子类的有构造...
  • 关于jmeter的几种入方式记录

    千次阅读 2019-01-10 10:44:18
    1,csv 文件入方式 只需创建csv文件,将参数名称用逗号隔开,依次在表格的每一列输入参数值即可 2,连接数据库查询表数据进行入 这样就完成了数据库的连接,接下来就是查询需要的数据,添加JDBC request,进行...
  • 深入理解Kotlin无构造函数

    千次阅读 2020-12-23 08:24:28
    例如我们在java代码里面 调用这个one函数 参数写成 第一个小节里的 user.getName() 那就必然会报抛异常了 kotlin 的 构造函数 这里实际上是非常坑爹的一点。大家都知道 纯java的代码 如果你不写任何构造函数,...
  • 【机器学习】sklearn-SVM调

    千次阅读 2019-08-06 10:36:03
    (1)C: 目标函数的惩罚系数C,用来平衡分类间隔margin和分样本的,default C = 1.0; (2)kernel:参数选择有RBF, Linear, Poly, Sigmoid, 默认的是"RBF"; (3)degree:if you choose 'Poly' in param 2, ...
  • 中的异常处理(全局异常处理)

    千次阅读 2020-06-30 07:37:29
    发生异常,接口肯定是返回信息的。 但是之后排查很有困难,因为根本没有记录日志。 解决方案 使用异常拦截器 @ExceptionHandler和@ControllerAdvice,这里不叙述使用方法。 400异常模拟 @RequestParam(required ...
  • XGboost中的调经验

    千次阅读 2020-10-13 14:10:48
    那除了让模型更加集中于那些困难样本,采样还对模型造成了什么样的影响呢?采样会减少样本数量,而从学习曲线来看样本数量越少模型的过拟合会越严重,因为对模型来说,数据量越少模型学习越容易,学到的规则也会越...
  • 最近一直研究相机,看一些相机位姿和相机外,对从世界坐标系和相机坐标系进行对应总是记,所以记录: 假设相机 相机的位姿定义为:
  • 深度学习调经验汇总

    千次阅读 多人点赞 2019-08-16 18:10:54
    相信大家在做深度学习时对调尤为无奈,经验不足乱调一通,或者参数太多无从下手,我也如此。希望通过此文汇总网上一些调的经验方法,供大家参考。此文会对网上每一篇调文章做简练的总结与提炼,以此为此文的...
  • 最近尝试用OpenCV来标定工业相机,先下载了OpenCV自带的的标定的例程camera_calibration.cpp,建立了一个同名的win32空项目,把代码拷进去,然后设置项目的include属性,lib库,反正是项目编译成功了!...
  • 如果在实体类里面自定义构造方法,没有写默认无构造方法,然后初始化类的对象,调用自定义构造方法的时候,就会报如下错误: 解决办法是:在实体类中加入无参数构造方法即可,如下图 ...
  • Python中没有给需要传入参数的函数传会发生什么?这个问题可能很多人都没有想过,因为我们在设计和使用程序的时候通常不会这么做,而我思考这个问题也是来源于一个师兄给我发的Festo开发者网站的登陆问题,代码很...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 61,217
精华内容 24,486
关键字:

参什么错