1.NAV2-Velocity Smoother 速度平滑器理解
2.ä»VVeboTableViewDemoå°YYAsyncLayerï¼ä¸ï¼
3.MyBatis-Plus代码生成器(3.5.1版本)
4.请问谁会在fluent中用UDF编一个进口速度为抛物线或对数分布,源码麻烦了
NAV2-Velocity Smoother 速度平滑器理解
NAV2 Velocity Smoother 是源码一个用于平滑由 NAV2 框架发送给机器人控制器速度的功能包。主要目的源码是通过平滑加速减少机器人电机和硬件控制器的磨损。平滑处理包括对速度、源码加速度和死区的源码控制。个人理解其核心功能有以下几点:
1. 确保发布的源码计算机源码与补码转化速度在容许的速度区间内。
2. 保证指令速度与机器人当前速度所计算得到的源码加速度在容许的区间内。
3. 在[x,源码 y, theta]坐标轴上考虑同比例变化。
4. 考虑闭环控制,源码通过使用 odometry 数据来保证平滑过程的源码准确性。
Velocity Smoother 参数设定如下:
1. **smoothing_frequency**:设置平滑频率(Hz),源码决定如何使用最后接收到的源码速度命令进行速度、加速度和死区约束的源码星辰传说源码平滑处理。根据局部轨迹规划器的源码速率调整平滑效果,设置较高频率时进行插值并提供平滑的源码硬件控制命令。
2. **scale_velocities**:是否按照同比例调整其他速度组件,以适应加速限制带来的变化。确保所有组件方向一致,同时严格遵守加速限制,即使这意味着稍微偏离命令轨迹。
3. **feedback**:使用当前状态反馈,OPEN_LOOP 模式下使用上一次发布的速度作为当前速度,适合开环控制;CLOSED_LOOP 模式下使用 odometry 信息估计速度,要求 odometry 高速率低延迟。
4. **max_velocity**:在[x,影像图源码 y, theta]轴上的最大速度。
5. **min_velocity**:在[x, y, theta]轴上的最小速度,且为负值,表示逆向。
6. **deadband_velocity**:发送给硬件控制器的最小速度,防止由于无法达到该速度而损坏硬件控制器的情况。
7. **velocity_timeout**:速度接收的超时时间,即原始速度接收频率。
8. **max_accel**:每个轴[x, y, theta]上的最大加速度。
9. **max_decel**:每个轴[x, y, theta]上的最小减速度,应为负值。
. **odom_topic**:用于闭环控制的 odometry 主题。
. **odom_duration**:在闭环模式下,小黄鸟源码缓冲 odometry 命令以估计机器人速度的时间。
源码注解涉及的主要函数为 void VelocitySmoother::smootherTimer(),该函数接收由局部路径规划器或运动控制器发布的速度指令,并发布经过平滑处理后的速度。
ä»VVeboTableViewDemoå°YYAsyncLayerï¼ä¸ï¼
ç¥é VVeboTableViewDemo å ¶å®å¾ä¹ äºï¼ä¸ç´æ³ç 究ä¸ä¸ï¼æè¿ç»äºææ¶é´äºï¼å° VVeboTableViewDemo ç¨Swiftåäºä¸éï¼ VVeboTableViewDemo.swift ï¼,è±äºä¸¤ä¸ªå¨å¯¹iOSä¼åçä¸ç³»åæç« é读äºè³å°ä¸éï¼åç°å®ä»¬å¯¹ä¼åçç¹æ»ç»çå¾æ£ï¼èä¸å¤§å¤ä¸éåæè¿æ ·çå°èãåå¦è¿æ ·çé®é¢ï¼
é¦å çä¸ä¸VVeboTableViewDemoçç»æï¼ç±äºæå·²ç»æå®ç¿»è¯æäºSwiftï¼æä¸é¢æ¯ç¨Swiftçåæçï¼ååççé»è¾æ¯ä¸è´çãï¼
å ¶ä¸ DataPrenstenter æ¯æä» VVeboTableView ä¸æ½ç¦»åºæ¥çï¼ä»å ¶å®å°±æ¯è¯»åæ°æ®çï¼ä½ ä¸ç¨å ³å¿ã
以ä¸è¿å¼ å¾æ¯ VVeboLabel ä¸ææçå 容ï¼é«äº®çé£ä¸ªæ¹æ³æ¯ VVeboLabel çæ ¸å¿æå¨ã
è¿éå±äºCore Textææ¯ï¼ä¸»è¦æ¯å¯¹ææ¬çç¹æ®å¤çï¼éç¨äºéè¡ç»å¶
å ¶ä½æ¹æ³ä¸»è¦æ¯å¯¹ææ¬é«äº®åæ¸ é¤å 容å¤çï¼ä¸æ¯éç¹ï¼å¯ä»¥ä¸å ³å¿ã
å¨ VVeboTableViewCell ä¸ï¼é«äº®çæ¹æ³ä¸ºæ ¸å¿é¨åãå ¶å®å VVeboLabel çææ³æ¯ä¸æ¨¡ä¸æ ·çï¼å°±æ¯å°å 容å¼æ¥ç»å¶å¨ä¸å¼ å¾ä¸ï¼ç¶åæ¾ç¤ºåºæ¥ï¼å°è¾¾åå°æ··åï¼ä»¥åå°GPUååãå°±ä¸è´´åºæºç ï¼ä¸é¢ä¼æ¾åºDemoã
è¿æ¯ä¸ä¸ªè®¾è®¡å¾å·§å¦çç±»ï¼å¨å¼å§ç 究è¿ä¸ªç±»çæè·¯ä¹åï¼æå»ºè®®ä½ ççè¿ç¯ æç« ãå½ç¶å¦æä½ å¯¹ UIScrollView 足å¤çæï¼å¹¶ä¸çæè¿ä¸ªæ¹æ³ func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) ,é£ä¹å¯¹ VVeboTableView çæè·¯å¯ä»¥ä¸ç®äºç¶äºã
该æ¹æ³ä» iOS 5 å¼å ¥ï¼å¨ didEndDragging å被è°ç¨ï¼å½ willEndDragging æ¹æ³ä¸ velocity 为 CGPoin.zero ï¼ç»ææå¨æ¶ä¸¤ä¸ªæ¹åé½æ²¡æé度ï¼æ¶ï¼ didEndDragging ä¸ç decelerate 为 falseï¼å³æ²¡æåéè¿ç¨ï¼ willBeginDecelerating å didEndDecelerating ä¹å°±ä¸ä¼è¢«è°ç¨ãåä¹ï¼å½ velocity ä¸ä¸º CGPoin.zero æ¶ï¼scroll view ä¼ä»¥ velocity 为åé度ï¼åéç´å° targetContentOffset ãå¼å¾æ³¨æçæ¯ï¼è¿éç targetContentOffset æ¯ä¸ªæéï¼æ²¡éï¼ä½ å¯ä»¥æ¹ååéè¿å¨çç®çå°ï¼è¿å¨ä¸äºææçå®ç°æ¶ååæç¨ã
以ä¸æå æ¥æº
微信读书çé£ç§æ¨ªæ»å± ä¸ææï¼é¤äºéå UICollectionViewFlowLayout ï¼
ä¹éè¿æ§å¶targetContentOffsetå°±å¯ä»¥å®ç°
å¾ä¸é«äº®æ¹æ³ä¸ºæ ¸å¿é¨å
cellç»å¶å¤æé»è¾
ä»¥ä¸ VVeboTableViewDemo æºç å·²ç»å ¨é¨è§£æå®æäºï¼é£ä¹ä½ å¨æå¹ä½è å·§å¦æè·¯çåæ¶ï¼è¯å®ä¹å¾æ³ç¥éè¿ç§ææ¯çæ¥æºï¼åæ¹è¿è¿ç¨ã(以ä¸ä¸ºä¸ªäººçæ³)
éè¿æ¬æï¼æè§å¾åºè¯¥äºè§£Core TextãCore GraphicsãHit-Test Viewãå¼æ¥ç»å¶è¿å 项å 容ï¼ä½ å¯ä»¥éè¿ä»¥ä¸æ¨èçæç« æ¥ææ¡åä¸ç§ææ¯ï¼å¼æ¥ç»å¶å¨ä¸ä¸èYYAsyncLayeræºç åæä¸ï¼æç¸ä¿¡ä½ ä¸ç¥ä¸è§å°±ææ¡äºè¿é¡¹ææ¯ã
æåæ¥æº
è¿ç§ææ¯çåºç°æ¯ä¸ºäºåè½»GPUçååï¼å 为å¾å±çæ··åæ¯GPUåçï¼èå¨è¿æ¯CPUå ä¹æ¯æ²¡äºå¯åçï¼æ以å§GPUçæ··å移å°CPUç func draw(_ rect: CGRect) å»å®æéæ±ã
æ¤ææ¯çdemo fastscrolling
ææ¯æ·æ±°åå
ç±äºretinaå±å¹çåºç°,åæ¥åä½é¢ç§¯çåç´ å¢å ï¼èCPUåçäºæ ä¹åå¾å¤äºèµ·æ¥ï¼å¯¼è´æçåèä¸åsubViewsæ¹æ³ã
AsyncDisplayKit YYKit çæ°ææ¯åºç°
æè§å¾VVeboTableViewDemo çåºç°åºè¯¥ä¹æ¯éµå¾ªä»¥ä¸è¿ç¨ç
Core Textï¼
Swiftä¹CoreTextæçç¥å¨
å®æ¹ææ¡£
Core Graphicsï¼
iOSç»å¾æç¨
Swiftä¹ä½ åºè¯¥æç¹Core Graphics
å®æ¹Demo
å®æ¹Demo Swiftçæ¬
Building Concurrent User Interfaces on iOS
ååºé¾
iOSäºä»¶ååºé¾ä¸Hit-Test Viewçåºç¨
iOS äºä»¶å¤ç | Hit-Testing
å¼æ¥ç»å¶
/ios-concurrency/
MyBatis-Plus代码生成器(3.5.1版本)
MyBatis-Plus(简称 MP)是Mybatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
特性:pom配置,依赖准备好后,创建Java类,在main()方法中:配置连接mysql数据库信息+调用自动生成API并设置各类参数,身份来源码根据自定义策略,执行自动生成代码操作。这里新建一个MpGenerator.java,提供主方法main()。
templateConfig我禁用了MP提供的模板,设置成了自己定义的。先看下MP自带的模板。
包路径,一共支持三种引擎,Velocity对应vm后缀;Beetl对应btl后缀;Freemarker对应ftl后缀
MP自带的模板service,controller等太简单,只是一个文件并没有提供增删改查功能,可以自己配置一个模板替换到自带的。就需要在templateConfig中配置一下。(自带的模板就不贴代码了,有兴趣的自己看一下)
拿controller举例,贴一下我自己配置的。
其实就是把增删改查的外壳设置好,把参数配置成动态的。$ 里面这些参数是哪里来的呢?接下来分析一下
由于我用的是Velocity,看一下它的引擎源码
一共4个方法,看名字大概分析一下,大概率是writer这个方法是主要功能,接下来断点看一下。
模板中配置的动态参数,都是从objectMap取的。
table数据格式,可以看到生成的entity,mapper,service,controller名称,fields取的数据库中字段信息。
是否为主键,字段类型,名称等等。可以根据这些参数来配置我们需要的模板样式。
如果objectMap中的参数不满足我们的要求,可以自己写一个引擎继承VelocityTemplateEngine重写他的writer方法。
我把主键的信息单独取出来了,避免每次循环调用。
自定义配置模板文件,根据MP提供的功能,可以生成entity,mapper,mapperXML,service,serviceImpl,controller。我们可能还需要用到BO,VO等,这时候就需要自定义配置模板了。
模板的定义跟上面说的一样。
简单记录一下自己使用过程的学习,大家有啥想法互相学习。
各个参数详细说明: mybatis-plus代码生成器及配置 - BlogMemory - 博客园
请问谁会在fluent中用UDF编一个进口速度为抛物线或对数分布,麻烦了
网页链接在圆管中,入口水流速通过以下公式描述:
这个公式说明在壁面上速度为0,圆管中心线的速度为0.5m/s,而圆管入口面上的速度符合抛物线分布。
下面的UDF就是把上述的抛物线分布的入口速度与Fluent求解器结合起来,从而可以在Fluent求解器中把入口速度指定为抛物线形。
此例的C源代码如下:
//