【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 是一个规范. 它…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
