当前位置: 首页 > news >正文

【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的内容,下一篇再做介绍。

相关文章:

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

由于Chrono的官方教程在一些细节方面解释的并不清楚&#xff0c;自己做了一些尝试&#xff0c;做学习总结。 1、关于物体材质 在介绍地型之前&#xff0c;要初步了解chrono中关于材质的一些基本概念。 首先&#xff0c;最基本的材质类是ChMaterialSurface,其进一步包括&…...

【Linux】构建模块

&#x1f525;博客主页&#xff1a;PannLZ &#x1f38b;系列专栏&#xff1a;《Linux系统之路》 &#x1f94a;不要让自己再留有遗憾&#xff0c;加油吧&#xff01; 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…...

vscode远程连接失败

目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境&#xff0c;以前一直很好用。 直到最近重装了系统之后&#xff0c;发现vscode没法对云服务器进行连接了&#xff0c;即使在远程主机添加了本地的公钥也不行。直接报错:…...

C#系列-C#访问FTP服务器实现上传下载(8)

FTP Server是什么&#xff1f; FTP Server&#xff08;File Transfer Protocol Server&#xff09;&#xff0c;即文件传输协议服务器&#xff0c;是在互联网上提供文件存储和访问服务的计算机。它依照FTP协议提供服务&#xff0c;专门用来传输文件。 FTP Server允许不同的客…...

django中实现登录

Django中实现登录功能&#xff0c;通常涉及以下几个步骤&#xff1a; 一&#xff1a;实现步骤 1&#xff1a;创建用户模型&#xff1a;Django自带了一个用户认证系统&#xff0c;通常使用内置的User模型来管理用户。你也可以根据需要自定义用户模型。 2&#xff1a;创建登录表…...

【安卓操作系统——讲解】

安卓操作系统 安卓操作系统 安卓操作系统 安卓&#xff08;Android&#xff09;是一种基于Linux内核和其他开源软件的移动操作系统&#xff0c;主要用于触屏移动设备如智能手机和平板电脑。由Andy Rubin等人开发&#xff0c;最初的目的是创建一个先进的操作系统&#xff0c;用…...

Linux发行版全景:选择、使用和未来趋势

1. 引言 Linux操作系统的简介 Linux是一种自由和开源的操作系统内核&#xff0c;由Linus Torvalds在1991年首次发布。随着时间的发展&#xff0c;Linux已经成为世界上最流行的操作系统之一&#xff0c;广泛用于服务器、桌面电脑、移动设备以及嵌入式系统。Linux的主要特点是其…...

STM32 与 ARM 的联系

STM32 和 ARM 是两个不同的概念&#xff0c;但它们之间存在一定的联系。 STM32是一种微控制器产品&#xff0c;由意法半导体&#xff08;STMicroelectronics&#xff09;推出&#xff0c;其内核采用了 ARM Cortex-M 核。ARM 是一家英国芯片设计公司&#xff0c;专注于设计和许可…...

每日五道java面试题之java基础篇(二)

第一题. 为什么说 Java 语⾔“编译与解释并存”&#xff1f; ⾼级编程语⾔按照程序的执⾏⽅式分为编译型和解释型两种。 简单来说&#xff0c;编译型语⾔是指编译器针对特定的操作系统将源代码⼀次性翻译成可被该平台执⾏的机器码&#xff1b;解释型语⾔是指解释器对源程序逐…...

【Linux】Shell编程

Shell编程 目录 Shell编程1.shell基础1.输入重定向 & 输出重定向2.管道3.特殊字符(3.1)通配符(3.2)引号(3.3)注释符(#) 4.别名5.命令历史history 2.Shell脚本Shell脚本的执行方式(1)为脚本文件加上可执行权限,然后在命令行直接输入shell脚本文件名执行。(2)sh shell脚本名(…...

斯巴鲁Subaru EDI需求分析

斯巴鲁Subaru是日本运输集团斯巴鲁公司&#xff08;前身为富士重工&#xff09;的汽车制造部门&#xff0c;以性能而闻名&#xff0c;曾赢得 3 次世界拉力锦标赛和 10 次澳大利亚拉力锦标赛。 斯巴鲁Subaru EDI 需求分析 企业与斯巴鲁Subaru建立EDI连接&#xff0c;首先需要确…...

golang 集成sentry:PostgreSQL

本文介绍通过 pgx库集成sentry&#xff0c; pgx 特点是速度快&#xff0c;可以完全控制&#xff0c;并且支持所有 postgres 数据类型。 pgx地址&#xff1a; https://github.com/jackc/pgx 最简单的接入方式是自定义一个logger&#xff0c; 然后注入到pgx&#xff0c; 完整示…...

ubuntu20.04 安装mysql(8.x)

安装mysql命令 sudo apt-get install mysql-server安装完毕后&#xff0c;立即初始化密码 sudo mysql -u root # 初次进入终端无需密码ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY yourpasswd; # 设置本地root密码设置mysql远程登录 设置远程登录账…...

ChatGPT升级至GPT-4 Turbo:性能升级同时更为经济

ChatGPT升级至GPT-4 Turbo&#xff1a;性能升级同时更为经济 随着技术的进步&#xff0c;ChatGPT迎来了其最新的迭代版本——GPT-4 Turbo。这一最新版本不仅在性能上得到了显著提升&#xff0c;而且在成本效益上也更加引人注目。 性能提升 GPT-4 Turbo带来了诸多改进&#x…...

Android 粒子喷泉动效

一、前言&#xff1a; 在学习open gl es实现动效的时候&#xff0c;打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别&#xff0c;以及难易程度&#xff0c;因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理&#xff1a; 粒子动效本质上…...

fast.ai 深度学习笔记(一)

深度学习 2&#xff1a;第 1 部分第 1 课 原文&#xff1a;medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-1-602f73869197 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这…...

【机器学习】Ubuntu系统下CUDA驱动卸载及重装

目录 背景 驱动卸载 驱动安装 CUDA驱动安装 安装nvidia-smi 背景 这里包含显卡驱动和CUDA驱动&#xff0c;在如下场景下&#xff0c;我们需要卸载显卡驱动并重新安装。 在某些情况下需要对显卡驱动进行升级某些情况下&#xff08;如重启&#xff0c;或者调整系统配置等&a…...

相机图像质量研究(8)常见问题总结:光学结构对成像的影响--工厂调焦

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…...

【MySQL】数据库基础 -- 详解

一、什么是数据库 存储数据用文件就可以了&#xff0c;为什么还要弄个数据库? 一般的文件确实提供了数据的存储功能&#xff0c;但是文件并没有提供非常好的数据&#xff08;内容&#xff09;的管理能力&#xff08;用户角度&#xff09;。 文件保存数据有以下几个缺点&…...

零基础学Python之整合MySQL

Python 标准数据库接口为 Python DB-API&#xff0c;Python DB-API为开发人员提供了数据库应用编程接口。 不同的数据库你需要下载不同的DB API模块&#xff0c;例如你需要访问Oracle数据库和Mysql数据&#xff0c;你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...

Java多线程实现之Runnable接口深度解析

Java多线程实现之Runnable接口深度解析 一、Runnable接口概述1.1 接口定义1.2 与Thread类的关系1.3 使用Runnable接口的优势 二、Runnable接口的基本实现方式2.1 传统方式实现Runnable接口2.2 使用匿名内部类实现Runnable接口2.3 使用Lambda表达式实现Runnable接口 三、Runnabl…...

【threejs】每天一个小案例讲解:创建基本的3D场景

代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone&#xff0c;无需安装依赖&#xff0c;直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景&#xff08;Scene&#xff09; 使用 THREE.Scene(…...

C++课设:实现本地留言板系统(支持留言、搜索、标签、加密等)

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏介绍&#xff1a;《编程项目实战》 目录 一、项目功能概览与亮点分析1. 核心功能…...