【Chrono Engine学习总结】3-地型terrain
由于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_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的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 1、关于物体材质 在介绍地型之前,要初步了解chrono中关于材质的一些基本概念。 首先,最基本的材质类是ChMaterialSurface,其进一步包括&…...
【Linux】构建模块
🔥博客主页:PannLZ 🎋系列专栏:《Linux系统之路》 🥊不要让自己再留有遗憾,加油吧! 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…...
vscode远程连接失败
目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境,以前一直很好用。 直到最近重装了系统之后,发现vscode没法对云服务器进行连接了,即使在远程主机添加了本地的公钥也不行。直接报错:…...
C#系列-C#访问FTP服务器实现上传下载(8)
FTP Server是什么? FTP Server(File Transfer Protocol Server),即文件传输协议服务器,是在互联网上提供文件存储和访问服务的计算机。它依照FTP协议提供服务,专门用来传输文件。 FTP Server允许不同的客…...
django中实现登录
Django中实现登录功能,通常涉及以下几个步骤: 一:实现步骤 1:创建用户模型:Django自带了一个用户认证系统,通常使用内置的User模型来管理用户。你也可以根据需要自定义用户模型。 2:创建登录表…...
【安卓操作系统——讲解】
安卓操作系统 安卓操作系统 安卓操作系统 安卓(Android)是一种基于Linux内核和其他开源软件的移动操作系统,主要用于触屏移动设备如智能手机和平板电脑。由Andy Rubin等人开发,最初的目的是创建一个先进的操作系统,用…...
Linux发行版全景:选择、使用和未来趋势
1. 引言 Linux操作系统的简介 Linux是一种自由和开源的操作系统内核,由Linus Torvalds在1991年首次发布。随着时间的发展,Linux已经成为世界上最流行的操作系统之一,广泛用于服务器、桌面电脑、移动设备以及嵌入式系统。Linux的主要特点是其…...
STM32 与 ARM 的联系
STM32 和 ARM 是两个不同的概念,但它们之间存在一定的联系。 STM32是一种微控制器产品,由意法半导体(STMicroelectronics)推出,其内核采用了 ARM Cortex-M 核。ARM 是一家英国芯片设计公司,专注于设计和许可…...
每日五道java面试题之java基础篇(二)
第一题. 为什么说 Java 语⾔“编译与解释并存”? ⾼级编程语⾔按照程序的执⾏⽅式分为编译型和解释型两种。 简单来说,编译型语⾔是指编译器针对特定的操作系统将源代码⼀次性翻译成可被该平台执⾏的机器码;解释型语⾔是指解释器对源程序逐…...
【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是日本运输集团斯巴鲁公司(前身为富士重工)的汽车制造部门,以性能而闻名,曾赢得 3 次世界拉力锦标赛和 10 次澳大利亚拉力锦标赛。 斯巴鲁Subaru EDI 需求分析 企业与斯巴鲁Subaru建立EDI连接,首先需要确…...
golang 集成sentry:PostgreSQL
本文介绍通过 pgx库集成sentry, pgx 特点是速度快,可以完全控制,并且支持所有 postgres 数据类型。 pgx地址: https://github.com/jackc/pgx 最简单的接入方式是自定义一个logger, 然后注入到pgx, 完整示…...
ubuntu20.04 安装mysql(8.x)
安装mysql命令 sudo apt-get install mysql-server安装完毕后,立即初始化密码 sudo mysql -u root # 初次进入终端无需密码ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY yourpasswd; # 设置本地root密码设置mysql远程登录 设置远程登录账…...
ChatGPT升级至GPT-4 Turbo:性能升级同时更为经济
ChatGPT升级至GPT-4 Turbo:性能升级同时更为经济 随着技术的进步,ChatGPT迎来了其最新的迭代版本——GPT-4 Turbo。这一最新版本不仅在性能上得到了显著提升,而且在成本效益上也更加引人注目。 性能提升 GPT-4 Turbo带来了诸多改进&#x…...
Android 粒子喷泉动效
一、前言: 在学习open gl es实现动效的时候,打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别,以及难易程度,因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理: 粒子动效本质上…...
fast.ai 深度学习笔记(一)
深度学习 2:第 1 部分第 1 课 原文:medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-1-602f73869197 译者:飞龙 协议:CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它,这…...
【机器学习】Ubuntu系统下CUDA驱动卸载及重装
目录 背景 驱动卸载 驱动安装 CUDA驱动安装 安装nvidia-smi 背景 这里包含显卡驱动和CUDA驱动,在如下场景下,我们需要卸载显卡驱动并重新安装。 在某些情况下需要对显卡驱动进行升级某些情况下(如重启,或者调整系统配置等&a…...
相机图像质量研究(8)常见问题总结:光学结构对成像的影响--工厂调焦
系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...
【MySQL】数据库基础 -- 详解
一、什么是数据库 存储数据用文件就可以了,为什么还要弄个数据库? 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据(内容)的管理能力(用户角度)。 文件保存数据有以下几个缺点&…...
零基础学Python之整合MySQL
Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口。 不同的数据库你需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。 DB-API 是一个规范. 它…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
在树莓派上添加音频输入设备的几种方法
在树莓派上添加音频输入设备可以通过以下步骤完成,具体方法取决于设备类型(如USB麦克风、3.5mm接口麦克风或HDMI音频输入)。以下是详细指南: 1. 连接音频输入设备 USB麦克风/声卡:直接插入树莓派的USB接口。3.5mm麦克…...
Vue 模板语句的数据来源
🧩 Vue 模板语句的数据来源:全方位解析 Vue 模板(<template> 部分)中的表达式、指令绑定(如 v-bind, v-on)和插值({{ }})都在一个特定的作用域内求值。这个作用域由当前 组件…...
