【Chrono Engine学习总结】3-地型terrain

由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。

1、关于物体材质

在介绍地型之前,要初步了解chrono中关于材质的一些基本概念。

在这里插入图片描述首先,最基本的材质类是ChMaterialSurface,其进一步包括:ChMaterialSurfaceNSCSMC两个派生类。

ChMaterialSurface
ChMaterialSurface.h中可以看出,ChMaterialSurface的基本属性包括:

  • 静摩擦,static_friction,由SetSfrictionGetSfriction两个函数设置和获取值
  • 滑动摩擦,sliding_friction (kinetic coefficient of friction),SetKfriction
  • 滚动摩擦,rolling_friction (rolling coefficient), SetRollingFriction
  • 旋转摩擦,spinning_friction,SetSpinningFriction
  • 回弹系数/恢复系数,restitution,SetRestitution (它是描述在碰撞过程中,两个物体分离后的相对速度与它们接触前的相对速度之比的物理量。恢复系数用于表征碰撞过程中能量的保留情况,其值范围从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(非光滑接触系统):用于处理非光滑接触(NSC,Non-Smooth Contacts)的物理系统。在这种系统中,当接触发生时,将使用互补性求解器(complementarity solver)来处理这些接触,通过非光滑动力学(non-smooth dynamics)原理来解决问题。这种方法即使在使用较大时间步长的情况下也非常高效,因为它不需要精确模拟接触表面之间的微小变形,而是直接处理接触产生的力。
  • ChSystemSMC(光滑接触系统):用于处理光滑接触(SMC,Smooth 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_shared<ChMaterialSurfaceSMC>();	// 创建地面材质
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的内容,下一篇再做介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/678015.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原生JS使用PrintJs进行表格打印 -- 遇到的问题总结

需求1&#xff1a;表格自动分页之后&#xff0c;表头在每一页都需要显示 html中表头增加 thead 标签 css样式新增&#xff1a; thead {display: table-header-group; /* 这个属性使thead总是在新的page-break之后重新开始 */ }需求2&#xff1a;表格自动分页之后&#xff0c;…

数据可视化之维恩图 Venn diagram

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 维恩图&#xff08;Venn diagram&#xff09;&#xff0c;也叫文氏图或韦恩图&#xff0c;是一种关系型图表&#xff0c;用于显示元素集合之间的重叠区…

购物|电商购物小程序|基于微信小程序的购物系统设计与实现(源码+数据库+文档)

电商购物小程序目录 目录 基于微信小程序的购物系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户前台功能实现 2、管理员后台功能实现 四、数据库设计 1、实体ER图 2、具体的表设计如下所示&#xff1a; 五、核心代码 六、论文参考 七、最新计算机毕设…

VSTO打包Word插件WPS也支持

启动AdvancedInstallerPortable.exe打包软件 选择“加载项” 选择“office加载项”之后点“创建项目” 四、输入自已的插件名和公司名 任选一种包类型 五、选择包的保存位置 勾选“vsto office加载项” 六、选择要打包的项目debug文件夹 选择相应版本 配置相应环境 选择语言 添…

微服务架构RabbitMQ实现CQRS模式

在现代软件开发中,微服务架构和CQRS模式都是备受关注的技术趋势。微服务架构通过将应用程序拆分为一系列小型、自治的服务,提供了更好的可伸缩性和灵活性。而CQRS模式则通过将读操作和写操作分离,优化了系统的性能和可维护性。本文小编将为大家介绍如何在ASP.NET Core微服务…

在 Next 中, ORM 框架 Prisma 使用

Prisma 介绍 Prisma 是一个 ORM 框架&#xff0c;主要用于 Node.js 或 TypeScript 作为后端开发的应用&#xff0c;主要有三部分组成&#xff1a; Prisma Client&#xff1a;自动生成且类型安全的查询构建器&#xff0c;适用于 Nodex.js 和 TS&#xff1b;Prisma Migrate: 迁…

初步探索Pyglet库:打造轻量级多媒体与游戏开发利器

目录 pyglet库 功能特点 安装和导入 安装 导入 基本代码框架 导入模块 创建窗口 创建控件 定义事件 运行应用 程序界面 运行结果 完整代码 标签控件 常用事件 窗口事件 鼠标事件 键盘事件 文本事件 其它场景 网页标签 音乐播放 图片显示 祝大家新…

视频直播系统架构的设计与实现

视频直播系统作为一种实时性强、用户互动性高的应用&#xff0c;其架构设计至关重要。本文将介绍如何设计和实现一个稳定、高性能的直播系统架构&#xff0c;以提供良好的用户体验和可靠的服务。 1. 系统架构概述 - 介绍视频直播系统的整体架构&#xff0c;包括客户端、服务…

01-Spring实现重试和降级机制

主要用于在模块调用中&#xff0c;出现失败、异常情况下&#xff0c;仍需要进行重复调用。并且在最终调用失败时&#xff0c;可以采用降级措施&#xff0c;返回一般结果。 1、重试机制 我们采用spring 提供的retry 插件&#xff0c;其原理采用aop机制&#xff0c;所以需要额外…

SERVLET间通信

在Web应用程序中,应用程序的servlet等各种组件之间可能需要通信以便处理客户机请求。例如,假设Web应用程序中有一个servlet显示组织的版权信息。您可以使用各种servelt通信技术将此servlet的内容纳入到需要显示版权信息的所有其他应用程序servlet中。同样,如果处理请求时发生…

基于JavaWeb的网上订餐项目

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88825723?spm1001.2014.3001.5503 Java项目-16 浏览商品&#xff0c;会员登录&#xff0c;添加购物车&#xff0c;进行配送等功能 文件代码功能介绍 1.Src下的java文件存放的我们后端的…

JDK新特性

JDK新特性 函数式接口和Lambda 表达式Stream流操作新日期API操作其他新特性 Lambda 是一个匿名函数&#xff0c;我们可以把 Lambda表达式理解为是一段可以传递的代码&#xff08;将代码 像数据一样进行传递&#xff09;。可以写出更简洁、更 灵活的代码。作为一种更紧凑的代码…

15000+POC漏洞扫描工具

0x01 工具介绍 scan4all拥有15000PoC漏洞扫描&#xff0c;23种应用弱口令爆破&#xff0c;7000Web指纹&#xff0c;146种协议&#xff0c;90000规则Port扫描。集成 vscan、nuclei、ksubdomain、subfinder等&#xff0c;充分自动化进行扫描。是一款Fuzz、HW打点、BugBounty神器…

CSP-202009-2-风险人群筛查

CSP-202009-2-风险人群筛查 解题思路 检查是否经过高危区 (x > x1) && (x < x2) && (y > y1) && (y < y2) 检查坐标是否在高危区域内&#xff0c; !isPassed 确保仅在第一次经过高危区域时增加 pass 计数。如果条件成立&#xff0c;表示…

java设计模式之中介者模式

中介者模式&#xff08;Mediator Pattern&#xff09; 基本介绍 中介者模式&#xff0c;用一个中介对象来封装一系列的对象交互。中介者使各个对象不需要显式地相互引用&#xff0c;从而使其解耦松散。而且可以独立地改变它们之间的交互。中介者模式属于行为型模式。比如MVC模…

C#,欧拉常数(Euler Constant)的算法与源代码

1 欧拉常数 欧拉常数最先由瑞士数学家莱昂哈德 欧拉 (Leonhard Euler) 在1735年发表的文章《De Progressionibus harmonicus observationes》中定义。欧拉曾经使用γ作为它的符号&#xff0c;并计算出了它的前6位&#xff0c;1761年他又将该值计算到了16位 。 欧拉常数最先由瑞…

2/10 BFS初探

其实在我看来解决全排列问题&#xff0c;核心还是顺序&#xff0c;想清楚结束条件&#xff0c;然后输出&#xff0c;以n3为例 #include<iostream> using namespace std; const int N 10; int path[N];//保存序列 int state[N];//数字是否被用过 int n; void dfs(int u) …

ubuntu彻底卸载cuda 重新安装cuda

sudo apt-get --purge remove "*cublas*" "*cufft*" "*curand*" \"*cusolver*" "*cusparse*" "*npp*" "*nvjpeg*" "cuda*" "nsight*" cuda10以上 cd /usr/local/cuda-xx.x/bin/ s…

Mac电脑清空特别大型旧文件如何一键清理?

在我们的数字生活中&#xff0c;Mac电脑常常承载着大量个人资料和重要文件。但当我们决定把自己的Mac送给亲人或朋友使用时&#xff0c;面临的首要任务便是彻底且高效地清空所有个人数据&#xff0c;以保证隐私安全。传统的删除方法虽然简单&#xff0c;但往往不能彻底清除所有…

问题:2、计算机网络的目标是实现________。 #媒体#知识分享

问题&#xff1a;2、计算机网络的目标是实现________。 A&#xff0e;数据处理 B&#xff0e;信息传输与数据处理 C&#xff0e;资源共享与信息传输 D&#xff0e;文献查询 参考答案如图所示