Mujoco 基础:获取模型中所有 body 的 name, id 以及位姿

视频讲解:Mujoco 基础:获取模型中所有 body 的 name, id 以及位姿_哔哩哔哩_bilibili

代码仓库:https://github.com/LitchiCheng/mujoco-learning

今天介绍下一个很常用的接口:获取模型中所有的 body 的 name,id,以及位姿。

经常做测试时会遇到获取某个 body 的位姿以及利用该位姿,我们可以通过指定 body,先获取 id,再通过 id 获取 ee 的世界坐标系下的位姿,然后将位置作为对运动学的一个目标,同时可以在模型当中添加一些可视化的元素,更直观的来看自己的代码或者说这个实验是否达到预期,如下为常用来的接口或字段:

  1. body的数量

model.nbody

  1. 通过id获取名称

mujoco.mj_id2name

  1. 获取父 id

model.body_parentid

  1. 获取指定 id 的位置

data.body(body_id).xpos

如下代码为获取所有body的id、以及位姿

复制代码
import mujoco
import time
import mujoco_viewer
import numpy as np

class Test(mujoco_viewer.CustomViewer):
    def __init__(self, path):
        super().__init__(path, 3, azimuth=-45, elevation=-30)
        self.path = path
    
    def runBefore(self):
        for body_id in range(self.model.nbody):
            # 参数说明:model=模型,obj_type=对象类型(body),obj_id=body ID
            body_name = mujoco.mj_id2name(self.model, mujoco.mjtObj.mjOBJ_BODY, body_id)
            # 获取父 body ID
            parent_body_id = self.model.body_parentid[body_id]
            # print(f"{body_id:<10} {body_name:<20} {parent_body_id:<15}") 
            pos = self.data.body(body_id).xpos
            quat = self.data.body(body_id).xquat
            print(f"id:{body_id}, name: {body_name}, Position: {pos}, Quaternion: {quat}")
            
    def runFunc(self):
        placeholder = 0

test = Test("./model/franka_emika_panda/scene_pos.xml")
test.run_loop()

也可以通过在viewer中显示body看到实际的位置

相关推荐
卷福同学4 小时前
不用服务器,不用配环境,我10分钟上线了一个AI Agent
人工智能·后端·算法
码兄科技5 小时前
Java AI智能体开发实战:从零构建智能对话系统指南
java·开发语言·人工智能
Zik----6 小时前
CCswitch-code
人工智能
AI科技星7 小时前
全域谱分析:无穷维超复数信息场分形统一场论 ——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·机器学习·金融·乖乖数学·全域数学
stormzhangV7 小时前
为什么你的 AI 像智障
人工智能
聪明的一休丶7 小时前
VLLM v0.24.0 版本深度解析:新引擎、新架构与大规模服务全家桶升级
python·架构·vllm
ai产品老杨8 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
项目经理老王8 小时前
OpenClaw无捆绑安装包,安全纯净版AI助手部署
人工智能·安全
梦帮科技8 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
“码”力全开8 小时前
AI视频分析API性能优化指南
人工智能·性能优化·音视频