Mujoco 如何添加 Apriltag 并获得相机视野进行识别

视频讲解:https://www.bilibili.com/video/BV1FgZyBqEpS/?vd_source=5ba34935b7845cd15c65ef62c64ba82f

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

在视觉应用中 Apriltag 作为一种常见的标签,极为方便且容易识别并得到位置及标签信息,常用于视觉定位或者标定使用。今天我们就如何添加该标签以及如何在 mujoco 中获得相机视野也就是可以看到 Apriltag 标签的"照片"。

在 scene.xml 中添加 assets 以及 worldbody 添加一个带有标签的小方块:

复制代码
  <asset>
    <texture type="skybox" builtin="gradient" rgb1="0.3 0.5 0.7" rgb2="0 0 0" width="512" height="3072"/>
    <texture type="2d" name="groundplane" builtin="checker" mark="edge" rgb1="0.2 0.3 0.4" rgb2="0.1 0.2 0.3"
      markrgb="0.8 0.8 0.8" width="300" height="300"/>
    <!-- 导入AprilTag纹理 -->
    <texture name="tag_0" type="2d" file="../misc/textures/tag36h11_0.png" width="100" height="100">

    </texture>
    <!-- 创建AprilTag材质 -->
    <material name="mat_tag_0" texture="tag_0" rgba="1 1 1 1"/>  <!-- rgba=白不透明 --> 
    <material name="groundplane" texture="groundplane" texuniform="true" texrepeat="5 5" reflectance="0.2"/>
  </asset>

  <worldbody>
    <light pos="0 0 1.5" dir="0 0 -1" directional="true"/>
    <geom name="floor" size="0 0 0.05" type="plane" material="groundplane"/>
    <camera name="rgb_camera" pos="0 0 1.5" euler="0 0 0" fovy="60"/>
    
    <!-- 单AprilTag -->
    <body name="apriltag_0" pos="0.5 0 0.05" euler="0 0 0">
      <geom name="tag_geom_0" type="box" size="0.05 0.05 0.05" material="mat_tag_0"/>
    </body>

  </worldbody>

我们使用tag36h11类型,这个可以在很多地方下载或者直接生成你想要的标签,这里放到可以找到的相对路径即可

大小为 0.1*0.1*0.1 的小方块,标签ID为 0

获得相机视野的代码可以参考很早前介绍的视频《MuJoCo 相机图片怎么拿?视角调整获取物体图片及实时显示(附代码)》,这里不同的是封装进了mujoco_viewer中方便调用以及"拿图",只需要一行即可,固定相机视野朝下(方便看到物体)

复制代码
image = self.getTrackingCameraImage(fix_elevation=-90)

apriltag 检测使用 pupil_apriltags,安装可以用 uv pip install pupil_apriltags

复制代码
from pupil_apriltags import Detector
self.detector = Detector(families="tag36h11",
                            nthreads=1,
                            quad_decimate=1.0,
                            refine_edges=1)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
tags = self.detector.detect(gray_image)
for tag in tags:
    print(f"Detected tag ID: {tag.tag_id}, Center: {tag.center}")

将mujoco中获得的图转成灰度图后使用detect即可,主要指定类型为tag36h11,完整代码如下:

复制代码
import src.mujoco_viewer as mujoco_viewer
import time
import mujoco
import cv2
from pupil_apriltags import Detector

class PandaEnv(mujoco_viewer.CustomViewer):
    def __init__(self, path):
        super().__init__(path, 3, azimuth=-45, elevation=-30)
        self.path = path
    
    def runBefore(self):
        self.initial_pos = self.model.qpos0.copy()
        # 初始化 AprilTag 检测器
        self.detector = Detector(families="tag36h11",
                            nthreads=1,
                            quad_decimate=1.0,
                            refine_edges=1)

    def runFunc(self):
        image = self.getTrackingCameraImage(fix_elevation=-90)
        gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        tags = self.detector.detect(gray_image)
        for tag in tags:
            print(f"Detected tag ID: {tag.tag_id}, Center: {tag.center}")

if __name__ == "__main__":
    env = PandaEnv("./model/franka_emika_panda/scene_with_apriltag.xml")
    env.run_loop()
相关推荐
Setsuna_F_Seiei2 小时前
前端的 AI 学习之路 02 之 Provider 与 Structured Output - 规范化模型输入输出
人工智能·agent·ai编程
JavaPub-rodert3 小时前
王仕宇RAG 实战教程(二):从 0 搭建一个可运行的 RAG 知识库——Embedding、Qdrant 与问答实战
人工智能·embedding
Setsuna_F_Seiei3 小时前
前端的 AI 学习之路 01 之 Agent API 调用 - 和 Agent 的基础对话
前端·人工智能·ai编程
咔咔学姐kk4 小时前
小白程序员必收藏:轻松入门AI Agent开发,大厂校招新风口!
人工智能·深度学习·ai·程序员·大模型·就业·大模型学习
小陈的进阶之路4 小时前
Claude Code辅助测试:导入篇skills
python·自动化
2601_967097224 小时前
园区巡检机器人推荐:4项评估维度与主流产品横评
大数据·人工智能·信息可视化
stuartevil4 小时前
零基础怎么用AI文生漫剧做出一条完整视频
人工智能·音视频
深漂的华哥4 小时前
Ruoyi-Plus前后端分离场景下,数据加密传输
java·spring boot·后端·开源·maven·ruoyi
极客猴子4 小时前
能提取抖音视频文案的APP推荐:短视频文案工具合集
人工智能·智能手机·音视频·语音识别
sel_95 小时前
【强化学习】Hands-on Modern RL项目实践|OPD 算法完整解析
人工智能·深度学习·算法·机器学习·语言模型