第08章 关节(Joints)

Simscape Multibody 答疑(三) 如何设定关节的初始角度?比如旋转关节(Revolute Joint)? 阅读详情

内容很多摘自
Aman JIANG(江超宇)翻译的Box2D v2.0.1 用户手册

第08章 关节(Joints)

8.1 关于

关节用于把物体约束到世界,或约束到其它物体上。在游戏中, 典型例子有木偶, 跷跷板和滑轮。用不同的方式将关节结合起来使用, 可以创造出有趣的运动。

有些关节提供了限制(limit), 使你可以控制运动的范围。有些关节还提供了马达(motor), 它可以以指定的速度驱动关节一直运动, 直到你指定了更大的力或扭矩来抵消这种运动。

关节马达有许多不同的用途。你可以使用关节来控制位置,只要提供一个与目标之距离成正比例的关节速度即可。你还可以模拟关节摩擦:将关节速度置零,并且提供一个小的、但有效的最大力或扭矩; 那么马达就会努力保持关节不动, 直到负载变得过大。

8.2 关节定义

每种关节类型都有各自的定义(definition), 但都派生自b2JointDef。所有关节都连接两个不同的物体, 其中一个物体有可能是静态的。关节也可以连接两个static或者kinematic类型的物体,但这没有任何实际用途,只会浪费处理器时间。

你可以为任何一种关节类型指定用户数据。你还可以提供一个标记, 用于防止用关节相连的物体发生碰撞,实际上, 这是默认行为。你也可以设置 collideConnected 布尔值来允许相连的物体发生碰撞。

很多关节定义需要你提供一些几何数据。一个关节常常需要一个锚点(anchor point)来定义,这是固定于相接物体中的点。Box2D要求这些点要在局部坐标系中指定, 这样, 即便当前物体的变化违反了关节约束(joint constraint),关节还是可以被指定 —— 在游戏保存或载入进度时这经常会发生。另外,有些关节定义需要默认的物体之间的相对角度。这样才能正确地约束旋转。

初始化几何数据可能有些乏味。所以很多关节提供了初始化函数,消除了大部分工作。然而,这些初始化函数通常只应用于原型, 在产品代码中应该直接地定义几何数据。这能使关节行为更具健壮性。

其余的关节定义数据依赖于关节的类型。下面我们来介绍它们。

8.3 关节工厂(Joint Factory)

关节使用world的工厂方法来创建和摧毁。这引入一个老问题:

注意:

不要使用new或malloc在栈(stack)或堆(heap)中创建关节。你想创建或摧毁物体和关节,必须使用b2World类中对应的创建或摧毁函数。

这里有个例子,展示了旋转关节(revolute joint)从创建到摧毁的过程:

b2RevoluteJointDef jointDef;

jointDef.body1 = myBody1;

jointDef.body2 = myBody2;

jointDef.anchorPoint =myBody1->GetCenterPosition();

b2RevoluteJoint* joint =myWorld->CreateJoint(&jointDef);

... do stuff ...

myWorld->DestroyJoint(joint);

joint = NULL;

一个很好的习惯: 当对象摧毁后,就将对应的指针清零。不清零的话,当你试图再次使用这个指针,程序在特定时候会崩溃。

关节的生命周期并不简单,要特别留心下面的警告,敲响警钟。

注意

物体被摧毁时,依附其上的关节也会被摧毁。

上面的注意并非时时必要。你可以组织好自己的游戏引擎,保证物体被摧毁前,依附其上的关节已经先被摧毁。这种情况下,你没有必要实现监听类(listener class), 去监听物体被摧毁的事件。更多细节请看隐式摧毁(Implicit Destruction)那小节。

8.4 使用关节

在许多模拟中,关节被创建之后,直到摧毁也不会再被访问。然而,关节中包含着很多有用的数据, 使你可以创建出丰富的模拟。

首先,你可以在关节上得到物体,锚点,以及用户数据。

b2Body* GetBody1();

b2Body* GetBody2();

b2Vec2 GetAnchor1();

b2Vec2 GetAnchor2();

void* GetUserData();

所有的关节都有反作用力和反扭矩,这个反作用力应用于 body2 的锚点之上。你可以用反作用力来折断关节(break joints),或引发其它游戏事件。这些函数可能需要做一些计算,所以没有必要就不要去调用它们。

b2Vec2 GetReactionForce();

float32 GetReactionTorque();

8.5 距离关节(Distance Joint)

距离关节是最简单的关节之一, 它是说, 两个物体上面各自有一点,两点之间的距离必须固定不变。当你指定一个距离关节时, 两个物体必须已在应有的位置上。之后,你指定世界坐标中的两个锚点。第一个锚点连接 到物体1,第二个锚点连接到物体2。这两点隐含了距离约束的长度。


这是一个距离关节定义的例子。这种情况下, 我们允许物体碰撞。

b2DistanceJointDef jointDef;

jointDef.Initialize(myBody1,myBody2, worldAnchorOnBody1, worldAnchorOnBody2);

jointDef.collideConnected = true;

距离关节也可以是软的,就像用橡皮筋来连接。看看testbed中的Web例子,可以知道出它有什么样的行为。

要使关节有弹性,可以调节一下两个参数:频率(frequency)和阻尼率(damping ratio)。将频率想象成谐振子(harmonic oscillator, 比如吉他弦)振动的快慢。频率使用单位赫兹(Hertz)来指定。典型情况下,关节频率要小于一半的时间步(time step)频率。比如每秒执行60次时间步, 距离关节的频率就要小于30赫兹。这样做的理由可以参考Nyquist频率理论。

阻尼率无单位,典型是在0到1之间, 也可以更大。1是阻尼率的临界值, 当阻尼率为1时,没有振动。

jointDef.frequencyHz = 4.0f;

jointDef.dampingRatio = 0.5f;

8.6 旋转关节(Revolute Joint)

旋转关节会强制两个物体共享一个锚点,即所谓铰接点。旋转关节只有一个自由度:两个物体的相对旋转。这称之为关节角。


要指定一个旋转关节,你需要提供两个物体以及世界坐标的一个锚点。初始化函数会假定物体已经在 应有位置了。

在此例中,两个物体被旋转关节连接起来, 铰接点为第一个物体的质心。

b2RevoluteJointDef jointDef;

jointDef.Initialize(myBody1,myBody2, myBody1->GetWorldCenter());

在 body2 逆时针旋转时,关节角为正。像所有 Box2D 中的角度一样,旋转角也是弧度制的。按规 定,使用Initialize() 创建关节时, 无论两个物体当前的角度怎样,旋转关节角都为0。

有时候,你可能需要控制关节角。为此,旋转关节可以随意地模拟关节限制和马达。

关节限制(joint limit)会强制关节角度保持在一定范围内。为此它会应用足够的扭矩。0应该在范围内,否则在开始模拟时关节会有点倾斜。

关节马达允许你指定关节的角速度(角度的时间导数),速度可正可负。马达可以有产生无限大的力,但这通常是没有必要。想想那个经典问题:

"当一个不可抵抗的力作用在一个不可移动的物体上, 会发生什么?"

我可以告诉你这并不有趣。所以你应该为关节马达提供一个最大扭矩。关节马达会维持在指定的速 度,除非其所需的扭矩超出了最大扭矩。当超出最大扭矩时,关节会慢下来,甚至会反向运动。

你还可以使用关节马达来模拟关节摩擦。只要把关节速度设为0,并将最大扭矩设得很小且有效。这样马达会试图阻止关节旋转, 除非有过大的负载。

这里是对上面旋转关节定义的修订; 这次,关节拥有一个限制以及一个马达,后者用于模拟摩擦。

b2RevoluteJointDef jointDef;

jointDef.Initialize(body1, body2,myBody1->GetWorldCenter());

jointDef.lowerAngle = -0.5f * b2_pi;// -90 degrees

jointDef.upperAngle = 0.25f * b2_pi;// 45 degrees

jointDef.enableLimit = true;

jointDef.maxMotorTorque = 10.0f;

jointDef.motorSpeed = 0.0f;

jointDef.enableMotor = true;

你可以访问旋转关节的关节角,速度,马达扭矩。

float32 GetJointAngle() const;

float32 GetJointSpeed() const;

float32 GetMotorTorque() const;

执行step后,你也可以更新马达的参数。

void SetMotorSpeed(float32 speed);

void SetMaxMotorTorque(float32torque);

关节马达有些有趣的功能。你可以在每个时间步中更新关节的速度,使得它像正弦波那样前后摆动,或者指定一个你想要的函数。

... Game Loop Begin ...

myJoint->SetMotorSpeed(cosf(0.5f* time));

... Game Loop End ...

你也可以用关节马达来跟踪你想要的关节角。比如:

... Game Loop Begin ...

float32 angleError =myJoint->GetJointAngle() - angleTarget;

float32 gain = 0.1f;

myJoint->SetMotorSpeed(-gain *angleError);

... Game Loop End ...

通常你的增益参数不能太大,不然关节会变得不稳定。

8.7 移动关节(Prismatic Joint)

移动关节(prismatic joint)允许两个物体沿指定轴相对移动,它会阻止相对旋转。因此,移动关节只有 一个自由度。


移动关节的定义有些类似于旋转关节;只是转动角度换成了平移,扭矩换成了力。以这样的类比,我们来看一个带有关节限制以及马达摩擦的移动关节定义:

b2PrismaticJointDef jointDef;

b2Vec2 worldAxis(1.0f, 0.0f);

jointDef.Initialize(myBody1,myBody2, myBody1->GetWorldCenter(), worldAxis);

jointDef.lowerTranslation = -5.0f;

jointDef.upperTranslation = 2.5f;

jointDef.enableLimit = true;

jointDef.motorForce = 1.0f;

jointDef.motorSpeed = 0.0f;

jointDef.enableMotor = true;

旋转关节隐含着一个从屏幕射出的轴,而移动关节明确地需要一个平行于屏幕的轴。这个轴会固定于 两个物体之上,沿着它们的运动方向。

就像旋转关节一样,当使用 Initialize() 创建移动关节时,移动为0。所以要确保0在你的移动限制范围内。

移动关节的用法跟旋转关节类似。这是相应的函数:

float32 GetJointTranslation() const;

float32 GetJointSpeed() const;

float32 GetMotorForce() const;

void SetMotorSpeed(float32 speed);

void SetMotorForce(float32 force);

8.8 滑轮关节(Pulley Joint)

滑轮关节用于创建理想的滑轮,它将两个物体接地(ground)并彼此连接。这样,当一个物体上升,另一个物体就会下降。滑轮的绳子长度取决于初始配置。

length1 + length2 == constant

你还可以提供一个系数(ratio)来模拟block and tackle,这会使滑轮一侧的运动比另一侧要快。同时,一侧的约 束力也比另一侧要小。你也可以用这个来模拟机械杠杆(mechanical leverage)。

length1 + ratio * length2 == constant

举个例子,如果系数是2,那么 length1 的变化会是 length2 的两倍。另外连接 body1 的绳子的约束力将会是连接 body2 绳子的一半。


滑轮的一侧完全展开时,另一侧的绳子长度为零,这可能会出问题。此时,约束方程将变得奇异(糟糕)。因此,滑轮关节约束了每一侧的最大长度。另外出于游戏原因你可能也希望控制这个最大长度。最大长度能提高稳定性,以及提供更多的控制。

这是一个滑轮定义的例子:

b2Vec2 anchor1 = myBody1->GetWorldCenter();

b2Vec2 anchor2 =myBody2->GetWorldCenter();

b2Vec2 groundAnchor1(p1.x, p1.y +10.0f);

b2Vec2 groundAnchor2(p2.x, p2.y +12.0f);

float32 ratio = 1.0f;

b2PulleyJointDef jointDef;

jointDef.Initialize(myBody1,myBody2, groundAnchor1, groundAnchor2, anchor1, anchor2, ratio);

jointDef.maxLength1 = 18.0f;

jointDef.maxLength2 = 20.0f;

滑轮关节提供函数得到当前长度。

float32 GetLength1() const;

float32 GetLength2() const;

8.9 齿轮关节(Gear Joint)

如果你想创建复杂的机械装置,可能需要齿轮。原则上,在 Box2D 中你可以用复杂的形状来模拟轮齿,但这并不十分高效,而且这样的工作可能有些乏味。另外,你还得小心地排列齿轮,保证轮齿能平稳地啮合。Box2D 提供了一个创建齿轮的更简单的方法:齿轮关节。


齿轮关节需要两个被旋转关节或移动关节接地(ground)的物体,你可以任意组合这些关节类型。另 外,创建旋转或移动关节时,Box2D需要地(ground)作为body1。

类似于滑轮的系数,你可以指定一个齿轮系数(ratio),齿轮系数可以为负。另外值得注意的是,当一 个是旋转关节(有角度的)而另一个是移动关节(平移)时,齿轮系数有长度单位,或者是长度单位的倒数。

coordinate1 + ratio * coordinate2 ==constant

这是一个齿轮关节的例子:

b2GearJointDef jointDef;

jointDef.body1 = myBody1;

jointDef.body2 = myBody2;

jointDef.joint1 = myRevoluteJoint;

jointDef.joint2 = myPrismaticJoint;

jointDef.ratio = 2.0f * b2_pi /myLength;

注意,齿轮关节依赖于两个其它关节,这是脆弱的:当其它关节被删除了会发生什么?

注意

齿轮关节总应该先于旋转或移动关节被删除。否则由于齿轮关节中的关节指针无效,你的代码将会因访问这些无效指针而导致崩溃。另外齿轮关节也应该在任何相关物体被删除之前删除。

8.10 鼠标关节(Mouse Joint)

在testbed例子中, 鼠标关节用于通过鼠标来操控物体。它试图将物体拖向当前鼠标光标的位置。而在旋转方面就没有限制。

 

鼠标关节的定义需要一个目标点(target point),最大力(maximum force),频率(frequency),阻尼率(damping ratio)。目标点最开始与物体的锚点重合。最大力用于防止在多个动态物体相互作用时,会有激烈反应。你想将最大力设为多大就多大。频率和阻尼率用于创造一种弹性效果,就跟距离关节类似。

许多用户为了游戏的可玩性,会试图修改鼠标关节。用户常常希望鼠标关节有即时反应,精确的去到某个点。这情况下,鼠标关节表现并不好。你可以考虑一下用kinematic物体来替代。

8.11 线性关节(Line Joint)

线性关节跟移动关节(prismatic joint)类似,但没有旋转方面的约束。线性关节可以用来模拟悬挂着的车轮。更多细节请看b2LineJoint.h。

8.12 焊接关节(Weld Joint)

焊接关节的用途是使两个物体不能相对运动。看看testbed中的Cantilever例子,可以知道焊接关节有怎么样的表现。

用焊接关节来定义一个可分裂物体,这想法很诱人。但是,由于Box2D的迭代求解,关节焊得有点不稳。 导致用焊接关节连接起来的物体会有所摆动。

创建可裂物体的更好方法是使用单个的物体,上面有很多fixture。 当物体分裂时,你可以删掉原物体其中一个fixture,并重新创建一个新的物体,带有那个fixture。参考一下testbed中的Breakable例子。

Simscape Multiboby学习笔记4——在Multibody中建立装配体(自由单摆) 如何在Simulink Multibody中建立一个自由单摆并模拟自由运动 阅读详情

相关推荐

Simulink RLS辨识实战:六轴机械臂单关节参数辨识误差分析与3种调试方案

本文详细探讨了Simulink RLS辨识在六轴机械臂单关节参数辨识中的应用,重点分析了参数辨识误差来源并提出了三种调试方案。通过模型补偿法、混合辨识法和多模型融合法,有效解决了线性化前后关节力矩计算不一致的问题,提升了机械臂动力学参数辨识的精度和可靠性。

weixin_30443075的博客 475

Box2D 物理引擎入门

转自:https://www.jianshu.com/p/7681431618ec 一、什么是Box2D Box2D是一个强大的开源物理游戏引擎,用来模拟2D刚体物体运动和碰撞,由Erin Catto早在2007年用C++语言开发。 Box2D集成了大量的物理力学和运动学的计算,并将物理模拟过程封装到类对象中,将对物体的操作,以简单友好的接口提供给开发者。我们只需要调用引擎中相应的对象或函数,就可以模拟现实生活中的加速、减速、抛物线运动、万有引力、碰撞反弹等等各种真实的物理运动。(引用百度百科) 简

auccy的博客 7159

MoveIt!运动学配置实战指南:kinematics.yaml核心参数详解

运动学求解器是机器人运动规划的底层基础,其性能直接决定机械臂能否稳定、快速、鲁棒地完成位姿解算。理解IK(逆运动学)原理,需从刚体变换与雅可比矩阵出发,结合机器人自由度、关节限位及任务需求,在数值稳定性、求解速度与精度之间做出工程权衡。KDL与LMA等主流插件并非通用替代品,而是针对不同拓扑结构(如6DOF非冗余vs 7DOF冗余)设计的专用求解策略;而kinematics_solver_search_resolution、timeout、attempts等参数,本质上是对物理编码器精度、控制周期与实时性约

652

Box2D v2.1.0用户手册翻译 - 第08章 关节(Joints)

内容很多摘自 Aman JIANG(江超宇)翻译的Box2D v2.0.1 用户手册 第08章 关节(Joints) 8.1 关于 关节用于把物体约束到世界,或约束到其它物体上。在游戏中, 典型例子有木偶, 跷跷板和滑轮。用不同的方式将关节结合起来使用, 可以创造出有趣的运动。 有些关节提供了限制(limit), 使你可以控制运动的范围

complex_ok的专栏 1万+

从零构建具身智能抓取框架:OpenClaw架构设计与MVP实现

在机器人学和人工智能领域,模块化架构设计是实现复杂系统的基础。其核心原理在于通过高内聚、低耦合的组件划分,将感知、规划、控制等核心功能解耦,从而提升系统的可维护性、可扩展性与开发效率。这种设计模式的技术价值在于,它允许开发者像搭积木一样灵活替换算法模块或适配不同硬件,极大地加速了从研究原型到工程部署的迭代过程。在具身智能和机器人操作等应用场景中,一个清晰的架构是构建能够完成“感知-规划-行动”闭环的智能体的基石。本文以开源项目OpenClaw为例,深入探讨了如何设计一个分层、模块化的机器人抓取框架,并详细阐

weixin_33834910的博客 330

Dummy机械臂 STM32F4+ESP32 双主控:6轴运动学算法移植与FreeRTOS任务拆分

本文详细介绍了Dummy机械臂基于STM32F4+ESP32双主控架构的6轴运动学算法移植与FreeRTOS任务拆分优化方案。通过硬件资源配置优化、矩阵运算加速、任务优先级划分及双主控协同工作等关键技术,实现了机械臂的高效实时控制,为嵌入式机器人开发提供了实用参考。

weixin_30954265的博客 304

Box2D一:基础知识

一、box2d基础知识 1、关于 Box2D 是一个用于游戏的 2D 刚体仿真库。从游戏的视角来看,物理引擎就是一个程序性动画(proceduralanimation)的系统,而不是由动画师去移动你的物体。 1、核心概念 刚体(rigid body) 一块十分坚硬的物质,它上面的任何两点之间的距离都是完全不变的。 形状(shape) 一块严格依附于物体(body)的 2D 碰撞...

weixin_30550081的博客 892

3D-Consistent姿态表示与运动合成技术解析

在计算机视觉与动画生成领域,3D姿态估计是理解人体运动的核心技术。相比传统2D关键点表示存在的视角歧义和遮挡问题,3D-Consistent方案通过圆柱体骨骼表示和分层架构设计,显著提升了运动合成的空间一致性。该技术采用改进的NLFPose进行3D关键点预测,结合解剖学约束和时序补全算法,在CMU MoCap数据集测试中将跨角色运动误差降低62%。工程实现上,通过Taichi实时渲染和DiT架构改进,在RTX 4090显卡上达到240FPS的影视级输出效率。典型应用场景包括虚拟角色动画、运动重定向和影视特效

weixin_28745525的博客 494

Box2D中文手册 第08章 关节(Joints)

8.1 关于 关节用于把物体约束到世界,或约束到其它物体上。在游戏中, 典型例子有木偶, 跷跷板和滑轮。用不同的方式将关节结合起来使用, 可以创造出有趣的运动。 有些关节提供了限制(limit), 使你可以控制运动的范围。有些关节还提供了马达(motor), 它可以以指定的速度驱动关节一直运动, 直到你指定了更大的力或扭矩来抵消这种运动。 关节马达有许多不同的用途。你可以使用关节...

weixin_30629977的博客 139

Articraft:基于多智能体协作的自动化可动3D资产生成系统

在机器人仿真、游戏开发和数字孪生等领域,构建可交互的3D模型是一项核心且复杂的工作。其原理在于,一个可动的模型不仅需要精确的几何形状,更需要定义部件间的运动学关系,即关节、连杆及其约束。传统上,这依赖于专家手动编写URDF等描述文件,过程繁琐且易错。Articraft项目通过引入多智能体协作范式,将这一复杂任务分解为需求解析、几何生成、运动学推理和URDF生成等模块,由多个“专家”智能体协同完成。这种架构设计,而非依赖单一模型,显著提升了系统的可解释性、可控性和对现有工具生态的利用效率。其技术价值在于,它让

weixin_34074740的博客 410

雷达回波仿真

文章目录前言一、基础理解1.慢时间维度和快时间维度2.脉冲压缩3.MTI4. 脉冲多普勒处理5.cacfar检测二、具体流程1.产生回波信息加入目标时延以及噪声2.解调回波得到基带信号3.脉冲压缩 MTI MTD cafar检测 前言 雷达算法仿真学习,主要流程包括生成目标回波,将基带信号加在载波上其次是加上目标信息和干扰信号后发射,解调回波信号得到基带信号然后MTI,MTD,最后再检测。 一、基础理解 1.慢时间维度和快时间维度 连续M个脉冲回波经过相干解调之后的基带数据形成的一个二维数据矩阵,.

qq_42961235的博客 1万+

Box2D v2.1.0用户手册(8)——关节(Joints)

第08章 关节(Joints) 8.1 关于 关节用于把物体约束到世界,或约束到其它物体上。在游戏中, 典型例子有木偶, 跷跷板和滑轮。用不同的方式将关节结合起来使用, 可以创造出有趣的运动。 有些关节提供了限制(limit), 使你可以控制运动的范围。有些关节还提供了马达(motor), 它可以以指定的速度驱动关节一直运动, 直到你指定了更大的力或扭矩来抵消这种

lincon的专栏 1199

ChatGPT Plus账号被降智?3个实用检测方法+终极解决方案(附国内支付指南)

本文针对ChatGPT Plus账号性能下降问题,提供了3个科学检测方法和系统级解决方案。通过详细分析症状、专业诊断技巧和优化策略,帮助用户有效应对GPT-4o等高级功能失效、响应质量下降等问题,特别包含国内用户关心的支付方案和账号管理建议。

weixin_42639633的博客 468

mujoco无人机实战建模(二)

我们先复习一下我们的建模顺序1.全局环境搭建 2.资源准备 3.骨架构建 4.定义自由度(Joints)5.添加形状(Geoms)6添加约束与传动 7 添加动力 8 添加观测如果有忘记的伙伴可以去看我的第一篇文章我们这篇文章完成。3骨架构建 4.定义自由度(Joints)5.添加形状(Geoms)一 <body>

lishiluhh的博客 627

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 396

避坑指南:在Ubuntu 22.04上配置UR5e与ROS2 Humble真机通信的完整流程

本文详细介绍了在Ubuntu 22.04上配置UR5e机械臂与ROS2 Humble真机通信的完整流程,包括环境准备、网络配置、URCap安装、ROS2驱动部署及控制器状态验证等关键步骤。特别针对常见问题如网络连接失败、驱动启动错误等提供了实用解决方案,帮助工程师高效完成UR5e与ROS2的集成工作。

weixin_30790841的博客 463

Godot 4.4 JoltPhysics集成实战:从原理到迁移的完整指南

物理引擎是游戏开发中模拟物体运动与交互的核心组件,其原理基于牛顿力学与碰撞检测算法,通过约束求解实现真实可信的物理效果。在游戏开发领域,物理引擎的技术价值在于为角色控制、物体交互、环境反馈提供底层支持,直接影响游戏的稳定性和沉浸感。Godot引擎原生集成的Godot Physics在易用性上表现良好,但在处理复杂堆叠、高速运动等场景时可能出现稳定性问题。JoltPhysics作为工业级物理引擎,以其确定性模拟和高效连续碰撞检测著称,能显著提升复杂物理场景的稳定性。本文聚焦于Godot 4.4中JoltPhy

weixin_30509393的博客 447

Jetson Thor平台JP7.0版本96712 GMSL相机驱动调试记录

摘要:本文档记录了在Thor Custom Board (JP7.0GA)上配置GMSL摄像头时遇到的视频流问题及调试过程。问题表现为视频设备(/dev/video11)能正常创建,但获取视频时出现"Internal data stream error",而相同配置在AGX Orin JP6.0上运行正常。通过梳理硬件拓扑、v4l2-ctl测试、提升时钟频率及分析内核日志,发现VI引擎未接收到帧数据包。调试步骤包括检查设备树冲突、调整I2C总线配置、修正通道名称,最终通过屏蔽传感器启动时

jzwjzw19900922的博客 1109

【个人学习记录】Isaac Sim 零基础学习(一)

NVIDIA Isaac Sim 是一个基于 Omniverse 平台的强大机器人仿真工具。凭借其高逼真的图像渲染能力和精准的 PhysX 物理引擎,它在机器人算法验证、具身智能训练以及合成数据生成等领域有着非常广泛的应用。这篇博客是我个人在 **Windows 操作系统**下从零开始学习 Isaac Sim 的一份记录与总结,主要是为了梳理和巩固自己的学习内容。由于初次接触,内容叙述上可能有所不足,但可以确保代码确实能跑通。若有错误虚心接受批评指正。

m0_74803265的博客 420

美的集团-数据挖掘工程师面试分享

美的集团-数据挖掘工程师面试分享

510

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

【YOLO11改进 - 检测头】Detect_LSCD检测头:量化的检测头,进一步提升模型的检测效率和精度

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 4094
上一篇: 第07章 物体(Bodies)
下一篇: 第09章 接触(Contacts)
从不喝茶
博客等级 码龄12年 10粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值