robosuite-自建夹具bug

场景:

robosuite 中创建自己的夹具

问题描述

bash 复制代码
Traceback (most recent call last):
  File "collect_human_demonstrations_auto.py", line 436, in <module>
    dataset_states_to_obs(output_filename, save_name+"-obs.hdf5")
  File "/home/idm/Shares/imitation/haier_environments/my_envs/utils/dataset_states_to_obs.py", line 221, in dataset_states_to_obs
    traj = extract_trajectory(
  File "/home/idm/Shares/imitation/haier_environments/my_envs/utils/dataset_states_to_obs.py", line 85, in extract_trajectory
    obs = env.reset_to(initial_state)
  File "/home/idm/Shares/imitation/robomimic/robomimic/envs/env_robosuite.py", line 157, in reset_to
    xml = self.env.edit_model_xml(state["model"])
  File "/home/idm/Shares/imitation/robosuite/robosuite/environments/base.py", line 536, in edit_model_xml
    print("old_path:", old_path)
ValueError: max() arg is an empty sequence

原因分析:

下列代码中有相应的代码路径及代码解释,其中,源码中存在一个 val == robosuite 的操作,即所有的文件路径中都需要包含 robosuite 这个词(没有查明原因),考虑这个ind 参数是与 new_pathold_path 相关,所以就动态的print 了一下,发现这俩变量是恒等的,暂时没有领悟到作者这样作的意图是什么;

python 复制代码
 def edit_model_xml(self, xml_str):
        """
        This function edits the model xml with custom changes, including resolving relative paths,
        applying changes retroactively to existing demonstration files, and other custom scripts.
        Environment subclasses should modify this function to add environment-specific xml editing features.
        Args:
            xml_str (str): Mujoco sim demonstration XML file as string
        Returns:
            str: Edited xml file as string
        """

        path = os.path.split(robosuite.__file__)[0]
        path_split = path.split("/")

        # replace mesh and texture file paths
        tree = ET.fromstring(xml_str)
        root = tree
        asset = root.find("asset")
        meshes = asset.findall("mesh")
        textures = asset.findall("texture")
        all_elements = meshes + textures

        for elem in all_elements:
            old_path = elem.get("file")
            if old_path is None:
                continue
            old_path_split = old_path.split("/")
            import ipdb; ipdb.set_trace()
            print("old_path:", old_path)
            print("old_path_split:", old_path_split)
            ind = max(loc for loc, val in enumerate(old_path_split) if val == "robosuite")  # last occurrence index
            new_path_split = path_split + old_path_split[ind + 1 :]
            new_path = "/".join(new_path_split)
            # print("new_path:", new_path)
            # if new_path == old_path:
                # print("new_path == old_path")
            # else:
                # print("new_path != old_path")

            # elem.set("file", new_path)
            elem.set("file", old_path)

        return ET.tostring(root, encoding="utf8").decode("utf8")

解决方案:

既然是恒等的,那就直接删掉就好,修改后的代码如下:

python 复制代码
 def edit_model_xml(self, xml_str):
        """
        This function edits the model xml with custom changes, including resolving relative paths,
        applying changes retroactively to existing demonstration files, and other custom scripts.
        Environment subclasses should modify this function to add environment-specific xml editing features.
        Args:
            xml_str (str): Mujoco sim demonstration XML file as string
        Returns:
            str: Edited xml file as string
        """

        path = os.path.split(robosuite.__file__)[0]
        path_split = path.split("/")

        # replace mesh and texture file paths
        tree = ET.fromstring(xml_str)
        root = tree
        asset = root.find("asset")
        meshes = asset.findall("mesh")
        textures = asset.findall("texture")
        all_elements = meshes + textures
        for elem in all_elements:
            old_path = elem.get("file")
            if old_path is None:
                continue
            elem.set("file", old_path)

        return ET.tostring(root, encoding="utf8").decode("utf8")
相关推荐
月墨江山10 分钟前
Ubuntu 20.04 使用 Issac Gym 进行宇树G1人形机器人进行强化学习训练(Linux仿真)
linux·ubuntu·机器人
szxinmai主板定制专家13 分钟前
RK3588+AI算力卡替代英伟达jetson方案,大算力,支持FPGA自定义扩展
arm开发·人工智能·分布式·fpga开发
ccut 第一混24 分钟前
c# 使用yolov5模型
人工智能·深度学习
PHOSKEY25 分钟前
应用案例丨3D工业相机如何实现「焊接全工序守护」
人工智能
纪伊路上盛名在1 小时前
python5.1 数据类dataclass
python·面向对象编程·oop
用户718841750781 小时前
深究 Python 中 int () 函数为何无法转换含小数点的字符串
python
喜欢吃豆1 小时前
从指令到智能:大型语言模型提示词工程与上下文工程的综合分析
人工智能·语言模型·自然语言处理·大模型·提示词工程·上下文工程
Fuly10241 小时前
prompt构建技巧
人工智能·prompt
on_pluto_1 小时前
LLaMA: Open and Efficient Foundation Language Models 论文阅读
python·机器学习
小二·1 小时前
mac下解压jar包
ide·python·pycharm