栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python解析URDF文件教程

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python解析URDF文件教程

python中解析URDF文件的功能包有很多,最常用的可能是集成在ROS/ROS2中的urdf_parser_py,其次是KDL中将URDF转成KDL模型的kdl_parser,此外,webots官方的urdf2webots改改也能用~

但是,以上功能包都太繁琐了,想要轻量级还是自己写吧。

基于xml.dom.minidom,从URDF文件中读取动力学参数的案例如下:

#!/usr/bin/python3
# _*_ coding: UTF-8 _*_
#
# Copyright (C) 2022, by Leon(罗伯特祥)
#

import xml.dom.minidom
import os
import numpy as np

def getInertial(joint_id,xml_obj):
    """ get inertial data. """
    mass = xml_obj.getElementsByTagName("mass")[joint_id].getAttribute("value")
    ixx  = xml_obj.getElementsByTagName("inertia")[joint_id].getAttribute("ixx")
    ixy  = xml_obj.getElementsByTagName("inertia")[joint_id].getAttribute("ixy")
    ixz  = xml_obj.getElementsByTagName("inertia")[joint_id].getAttribute("ixz")
    iyy  = xml_obj.getElementsByTagName("inertia")[joint_id].getAttribute("iyy")
    iyz  = xml_obj.getElementsByTagName("inertia")[joint_id].getAttribute("iyz")
    izz  = xml_obj.getElementsByTagName("inertia")[joint_id].getAttribute("izz")
    xyz  = xml_obj.getElementsByTagName("inertial")[joint_id].getElementsByTagName("origin")[0].getAttribute("xyz")
    xyz  = xyz.split(" ")
    xyz  = np.array(xyz,dtype=np.float32)
    data = [float(mass),float(ixx),float(iyy),float(izz),float(ixy),float(ixz),float(iyz),xyz[0],xyz[1],xyz[2]]
    return data

if __name__ == '__main__':
    if os.path.exists("ec66.urdf"):                            # urdf文件预处理
        os.replace("ec66.urdf","ec66.xml")

    xmlDoc = xml.dom.minidom.parse("ec66.xml")                 # 加载文件
    link_count  = xmlDoc.getElementsByTagName("link").length   # 统计 link  数量
    joint_count = xmlDoc.getElementsByTagName("joint").length  # 统计 joint 数量
    print(joint_count)
	data = getInertial(1,xmlDoc)                               # 获取 link1 动力学参数
	print(data[0])                                             # 打印 link1 mass值
	print(data[7])                                             # 打印 link1 质心x
	print(data[8])                                             # 打印 link1 质心y
	print(data[9])                                             # 打印 link1 质心z

参考文献:

  • https://www.runoob.com/dom/dom-tutorial.html
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866738.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号