针对DiffHand

针对DiffHand,第1张

DiffHand:An End-to-End Differentiable Framework for Contact-Aware Robot Design算法概述

为了解决之前算法研究机械臂抓取和生成机械臂(包括机械手和关节)的算法分开来研究,比如有的控制算法很复杂,但是机械臂只是很普通常见的终端(grippers),或者是生成很复杂机械手,但是控制算法只是从上往下抓,导致这两者不能很好联系起来。

左边是普通机械臂,中间是DiffHand算法优化的机械臂,右边是可以3D打印的机械臂。

本算法将生成机械臂和抓取算法联合一起研究,即提出了一个完全可微的流程去联合优化机械臂的形态学和控制算法,这里面最重要的是基于可变性的形态参数化和一个可微的仿真器。这样的好处是可以把控制算法和机械臂形态学联系起来一起优化。

代码理解

源代码链接:https://github.com/eanswer/DiffHand
1.

import os
import sys

example_base_dir = os.path.abspath(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..'))
sys.path.append(example_base_dir)

导入两个系统
import module_name即import后直接接模块名。在这种情况下,Python会在两个地方寻找这个模块,第一是sys.path,os这个模块所在的目录就在列表sys.path中,一般安装的Python库的目录都可以在sys.path中找到,所以对于安装好的库,我们直接import即可。第二个地方就是运行文件所在的目录。
所以最后一句需要把当前目录添加到sys.path上。
2.

from parameterization_torch import Design as Design
from parameterization import Design as Design_np

from renderer import SimRenderer
import numpy as np
import scipy.optimize
import redmax_py as redmax
import os
import argparse
import time
from common import *
import torch
import matplotlib.pyplot as plt

from package_name import module_name。一般把模块组成的集合称为包(package)。与第一种写法类似,Python会在sys.path和运行文件目录这两个地方寻找包,然后导入包中名为module_name的模块。
import moudle_name as alias。有些module_name比较长,之后写它时较为麻烦,或者module_name会出现名字冲突,可以用as来给它改名,如import numpy as np。
3.
torch.set_default_dtype(torch.double)
设置pytorch中浮点数的默认类型为double类型
4.

if __name__ == '__main__':
    parser = argparse.ArgumentParser('')
    parser.add_argument("--model", type = str, default = 'rss_finger_flip')
    parser.add_argument('--record', action = 'store_true')
    parser.add_argument('--record-file-name', type = str, default = 'rss_finger_flip')
    parser.add_argument('--seed', type=int, default = 0)
    parser.add_argument('--save-dir', type=str, default = './results/tmp/')
    parser.add_argument('--no-design-optim', action='store_true', help = 'whether control-only')
    parser.add_argument('--visualize', type=str, default='True', help = 'whether visualize the simulation')
    parser.add_argument('--load-dir', type = str, default = None, help = 'load optimized parameters')
    parser.add_argument('--verbose', default = False, action = 'store_true', help = 'verbose output')
    parser.add_argument('--test-derivatives', default = False, action = 'store_true')

    asset_folder = os.path.abspath(os.path.join(example_base_dir, '..', 'assets'))

    args = parser.parse_args()

4.1
parser = argparse.ArgumentParser(''):使用 argparse 的第一步是创建一个 ArgumentParser 对象,ArgumentParser 对象包含将命令行解析成 Python 数据类型所需的全部信息。这里实例化对象为parser。
4.2
parser.add_argument("--model", type = str, default = 'rss_finger_flip'):给一个 ArgumentParser 添加程序参数信息是通过调用 add_argument() 方法完成的。type是要传入的参数的数据类型 help是该参数的提示信息。
action 命名参数指定了这个命令行参数应当如何处理,如'--verbose', default = False, action = 'store_true',如果运行代码时加了 --verbose ,那么 verbose为true,如果没加 --iverbose,那么verbose为False。
4.3
args = parser.parse_args():通常,这些调用指定 ArgumentParser 如何获取命令行字符串并将其转换为对象。这些信息在 parse_args() 调用时被存储和使用。然后,调用 parse_args() 将返回一个具有 integers 和 accumulate 两个属性的对象。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/868478.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存