1.NAV2-Velocity Smoother 速度平滑器理解
2.运动控制卡应用开发教程之LabVIEW
3.Flutter(å)ä¹Flutterçå¸å±Widget
4.插件 | Jamparc for Rhino 6-Rhino 中的轴源码 SU
5.FANUC NC Guide V25.0数控仿真系统,学习FANUC技术必备神器
6.macd均线参数设置(macd中长线参数设置)
NAV2-Velocity Smoother 速度平滑器理解
NAV2 Velocity Smoother 是轴源码一个用于平滑由 NAV2 框架发送给机器人控制器速度的功能包。主要目的轴源码是通过平滑加速减少机器人电机和硬件控制器的磨损。平滑处理包括对速度、轴源码加速度和死区的轴源码控制。个人理解其核心功能有以下几点:
1. 确保发布的轴源码地图源码aide速度在容许的速度区间内。
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(),该函数接收由局部路径规划器或运动控制器发布的速度指令,并发布经过平滑处理后的速度。
运动控制卡应用开发教程之LabVIEW
今天,我们将深入探讨LabVIEW在正运动技术运动控制卡应用开发中的教程。
首先,了解正运动技术的emui软件源码两款核心产品:4轴运动控制卡ECI和6轴的ECI。它们都支持脉冲输入与编码器反馈,ECI拥有点输入和点输出,包括2AD和2DA接口,还支持手轮接口,特别的输出支持高速PWM。而ECI则在功能上更为全面,支持6轴控制。
这些控制卡兼容多种开发语言,如C、C++、C#、LabVIEW、Python和Delphi,支持Windows、Linux、WinCE和iMac等操作系统,且使用统一的API函数库。在开发过程中,LabVIEW的使用尤为关键。
在LabVIEW中导入共享库,首先从光盘获取专用DLL函数库,通过工具导入共享库,自动生成对应Vi函数库,或者根据需要对源码进行封装。不同版本的LabVIEW之间可以兼容,但可能需要版本转换或厂家提供的支持。
接下来,我们通过示例讲解如何在LabVIEW中创建和配置Vi库。通过8个基础例程,一步步实现单轴运动监控、输入输出管理等操作。例如,新建Vi,设计UI,链接控制器,监控状态,以及添加运动、停止、清零和输出状态改变等按钮事件的响应程序。完成例程后,可以通过ZDevelop软件同步测试和监控。
以上就是LabVIEW在正运动技术运动控制卡应用开发教程中的部分内容,希望对您的学习和实践有所帮助。更多实用教程,精彩源码论坛敬请关注我们的官方公众号。本文由正运动小助手原创,欢迎转发和学习,共同推动中国智能制造的发展。所有文章版权属于正运动技术,如需引用,请注明出处。
Flutter(å)ä¹Flutterçå¸å±Widget
ä¸.ååå¸å±ç»ä»¶
ååå¸å±ç»ä»¶çå«ä¹æ¯å ¶åªæä¸ä¸ªåç»ä»¶ï¼å¯ä»¥éè¿è®¾ç½®ä¸äºå±æ§è®¾ç½®è¯¥åç»ä»¶æå¨çä½ç½®ä¿¡æ¯çã
æ¯è¾å¸¸ç¨çååå¸å±ç»ä»¶æï¼AlignãCenterãPaddingãContainerã
1.1.Alignç»ä»¶1.1.1.Alignä»ç»çå°Alignè¿ä¸ªè¯ï¼æ们就ç¥éå®ææ们ç对é½æ¹å¼æå ³ã
å¨å ¶ä»ç«¯çå¼åä¸ï¼iOSãAndroidãå端ï¼Aligné常åªæ¯ä¸ä¸ªå±æ§èå·²ï¼ä½æ¯Flutterä¸Alignä¹æ¯ä¸ä¸ªç»ä»¶ã
æ们å¯ä»¥éè¿æºç æ¥çä¸ä¸Alignæåªäºå±æ§ï¼
constAlign({ Keykey,this.alignment:Alignment.center,//对é½æ¹å¼ï¼é»è®¤å± ä¸å¯¹é½this.widthFactor,//宽度å åï¼ä¸è®¾ç½®çæ åµï¼ä¼å°½å¯è½å¤§this.heightFactor,//é«åº¦å åï¼ä¸è®¾ç½®çæ åµï¼ä¼å°½å¯è½å¤§Widgetchild//è¦å¸å±çåWidget})è¿éæ们ç¹å«è§£éä¸ä¸widthFactoråheightFactorä½ç¨ï¼
å 为åç»ä»¶å¨ç¶ç»ä»¶ä¸ç对é½æ¹å¼å¿ é¡»æä¸ä¸ªåæï¼å°±æ¯ç¶ç»ä»¶å¾ç¥éèªå·±çèå´ï¼å®½åº¦åé«åº¦ï¼ï¼
å¦æwidthFactoråheightFactorä¸è®¾ç½®ï¼é£ä¹é»è®¤Alignä¼å°½å¯è½ç大ï¼å°½å¯è½å æ®èªå·±æå¨çç¶ç»ä»¶ï¼ï¼
æ们ä¹å¯ä»¥å¯¹ä»ä»¬è¿è¡è®¾ç½®ï¼æ¯å¦widthFactor设置为3ï¼é£ä¹ç¸å¯¹äºAlignç宽度æ¯åç»ä»¶è·¨åº¦ç3åï¼
1.1.2.Alignæ¼ç»æ们ç®åæ¼ç»ä¸ä¸Align:
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}1.2.Centerç»ä»¶1.2.1.Centerä»ç»Centerç»ä»¶æ们å¨åé¢å·²ç»ç¨è¿å¾å¤æ¬¡äºã
äºå®ä¸Centerç»ä»¶ç»§æ¿èªAlignï¼åªæ¯å°alignment设置为Alignment.centerã
æºç åæï¼
classCenterextendsAlign{ constCenter({ Keykey,doublewidthFactor,doubleheightFactor,Widgetchild}):super(key:key,widthFactor:widthFactor,heightFactor:heightFactor,child:child);}1.2.2.Centeræ¼ç»æ们å°ä¸é¢ç代ç Alignæ¢æCenter
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnCenter(child:Icon(Icons.pets,size:,color:Colors.red),widthFactor:3,heightFactor:3,);}}1.3.Paddingç»ä»¶1.3.1.Paddingä»ç»Paddingç»ä»¶å¨å ¶ä»ç«¯ä¹æ¯ä¸ä¸ªå±æ§èå·²ï¼ä½æ¯å¨Flutterä¸æ¯ä¸ä¸ªWidgetï¼ä½æ¯Flutterä¸æ²¡æMarginè¿æ ·ä¸ä¸ªWidgetï¼è¿æ¯å 为å¤è¾¹è·ä¹å¯ä»¥éè¿Paddingæ¥å®æã
Paddingé常ç¨äºè®¾ç½®åWidgetå°ç¶Widgetçè¾¹è·ï¼ä½ å¯ä»¥ç§°ä¹ä¸ºæ¯ç¶ç»ä»¶çå è¾¹è·æåWidgetçå¤è¾¹è·ï¼ã
æºç åæï¼
constPadding({ Keykey,@requiredthis.padding,//EdgeInsetsGeometryç±»åï¼æ½è±¡ç±»ï¼ï¼ä½¿ç¨EdgeInsetsWidgetchild,})1.3.2.Paddingæ¼ç»ä»£ç æ¼ç»ï¼
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnPadding(padding:EdgeInsets.all(),child:Text("è«å¬ç©¿ææå¶å£°ï¼ä½å¦¨åå¸ä¸å¾è¡ã竹æèéè½»è马ï¼è°æï¼ä¸èçé¨ä»»å¹³çã",style:TextStyle(color:Colors.redAccent,fontSize:),),);}}1.4.Containerç»ä»¶Containerç»ä»¶ç±»ä¼¼äºå ¶ä»Androidä¸çViewï¼iOSä¸çUIViewã
å¦æä½ éè¦ä¸ä¸ªè§å¾ï¼æä¸ä¸ªèæ¯é¢è²ãå¾åãæåºå®ç尺寸ãéè¦ä¸ä¸ªè¾¹æ¡ãåè§çææï¼é£ä¹å°±å¯ä»¥ä½¿ç¨Containerç»ä»¶ã
.1.Containerä»ç»Containerå¨å¼åä¸è¢«ä½¿ç¨çé¢çæ¯é常é«çï¼ç¹å«æ¯æ们ç»å¸¸ä¼å°å ¶ä½ä¸ºå®¹å¨ç»ä»¶ã
ä¸é¢æ们æ¥çä¸ä¸Containeræåªäºå±æ§ï¼
Container({ this.alignment,this.padding,//容å¨å è¡¥ç½ï¼å±äºdecorationçè£ é¥°èå´Colorcolor,//èæ¯è²Decorationdecoration,//èæ¯è£ 饰DecorationforegroundDecoration,//åæ¯è£ 饰doublewidth,//容å¨ç宽度doubleheight,//容å¨çé«åº¦BoxConstraintsconstraints,//容å¨å¤§å°çéå¶æ¡ä»¶this.margin,//容å¨å¤è¡¥ç½ï¼ä¸å±äºdecorationçè£ é¥°èå´this.transform,//åæ¢this.child,})大å¤æ°å±æ§å¨ä»ç»å ¶å®å®¹å¨æ¶é½å·²ç»ä»ç»è¿äºï¼ä¸åèµè¿°ï¼ä½æ两ç¹éè¦è¯´æï¼
容å¨ç大å°å¯ä»¥éè¿widthãheightå±æ§æ¥æå®ï¼ä¹å¯ä»¥éè¿constraintsæ¥æå®ï¼å¦æåæ¶åå¨æ¶ï¼widthãheightä¼å ãå®é ä¸Containerå é¨ä¼æ ¹æ®widthãheightæ¥çæä¸ä¸ªconstraintsï¼
colorådecorationæ¯äºæ¥çï¼å®é ä¸ï¼å½æå®coloræ¶ï¼Containerå ä¼èªå¨å建ä¸ä¸ªdecorationï¼
decorationå±æ§ç¨åæ们详ç»å¦ä¹ ï¼
1.4.2.Containeræ¼ç»ç®åè¿è¡ä¸ä¸ªæ¼ç¤ºï¼
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnCenter(child:Container(color:Color.fromRGBO(3,3,,.5),width:,height:,child:Icon(Icons.pets,size:,color:Colors.white),),);}}1.4.3.BoxDecorationContaineræä¸ä¸ªé常éè¦çå±æ§decorationï¼
ä»å¯¹åºçç±»åæ¯Decorationç±»åï¼ä½æ¯å®æ¯ä¸ä¸ªæ½è±¡ç±»ã
å¨å¼åä¸ï¼æ们ç»å¸¸ä½¿ç¨å®çå®ç°ç±»BoxDecorationæ¥è¿è¡å®ä¾åã
BoxDecoration常è§å±æ§ï¼
constBoxDecoration({ this.color,//é¢è²ï¼ä¼åContainerä¸çcolorå±æ§å²çªthis.image,//èæ¯å¾çthis.border,//è¾¹æ¡ï¼å¯¹åºç±»åæ¯Borderç±»åï¼éé¢æ¯ä¸ä¸ªè¾¹æ¡ä½¿ç¨BorderSidethis.borderRadius,//åè§ææthis.boxShadow,//é´å½±ææthis.gradient,//æ¸åææthis.backgroundBlendMode,//èæ¯æ··åthis.shape=BoxShape.rectangle,//å½¢å})é¨åæææ¼ç¤ºï¼
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnCenter(child:Container(//color:Color.fromRGBO(3,3,,.5),width:,height:,child:Icon(Icons.pets,size:,color:Colors.white),decoration:BoxDecoration(color:Colors.amber,//èæ¯é¢è²border:Border.all(color:Colors.redAccent,width:3,style:BorderStyle.solid),//è¿éä¹å¯ä»¥ä½¿ç¨Border.allç»ä¸è®¾ç½®//top:BorderSide(//color:Colors.redAccent,//width:3,//style:BorderStyle.solid//),borderRadius:BorderRadius.circular(),//è¿éä¹å¯ä»¥ä½¿ç¨.onlyåå«è®¾ç½®boxShadow:[BoxShadow(offset:Offset(5,5),color:Colors.purple,blurRadius:5)],//shape:BoxShape.circle,//ä¼åborderRadiuså²çªgradient:LinearGradient(colors:[Colors.green,Colors.red])),),);}}1.4.4.å®ç°åè§å¾åä¸ä¸ä¸ªç« èæ们æå°å¯ä»¥éè¿Container+BoxDecorationæ¥å®ç°åè§å¾åã
å®ç°ä»£ç å¦ä¸ï¼
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}0äº.å¤åå¸å±ç»ä»¶å¨å¼åä¸ï¼æ们ç»å¸¸éè¦å°å¤ä¸ªWidgetæ¾å¨ä¸èµ·è¿è¡å¸å±ï¼æ¯å¦æ°´å¹³æ¹åãåç´æ¹åæåï¼çè³ææ¶åéè¦ä»ä»¬è¿è¡å±å ï¼æ¯å¦å¾çä¸é¢æ¾ä¸æ®µæåçï¼
è¿ä¸ªæ¶åæ们éè¦ä½¿ç¨å¤åå¸å±ç»ä»¶ï¼Multi-childlayoutwidgetsï¼ã
æ¯è¾å¸¸ç¨çå¤åå¸å±ç»ä»¶æ¯RowãColumnãStackï¼æ们æ¥å¦ä¹ ä¸ä¸ä»ä»¬ç使ç¨ã
2.1.Flexç»ä»¶äºå®ä¸ï¼æ们å³å°å¦ä¹ çRowç»ä»¶åColumnç»ä»¶é½ç»§æ¿èªFlexç»ä»¶ã
Flexç»ä»¶åRowãColumnå±æ§ä¸»è¦çåºå«å°±æ¯å¤ä¸ä¸ªdirectionã
å½directionçå¼ä¸ºAxis.horizontalçæ¶åï¼åæ¯Rowã
å½directionçå¼ä¸ºAxis.verticalçæ¶åï¼åæ¯Columnã
å¨å¦ä¹ RowåColumnä¹åï¼æ们å å¦ä¹ 主轴å交åè½´çæ¦å¿µã
å 为Rowæ¯ä¸è¡æå¸ï¼Columnæ¯ä¸åæå¸ï¼é£ä¹å®ä»¬é½åå¨ä¸¤ä¸ªæ¹åï¼å¹¶ä¸ä¸¤ä¸ªWidgetæåçæ¹ååºè¯¥æ¯å¯¹ç«çã
å®ä»¬ä¹ä¸é½æ主轴ï¼MainAxisï¼å交åè½´ï¼CrossAxisï¼çæ¦å¿µï¼
对äºRowæ¥è¯´ï¼ä¸»è½´ï¼MainAxisï¼å交åè½´ï¼CrossAxisï¼åå«æ¯ä¸å¾
对äºColumnæ¥è¯´ï¼ä¸»è½´ï¼MainAxisï¼å交åè½´ï¼CrossAxisï¼åå«æ¯ä¸å¾
2.1.Rowç»ä»¶2.1.1.Rowä»ç»Rowç»ä»¶ç¨äºå°ææçåWidgetææä¸è¡ï¼å®é ä¸è¿ç§å¸å±åºè¯¥æ¯åé´äºWebçFlexå¸å±ã
å¦æçæFlexå¸å±ï¼ä¼åç°é常ç®åã
ä»æºç ä¸æ¥çRowçå±æ§ï¼
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}1mainAxisSizeï¼
表示Rowå¨ä¸»è½´(æ°´å¹³)æ¹åå ç¨ç空é´ï¼é»è®¤æ¯MainAxisSize.maxï¼è¡¨ç¤ºå°½å¯è½å¤çå ç¨æ°´å¹³æ¹åç空é´ï¼æ¤æ¶æ 论åwidgetså®é å ç¨å¤å°æ°´å¹³ç©ºé´ï¼Rowç宽度å§ç»çäºæ°´å¹³æ¹åçæ大宽度
èMainAxisSize.min表示尽å¯è½å°çå ç¨æ°´å¹³ç©ºé´ï¼å½åwidgets没æå 满水平å©ä½ç©ºé´ï¼åRowçå®é 宽度çäºææåwidgetså ç¨çç水平空é´ï¼
mainAxisAlignmentï¼è¡¨ç¤ºåWidgetså¨Rowæå ç¨ç水平空é´å 对é½æ¹å¼
å¦æmainAxisSizeå¼ä¸ºMainAxisSize.minï¼åæ¤å±æ§æ æä¹ï¼å 为åwidgetsç宽度çäºRowç宽度
åªæå½mainAxisSizeçå¼ä¸ºMainAxisSize.maxæ¶ï¼æ¤å±æ§æææä¹
MainAxisAlignment.start表示沿textDirectionçåå§æ¹å对é½ï¼
å¦textDirectionåå¼ä¸ºTextDirection.ltræ¶ï¼åMainAxisAlignment.start表示左对é½ï¼textDirectionåå¼ä¸ºTextDirection.rtlæ¶è¡¨ç¤ºä»å³å¯¹é½ã
èMainAxisAlignment.endåMainAxisAlignment.startæ£å¥½ç¸åï¼
MainAxisAlignment.centerè¡¨ç¤ºå± ä¸å¯¹é½ã
crossAxisAlignmentï¼è¡¨ç¤ºåWidgetså¨çºµè½´æ¹åç对é½æ¹å¼
Rowçé«åº¦çäºåWidgetsä¸æé«çåå ç´ é«åº¦
å®çåå¼åMainAxisAlignmentä¸æ ·(å å«startãendãcenterä¸ä¸ªå¼)
ä¸åçæ¯crossAxisAlignmentçåèç³»æ¯verticalDirectionï¼å³verticalDirectionå¼ä¸ºVerticalDirection.downæ¶crossAxisAlignment.startæ顶é¨å¯¹é½ï¼verticalDirectionå¼ä¸ºVerticalDirection.upæ¶ï¼crossAxisAlignment.startæåºé¨å¯¹é½ï¼ècrossAxisAlignment.endåcrossAxisAlignment.startæ£å¥½ç¸åï¼
2.1.2.Rowæ¼ç»æ们æ¥å¯¹é¨åå±æ§è¿è¡ç®åç代ç æ¼ç»ï¼å ¶ä»ä¸äºå±æ§å¤§å®¶èªå·±å¦ä¹ ä¸ä¸
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}.1.3.mainAxisSizeé»è®¤æ åµä¸ï¼Rowä¼å°½å¯è½å æ®å¤ç宽度ï¼è®©åWidgetå¨å ¶ä¸è¿è¡æå¸ï¼è¿æ¯å 为mainAxisSizeå±æ§é»è®¤å¼æ¯MainAxisSize.maxã
æ们æ¥çä¸ä¸ï¼å¦æè¿ä¸ªå¼è¢«ä¿®æ¹ä¸ºMainAxisSize.maxä¼ä»ä¹ååï¼
2.1.4.TextBaselineå ³äºTextBaselineçåå¼è§£æ
2.1.5.Expandedå¦ææ们å¸æ红è²åé»è²çContainerWidgetä¸è¦è®¾ç½®åºå®ç宽度ï¼èæ¯å æ®å©ä½çé¨åï¼è¿ä¸ªæ¶ååºè¯¥å¦ä½å¤çå¢ï¼
è¿ä¸ªæ¶åæ们å¯ä»¥ä½¿ç¨Expandedæ¥å 裹ContainerWidgetï¼å¹¶ä¸å°å®ç宽度ä¸è®¾ç½®å¼ï¼
flexå±æ§ï¼å¼¹æ§ç³»æ°ï¼Rowä¼æ ¹æ®ä¸¤ä¸ªExpandedçå¼¹æ§ç³»æ°æ¥å³å®å®ä»¬å æ®å©ä¸ç©ºé´çæ¯ä¾
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}.2.Columnç»ä»¶Columnç»ä»¶ç¨äºå°ææçåWidgetææä¸åï¼å¦ä¼äºåé¢çRowåï¼Columnåªæ¯årowçæ¹åä¸åèå·²ã
2.2.1.Columnä»ç»æ们ç´æ¥çå®çæºç ï¼æ们åç°åRowå±æ§æ¯ä¸è´çï¼ä¸å解é
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}.2.2.Columnæ¼ç»æ们ç´æ¥å°Rowç代ç ä¸Rowæ¹ä¸ºColumnï¼æ¥ç代ç è¿è¡ææ
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}.3.Stackç»ä»¶å¨å¼åä¸ï¼æ们å¤ä¸ªç»ä»¶å¾æå¯è½éè¦éå æ¾ç¤ºï¼æ¯å¦å¨ä¸å¼ å¾çä¸æ¾ç¤ºæåæè ä¸ä¸ªæé®çã
å¨Androidä¸å¯ä»¥ä½¿ç¨Frameæ¥å®ç°ï¼å¨Web端å¯ä»¥ä½¿ç¨ç»å¯¹å®ä½ï¼å¨Flutterä¸æ们éè¦ä½¿ç¨å±å å¸å±Stackã
2.3.1.Stackä»ç»æ们è¿æ¯éè¿æºç æ¥çä¸ä¸Stackæåªäºå±æ§ï¼
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}6åæ°j解æï¼
alignmentï¼æ¤åæ°å³å®å¦ä½å»å¯¹é½æ²¡æå®ä½ï¼æ²¡æ使ç¨Positionedï¼æé¨åå®ä½çåwidgetãæè°é¨åå®ä½ï¼å¨è¿éç¹æ没æå¨æä¸ä¸ªè½´ä¸å®ä½ï¼leftãright为横轴ï¼topãbottom为纵轴ï¼åªè¦å å«æ个轴ä¸çä¸ä¸ªå®ä½å±æ§å°±ç®å¨è¯¥è½´ä¸æå®ä½ã
textDirectionï¼åRowãWrapçtextDirectionåè½ä¸æ ·ï¼é½ç¨äºå³å®alignment对é½çåèç³»å³ï¼textDirectionçå¼ä¸ºTextDirection.ltrï¼åalignmentçstart代表左ï¼end代表å³ï¼textDirectionçå¼ä¸ºTextDirection.rtlï¼åalignmentçstart代表å³ï¼end代表左ã
fitï¼æ¤åæ°ç¨äºå³å®æ²¡æå®ä½çåwidgetå¦ä½å»éåºStackç大å°ãStackFit.loose表示使ç¨åwidgetç大å°ï¼StackFit.expand表示æ©ä¼¸å°Stackç大å°ã
overflowï¼æ¤å±æ§å³å®å¦ä½æ¾ç¤ºè¶ åºStackæ¾ç¤ºç©ºé´çåwidgetï¼å¼ä¸ºOverflow.clipæ¶ï¼è¶ åºé¨åä¼è¢«åªè£ï¼éèï¼ï¼å¼ä¸ºOverflow.visibleæ¶åä¸ä¼ã
2.3.2.Stackæ¼ç»Stackä¼ç»å¸¸åPositionedä¸èµ·æ¥ä½¿ç¨ï¼Positionedå¯ä»¥å³å®ç»ä»¶å¨Stackä¸çä½ç½®ï¼ç¨äºå®ç°ç±»ä¼¼äºWebä¸çç»å¯¹å®ä½ææã
ä¸ä¸ªç®åçæ¼ç»ï¼
注æï¼Positionedç»ä»¶åªè½å¨Stackä¸ä½¿ç¨ã
classMyHomeBodyextendsStatelessWidget{ @overrideWidgetbuild(BuildContextcontext){ returnAlign(child:Icon(Icons.pets,size:,color:Colors.red),alignment:Alignment.bottomRight,widthFactor:3,heightFactor:3,);}}7\
åæï¼/post/插件 | Jamparc for Rhino 6-Rhino 中的 SU
作者:@Ansen-A
想在Rhino 6中像SketchUp(SU)一样操作模型?这篇文章将解答你的疑问。
今年,收到在线课程学员关于Jamparc能否适用于Rhino 6的问题。Jamparc是一款小众的Rhino插件,功能丰富,主要为建筑专业人士设计,包括类似SketchUp的推拉体块功能、增强的图层管理工具和作者工作中常用的小工具。
然而,Jamparc插件并未针对Rhino 6进行更新,作者已分享源代码,供需要的用户自行整合至Rhino 6中使用。为了方便大家,我将各rvb脚本文件封装为Rhino的rhp插件。
Jamparc插件的使用体验:
插件中包含多个功能,主要将Rhino中的多个指令打包,简化操作步骤,提高效率。例如,偏移曲面的边框并推拉曲面、旋转至相机视角、切掉闭合平面曲线或曲面区域等。其中,偏移曲面和推拉曲面的功能比较方便,旋转至相机视角提供一定的便利性。使用时,只需分别运行rvb脚本,再自定义工具按钮以简化操作。
为了提升操作便捷性,我将这些功能封装成Rhino的rhp插件,方便用户使用。插件内的工具较为简单,但局限性较大,适用于特定场景。
我挑选了几个功能进行演示:
1.偏移曲面的边框+推拉曲面:这组工具名为“SU”,通过偏移曲面的边框后,将内圈的xorg 源码分析曲面往里挤出一段距离,方便地完成操作。
2.旋转至相机:类似SketchUp中的功能,Jamparc提供半自动旋转功能,辅助快速调整视角,方便平面素材树面向使用者。
3.切掉闭合平面曲线或曲面区域:通过矩形切掉闭合平面曲线或曲面的共享区域,快速完成操作。
4.基于一组单线快速生成墙体平面轮廓线并挤出墙体,提高推敲效率。
5.增强的图层管理功能:对Rhino图层功能的补充,方便用户管理项目。
尽管Jamparc中一些工具与SketchUp相似,但它仅是一款辅助工具,无法替代Rhino的全面功能。与Rhino自身的功能配合使用,才能提高效率,如操作轴、子物件编辑等。
插件下载与安装步骤:
下载Jamparc V6.zip,解压至任意目录。推荐放置在Rhino 6的插件目录中,便于管理。将两个文件拖拽至Rhino 6视窗中即可加载插件。JA开头的指令为Jamparc插件内的所有指令。
请注意,下载Jamparc for Rhino 5,请前往Food4Rhino插件页面下载。页面提供使用手册和作者联系信息。
本文结束。
FANUC NC Guide V.0数控仿真系统,学习FANUC技术必备神器
FANUC NC Guide模拟仿真系统V.0是一款针对FANUC数控系统的学习与调试工具,其功能包括模拟系统使用、学习调试PMC梯形图、编辑数控系统采集等。
该系统具有以下特点:1)操作程序运行与真机操作相同;2)支持FANUC PMC程序的仿真,有助于维修人员学习PMC;3)可仿真FANUC 0I MF TF MD TD、FANUC IA B和FANUC I B 0IF PLUS IB PLUS系统。
软件下载地址:软件制作中
NC guide功能包括:1)培训CNC和MANUAL GUIDE I;2)编辑加工程序和加工循环;3)MEM/MDI方式下的操作和自动运行;4)加工模拟;5)显示MDI单元并可用鼠标直接操作;6)支持8.4 .4彩色显示器和标准的ONG(M/T)的MDI单元;7)将各种CNC数据输入输出到电脑上的文件夹;8)支持网络认证,可在局域网连接的多台计算机上运行。
NC guideRro功能包括:1)在PC上执行PMC梯形图程序;2)结合CNC模拟功能进行梯形图的调试;3)结合FANUC LADDER III编辑和显示梯形图;4)模拟PMC轴控制;5)利用机床信号模拟功能在附近实际机床环境下调试梯形图;6)执行使用C语言执行器/宏执行器创建的个性化软件;7)进行C语言执行器陈谷源代码的调试。
macd均线参数设置(macd中长线参数设置)
1. macd中长线参数设置
很简单,既然做中长线、周线上MACD长期在零轴之上就可以了.还有股价在MCST(上升)平均成本之上.
2. macd日线参数设置
股票分时线MACD参数如下设置最佳:
SHORT=;
LONG=;
M=5;
具体公式源码如下
//-------------------------------------------------------------------------------------------MACD
DIFF: EMA(NEW, SHORT) - EMA(NEW, LONG);
DEA : EMA(DIFF, M);
MACDFS: 2*(DIFF-DEA);
M1=EMA(CLOSE,);
M2=EMA(CLOSE,);
轴:(M1-M1),colorred;
MACD金叉=CROSS(DIFF,DEA);
MACD死叉=CROSS(DEA,DIFF);
DRAWICON(MACD金叉, DEA, BUY);
DRAWICON(MACD死叉, DEA, SELL);
STICKLINE(MACDFS=0,0,MACDFS,1,0),colorred;
STICKLINE(MACDFS 0,MACDFS,0,1,0),colorgreen;
3. macd日线最佳参数调整
在日线付图点击MAcD的三角。显示设置界面,写上你想改的auth token 源码数字即可。
4. macd平均线参数设置
MACD指标是一个经典指标,对判断大盘和个股趋势很有帮助,但我们发现,系统默认的MACD参数(通达信为 9)往往有些滞后,导致往往丧失最佳买入和卖出机会。
如果把MACD指标参数调整为 6 5,我们发现,指标变得更灵敏,更具有操作性。
MACD称为指数平滑移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(EMA)减去慢的指数移动平均线(EMA)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。
当MACD从负数转向正数,是买的信号。当MACD从正数转向负数,是卖的信号。当MACD以大角度变化,表示快的移动平均线和慢的移动平均线的差距非常迅速的拉开,代表了一个市场大趋势的转变。
5. 中线macd参数设置多少最佳
期货short指标即短线指标,又称为市场盈亏指标,属高低类指标,它描述的是这样一个市场事实:介入期市的投资者的浮动盈亏状况。这个浮动盈亏状况是针对相对应的成本均线而言的。
扩展资料
期货short短线指标(期货macd红绿柱的运用):
期货macd指标分析方法
MACD指标计算方法
先计算成交量的短期(SHORT)和长期(LONG)指数平滑移动平均线,
再推算DIFF和DEA及两者之差美国原油交易时刻表,最后得出MACD期货什么是期货。具体计算公式:
SHORT=[2×成交量+(N-1)×上一周期成交量]
LONG=[2×成交量+(N1-1)×上一周期成交量]
DIFF=SHORT-LONG
DEA=[2×DIFF+(M-1)×上一周期DIFF]
MACD=DIFF-DEA
参数设置:N=、N1=、M=9
MACD指标运用技巧:
1、DIFF与DEA均为正值,两者均在零轴线之上时正规*资公司有哪些平台,DIFF向上突
破DEA为买入信号期货在金融市场中的作用。
2、DIFF与DEA均为负值,两者均在零轴线之下时,DIFF向下跌
破DEA为卖出信号黄豆一号期货。
3、DEA线与K线趋势发生背离时为行情反转信号。
4、分析MACD柱状线,由红变绿(正变负)为卖出信号;由绿变红
为买入信号华闻期货有限公司怎么样。
5、DIFF与DEA均为负值时身边做股指期货赚钱有多快,常常会两线长期粘合,当两线
有效分离且DIFF在上时为中线买入信号国际期货。
期货macd指标分析方法
(1)DIF和DEA均为正值时德国股市休市安排,属多头市场永安期货手续费明细,DIF向上突破DEA是买
入信号,DIF向下跌破DEA只能认为是回档。
(2)DIF和DEA均为负值时金石董事长,属空头市场,DIF向下突破DEA是卖
出信号,DIF向上突破只能认为是反弹。
用DIF的曲线形状进行分析瑞达期货金尝发,主要是利用指标相背离的原则。具
体为:如果DIF的走向与商品价走向相背离,则是采取具体行动的
时间中一期货。但是商品期货套利技巧,根据以上原则来指导实际操作液化天然气期货,准确性并不能令人满
意怎么做期货步骤。综合运用5日、日和日均价线年沪铜期货回顾,以及成交量和持仓量的
配合外盘期货名单,其准确性大为提高。
在期货投资中国际原油期货交易时间,MACD指标作为一种技术分析的手段申银万国证券首页,得到了投
资者的认知。MACD指标属于大势趋势类指标上海金属网今日铜价格,它由长期均线MACD信托公司注册,
短期均线DIF期货原油配资公司有哪些,红能量柱(多头),绿能量柱(空头)更上一个新台阶,0轴(多空
分界线)五部分组成。它是利用短期均线DIF与长期均线MACD交叉
作为信号网上交易平台。
MACD指标所产生的交叉信号较迟钝,但是我们可以利用缩小周
期来提高MACD的准确性,比方1分钟图3分钟图和5分钟期货老师。我主要
是做日内短线郑州白糖期货交易价格,因此我用我的短线经验来抛砖引玉。
一、
1.当分钟的DIF在底部同时向上穿越DEA期货网,说明大势处于多
头市建立多头部位新湖期货是不是正规平台。
2.当分钟的DIF在顶部部同时向下穿越DEA股指期货平仓线是多少,说明大势处于
空头市建立空头部位。
二、由于期货市行情的变化多端,MACD指标常会与K线走势图
呈背离的走势期货可以赚钱吗,通常称为顶背离底部背离什么叫期货学期货先学什么开始,怎么买。既K线走势图创出近期
的第二个或第三个高点,MACD指标并不配合出现相应的高点却出现
相反的走势期货反手好还是锁仓好,顶点在逐步降低今天期货晚上开盘吗。叫顶部背离国内五大期货交易所。反之,如果既K线走
势图创出近期的第二个或第三个低点为什么做空比做多赚钱,MACD指标并不配合出现相应
的低点点却出现相反的走势,MACD底部在逐渐抬高玉米期货年一月份行情,叫底部背离一个老外的简单日内期货策略。
这种现象应引起投资者的警觉避免头寸被套。
三、若DIF由上向下跌穿O轴时可看作大势可能步入空头市场期货均线,
预示着大势将走弱,若MACD由上向下跌空O轴时,确认大势进入空
头市场期货交易流程。若DIF由下向上穿越O轴时,可看作大势可能布入多头市
场现在还有股指期货吗。预示着大势将走强沪锡期货行情金投网,操作上应部分资金参与多头部位。若MACD
由下向上穿越O轴时确认大势进入多头市场大越期货股份有限公司。
四、在MACD指标中长线是期货最高机密,红能量柱和绿能量柱,分别代表了多
头和空头能量的强弱盛衰全国期货交易实盘大赛。它们对市场的反应,要比短期均线DIF
在时间上提前十字星买入必涨形态。在MACD指标中湘乡月山镇,能量释入的过程期权容易赚钱还是期货,是一个循序渐近
的过程,通常是呈逐渐放大的伦敦原油期货实时行情。在使用能量柱时期货行情,利用红能量柱结
合K线走势图就得出,当K线走势图近乎度的上升国际原油期货k线图,加之红能量
柱的快速放大,预示着大势的顶部已近红枣期货.尤其是相邻的两段红能量
柱产生连片时伦敦原油期货实时行情,所爆发的行情将更加迅猛.反之,在空头市场中商品期货交易技巧,这种
现象也成立.在熟悉了这种操作手法后,对投资者将大有益处外币期货交易。
注意
在使用MACD指标过程中
第一,MACD指标对于研判短期顶部和底部金投网甲苯价格,并不一定可信,只
有结合均线或者成交量等其他指标配合才可期货公司开户。
第二,MACD指标分析大周期的指标更准确期货增仓下跌和减仓下跌,但是反映迟钝。近
期的指标反应迅速但是准确性降低同花顺怎么看期货,必须结合其他指标白糖期货做不得。或者采用
分时图根据不同周期来研判走势期货自动跟单。
第三,如果完全按照金叉买进、死叉卖出,获利较难或还有可能
套牢亏损期货回调交易法。因此橡胶期货与号胶的区别,在这里建议可以使用一种低位两次金叉买进的方
法PCX。MACD在低位发生第一次金叉时期货如何交易,商品价格价在较多情况下涨幅
有限原油期货平台,或小涨后出现较大的回调中辉期货排名,第二次金叉出现后,商品价格上
涨的概率和幅度会更大一些。反之亦然。
第四,一定要密切关注在行情中MACD的M顶和W底,这样的情
况一般都是有相对较大的行情。
总之买卖期货交易软件,在使用MACD指标时必须判定市场的属性。即目前的市场
是多头市场,还是空头市场今天股指期货行情。根据不同的市场属性,采取不同的操
作策略,以回避风险做vr是什么意思啊,保障利润的目的。
jsbsim学习飞行器模型配置文件解读
jsbsim是用于飞行力学仿真的一款开源软件,旨在实现类似IL2/1战争雷霆的空战游戏。在Unity中通过C#封装一个简化版的气动仿真模型,使模型在接收飞行器当前状态后,能输出6个自由度上的力/力矩,以接入Unity的刚体组件。
以jsbsim自带的f-模型配置文件f.xml为例,解析其中内容。
从xml根节点入手,metrics、mass_balance、aerodynamics等部分尤为关键。地面互动、推力、自动控制等稍后关注,因为jsbsim最初专注于自动控制策略仿真,因此flight_control模块较为详细。
配置文件中的缩写繁多,不易理解,但只要直接导入Unity的刚体组件即可。metrics节点描述了飞行器尺寸、位置指标,明确了飞行器坐标系中的VRP概念,即确定飞行器“鼻尖”与坐标原点之间的偏移。
mass_balance节点包含飞行器质量分布参数,涉及惯性张量等理论力学知识点。对于三维情况下刚体角动量与瞬时角速度方向的差异,理解惯性张量有助于预测飞行器在力矩作用下的旋转行为。
aerodynamics节点包含大量表格数据,jsbsim通过查表实现非线性公式/函数计算,采用线性插值处理。节点下包含轴对应飞行器沿x、y、z轴平动、绕轴转动的六个刚体运动自由度。
重点分析了DRAG轴、SIDE轴、LIFT轴、PITCH轴、YAW轴,这些变量描述了飞行器在不同轴向的气动特性。若无法理解某个变量,可在Google搜索或探索jsbsim源代码中找到相关描述。
完成f.xml配置文件解析后,下一步将编写程序加载配置文件并执行动力学运算。若遇到未在Google搜索到的变量,尝试在jsbsim源代码中进行全局搜索,可获得更多线索。
分享 6 个优质的机器人末端执行器模型
本文为机械专业人员提供六款优质机器人末端执行器模型,适合学习与交流使用。机器人末端执行器安装于工业机械臂末端,直接作用于工作对象,具备夹持、运输和放置工件至指定位置的功能。其性能直接影响机器人整体工作性能与使用效率,举足轻重。以下是六款模型,包含免费下载链接,更多资源请登录理工酷社区浏览与上传:
1、5爪机械手_末端执行器:适用于夹取小零件,提供零件与部件图,格式为solidworks。
2、锻件机械手_末端执行器:stp格式,用于锻件操作。
3、纸箱夹持器_工业机器人:适用于安川GP机器人的纸箱夹持,stp格式。
4、可以3D打印的机器人抓手_末端执行器:包含仿真动画视频与stp文件,可使用solidworks打开。
5、6轴机器人毕业设计:完整的solidworks零件图与装配图,包含物料清单,6轴机器人模型。
6、Soft Robotics 机器人夹爪开发者套件:包含2至6指设计模型,igs格式。
以上模型均可通过搜索标题在理工酷社区下载。社区已全新改版,提供大量技术资源与问答交流。首页更新有大量干货内容,欢迎收藏。理工酷旨在帮助工程师更高效地创造价值,内容涵盖计算机、机械、电子等学科与数字化、智能化相结合的领域,提供资源下载与问答功能。资源下载涉及源代码、图纸、模型等技术资源,同时支持上传原创资源进行内容变现。问答功能则促进技术交流与记录学习心得。
2024-11-29 20:56803人浏览
2024-11-29 20:512049人浏览
2024-11-29 19:381025人浏览
2024-11-29 19:19472人浏览
2024-11-29 18:441577人浏览
2024-11-29 18:382561人浏览
1.文华财经赢顺 · 条件单和止损单介绍文华财经赢顺 · 条件单和止损单介绍 设置的条件单、止损单能够上传至云端,即便电脑关机后,这些云端运行的单据依然保持有效。 一、条件单、止损单 点击
1.想做一个有拼团功 秒杀 砍价功能的小程序要多少钱?2.CRMEB开源打通版,值得一试的免费商城想做一个有拼团功 秒杀 砍价功能的小程序要多少钱? 开发一款带有拼团、秒杀、砍价的小程序主要有三种