嘉定企业网站开发,建设银行基金网站,项目管理软件哪个比较好,企业做网站预付账款会计分录由于Chrono的官方教程在一些细节方面解释的并不清楚#xff0c;自己做了一些尝试#xff0c;做学习总结。
1、关于物体材质
在介绍地型之前#xff0c;要初步了解chrono中关于材质的一些基本概念。
首先#xff0c;最基本的材质类是ChMaterialSurface,其进一步包括…由于Chrono的官方教程在一些细节方面解释的并不清楚自己做了一些尝试做学习总结。
1、关于物体材质
在介绍地型之前要初步了解chrono中关于材质的一些基本概念。
首先最基本的材质类是ChMaterialSurface,其进一步包括ChMaterialSurfaceNSC和SMC两个派生类。
ChMaterialSurface 从ChMaterialSurface.h中可以看出ChMaterialSurface的基本属性包括
静摩擦,static_friction,由SetSfriction和GetSfriction两个函数设置和获取值滑动摩擦sliding_friction (kinetic coefficient of friction)SetKfriction滚动摩擦rolling_friction (rolling coefficient), SetRollingFriction旋转摩擦spinning_frictionSetSpinningFriction回弹系数/恢复系数restitutionSetRestitution (它是描述在碰撞过程中两个物体分离后的相对速度与它们接触前的相对速度之比的物理量。恢复系数用于表征碰撞过程中能量的保留情况其值范围从0到1)其中静摩擦和滑动摩擦可以由SetFriction一个函数同时设置。
ChMaterialSurfaceNSC和SMC A ChSystemNSC for Non Smooth Contacts (NSC); in case of contacts a complementarity solver will take care of them using non smooth dynamics; this is very efficient even with large time steps.A ChSystemSMC for SMooth Contacts (SMC); with this system contacts are handled using penalty methods, i.e. contacts are deformable; 用中文进行解释 ChSystemNSC非光滑接触系统用于处理非光滑接触NSCNon-Smooth Contacts的物理系统。在这种系统中当接触发生时将使用互补性求解器complementarity solver来处理这些接触通过非光滑动力学non-smooth dynamics原理来解决问题。这种方法即使在使用较大时间步长的情况下也非常高效因为它不需要精确模拟接触表面之间的微小变形而是直接处理接触产生的力。ChSystemSMC光滑接触系统用于处理光滑接触SMCSmooth Contacts的物理系统。与NSC系统不同SMC系统通过惩罚方法penalty methods来处理接触问题即认为接触是可变形的。在这种情况下当两个物体接触时它们的接触表面可以产生变形仿真将考虑这种变形对接触力的影响。这种方法能够模拟更真实的物理行为特别是在需要精确考虑接触变形时但可能需要更小的时间步长以保持计算的准确性。 所以可以看出这两种只是在计算时是否精细考虑接触面造成的形变等因素SMC的相比更加复杂。
ChMaterialSurfaceNSC 在ChMaterialSurface的基础上新增属性凝聚力(Cohesion)最大值、接触阻尼(Damping)、正向接触柔顺性(Compliance)、切向接触柔顺性(ComplianceT)等不展开介绍。
ChMaterialSurfaceSMC 在ChMaterialSurface的基础上新增属性杨氏模量(Young’s Modulus)、泊松比(Possion Ration)等和形变相关的参数。具体内容参考头文件。
2、创建一个地型terrain
2.1 地型类别
Chrono: Terrain models 根据文档地型包括简单平面地型、刚性地型、CRG地型、可变SCM地型、含颗粒地型等。其中重点关注刚性地形。 刚性地形又包括box、obj文件、高程bmp文件三种形式。box的定义较为简单obj和bmp格式载入时没有本质的区别。
2.2 代码自定义地型
创建地形包括以下几个关键步骤绑定物理系统、创建地面材质并设定参数、创建地形尺寸参数并添加材质、纹理设置可选、初始化。
关键代码如下
RigidTerrain terrain(hmmwv.GetSystem());
auto patch_mat chrono_types::make_sharedChMaterialSurfaceSMC(); // 创建地面材质
patch_mat-SetFriction(0.9f); // 进行一些地面材质设定
patch_mat-SetRestitution(0.01f);
patch_mat-SetYoungModulus(2e7f);
auto patch terrain.AddPatch(patch_mat, ChCoordsys(ChVector(20, 0, 0), QUNIT), C:/Users/larrydong/Desktop/my_terrain.bmp, 64.0, 64.0, 0.0, 0.1); //
patch-SetTexture(vehicle::GetDataFile(terrain/textures/grass.jpg), 6.0f, 6.0f); // 贴图
terrain.Initialize(); // 初始化其中terrain.AddPatch这一步读取一个bmp的数字高程作为地型尺寸时64x64米最小值纯黑色像素设置为0米最大值纯白色像素设置为0.1米并指定位置和旋转。这个bmp的地型的地表材质就是刚刚上面介绍的表面材质。
2.3 从JSON文件载入地型
另一种方式是直接从json文件载入地型代码只需要一行
RigidTerrain terrain(hmmwv.GetSystem(), path/to/xxx.json);打开参考例子的json文件可以看出在json里面定义了所有有关的内容例如下面这个载入一个数字高程地型定义了位置、数字高程图、材料、可视化等内容和用代码自定义的方式一样。 在RigidTerrain初始化时如果发现给定了一个文件路径就会读取这个json文件查找匹配字段自动确定是哪种terrain并进行相关设置。需要注意的是json文件中的路径全部是通过vehicle::GetDataFile的方式读取的因此需要设定vehicle相关的path正确(chrono::vehicle::SetDataPath)。但我用JSON的方式载入无法正确载入地型和纹理贴图虽然路径设置对了目前还没搞清楚原因……
3、地型与车辆
在chrono中terrain是位于vechile模块下方因此地型的出现势必伴随着vehicle的设定。但本文没有涉及任何关于vehicle的内容下一篇再做介绍。