首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python入门到放弃(七)-基本数据类型之dcit字典

python入门到放弃(七)-基本数据类型之dcit字典

作者头像
老油条IT记
发布于 2020-03-20 13:07:50
发布于 2020-03-20 13:07:50
64300
代码可运行
举报
运行总次数:0
代码可运行

1.概述

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
字典是python中唯一的一个映射类型,以{}大括号括起来的键值对组成

字典中的key是唯一的,必须是可hash,不可变的数据类型

语法:{key1:value,key2:value}

#扩展:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
可哈希(不可变)的数据类型:int,str,tuple,bool
不可哈希(可变)的数据类型:list,dict,set

#先来看看dict字典的源码写了什么,方法:按ctrl+鼠标左键点dict

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class dict(object):
    """
    dict() -> new empty dictionary
    dict(mapping) -> new dictionary initialized from a mapping object's
        (key, value) pairs
    dict(iterable) -> new dictionary initialized as if via:
        d = {}
        for k, v in iterable:
            d[k] = v
    dict(**kwargs) -> new dictionary initialized with the name=value pairs
        in the keyword argument list.  For example:  dict(one=1, two=2)
    """

    def clear(self): # real signature unknown; restored from __doc__
        """ 清除内容 """
        """ D.clear() -> None.  Remove all items from D. """
        pass

    def copy(self): # real signature unknown; restored from __doc__
        """ 浅拷贝 """
        """ D.copy() -> a shallow copy of D """
        pass

    @staticmethod # known case
    def fromkeys(S, v=None): # real signature unknown; restored from __doc__
        """
        dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.
        v defaults to None.
        """
        pass

    def get(self, k, d=None): # real signature unknown; restored from __doc__
        """ 根据key获取值,d是默认值 """
        """ D.get(k[,d]) -> D[k] if k in D, else d.  d defaults to None. """
        pass

    def has_key(self, k): # real signature unknown; restored from __doc__
        """ 是否有key """
        """ D.has_key(k) -> True if D has a key k, else False """
        return False

    def items(self): # real signature unknown; restored from __doc__
        """ 所有项的列表形式 """
        """ D.items() -> list of D's (key, value) pairs, as 2-tuples """
        return []

    def iteritems(self): # real signature unknown; restored from __doc__
        """ 项可迭代 """
        """ D.iteritems() -> an iterator over the (key, value) items of D """
        pass

    def iterkeys(self): # real signature unknown; restored from __doc__
        """ key可迭代 """
        """ D.iterkeys() -> an iterator over the keys of D """
        pass

    def itervalues(self): # real signature unknown; restored from __doc__
        """ value可迭代 """
        """ D.itervalues() -> an iterator over the values of D """
        pass

    def keys(self): # real signature unknown; restored from __doc__
        """ 所有的key列表 """
        """ D.keys() -> list of D's keys """
        return []

    def pop(self, k, d=None): # real signature unknown; restored from __doc__
        """ 获取并在字典中移除 """
        """
        D.pop(k[,d]) -> v, remove specified key and return the corresponding value.
        If key is not found, d is returned if given, otherwise KeyError is raised
        """
        pass

    def popitem(self): # real signature unknown; restored from __doc__
        """ 获取并在字典中移除 """
        """
        D.popitem() -> (k, v), remove and return some (key, value) pair as a
        2-tuple; but raise KeyError if D is empty.
        """
        pass

    def setdefault(self, k, d=None): # real signature unknown; restored from __doc__
        """ 如果key不存在,则创建,如果存在,则返回已存在的值且不修改 """
        """ D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D """
        pass

    def update(self, E=None, **F): # known special case of dict.update
        """ 更新
            {'name':'alex', 'age': 18000}
            [('name','sbsbsb'),]
        """
        """
        D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
        If E present and has a .keys() method, does:     for k in E: D[k] = E[k]
        If E present and lacks .keys() method, does:     for (k, v) in E: D[k] = v
        In either case, this is followed by: for k in F: D[k] = F[k]
        """
        pass

    def values(self): # real signature unknown; restored from __doc__
        """ 所有的值 """
        """ D.values() -> list of D's values """
        return []

    def viewitems(self): # real signature unknown; restored from __doc__
        """ 所有项,只是将内容保存至view对象中 """
        """ D.viewitems() -> a set-like object providing a view on D's items """
        pass

    def viewkeys(self): # real signature unknown; restored from __doc__
        """ D.viewkeys() -> a set-like object providing a view on D's keys """
        pass

    def viewvalues(self): # real signature unknown; restored from __doc__
        """ D.viewvalues() -> an object providing a view on D's values """
        pass

    def __cmp__(self, y): # real signature unknown; restored from __doc__
        """ x.__cmp__(y) <==> cmp(x,y) """
        pass

    def __contains__(self, k): # real signature unknown; restored from __doc__
        """ D.__contains__(k) -> True if D has a key k, else False """
        return False

    def __delitem__(self, y): # real signature unknown; restored from __doc__
        """ x.__delitem__(y) <==> del x[y] """
        pass

    def __eq__(self, y): # real signature unknown; restored from __doc__
        """ x.__eq__(y) <==> x==y """
        pass

    def __getattribute__(self, name): # real signature unknown; restored from __doc__
        """ x.__getattribute__('name') <==> x.name """
        pass

    def __getitem__(self, y): # real signature unknown; restored from __doc__
        """ x.__getitem__(y) <==> x[y] """
        pass

    def __ge__(self, y): # real signature unknown; restored from __doc__
        """ x.__ge__(y) <==> x>=y """
        pass

    def __gt__(self, y): # real signature unknown; restored from __doc__
        """ x.__gt__(y) <==> x>y """
        pass

    def __init__(self, seq=None, **kwargs): # known special case of dict.__init__
        """
        dict() -> new empty dictionary
        dict(mapping) -> new dictionary initialized from a mapping object's
            (key, value) pairs
        dict(iterable) -> new dictionary initialized as if via:
            d = {}
            for k, v in iterable:
                d[k] = v
        dict(**kwargs) -> new dictionary initialized with the name=value pairs
            in the keyword argument list.  For example:  dict(one=1, two=2)
        # (copied from class doc)
        """
        pass

    def __iter__(self): # real signature unknown; restored from __doc__
        """ x.__iter__() <==> iter(x) """
        pass

    def __len__(self): # real signature unknown; restored from __doc__
        """ x.__len__() <==> len(x) """
        pass

    def __le__(self, y): # real signature unknown; restored from __doc__
        """ x.__le__(y) <==> x<=y """
        pass

    def __lt__(self, y): # real signature unknown; restored from __doc__
        """ x.__lt__(y) <==> x<y """
        pass

    @staticmethod # known case of __new__
    def __new__(S, *more): # real signature unknown; restored from __doc__
        """ T.__new__(S, ...) -> a new object with type S, a subtype of T """
        pass

    def __ne__(self, y): # real signature unknown; restored from __doc__
        """ x.__ne__(y) <==> x!=y """
        pass

    def __repr__(self): # real signature unknown; restored from __doc__
        """ x.__repr__() <==> repr(x) """
        pass

    def __setitem__(self, i, y): # real signature unknown; restored from __doc__
        """ x.__setitem__(i, y) <==> x[i]=y """
        pass

    def __sizeof__(self): # real signature unknown; restored from __doc__
        """ D.__sizeof__() -> size of D in memory, in bytes """
        pass

    __hash__ = None

dict

#演示什么数据类型能作为key

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# dic = {'name':'guoke','age':22} #字符串可以为键(key)

# dic = {1:'a',2:'b',3:'c'} #数字可以为键

# dic = {True:'1',False:'2'} #布尔值可以为键

# dic = {(1,2,3):'abc'} #元组也可以为键

# dic = {[1,2,3]:'abc'} #列表不能为键{key:vaule} 

2.字典的增删改查

#2.1增加

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#关键字
# 1、setdefault('键','值')
# 2、变量['key'] = 'value'

#例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic = {'广东':'广州','山东':'济南','海南':'三亚'}
dic['湖南'] = '长沙' #新增,前面是key,后面是值
print(dic)
#{'广东': '广州', '山东': '济南', '海南': '三亚', '湖南': '长沙'}

dic.setdefault('广西','桂林')
# 使用setdefault需要注意的是如果在字典中存在就不进行任何操作,不存在就进行添加
print(dic)
#{'广东': '广州', '山东': '济南', '海南': '三亚', '广西': '桂林'}

#2.2删除

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#关键字
1、pop()
2、del dic[''] #
3、clear()   #清空
4、popitem  #随机删除
5、要注意的是字典没有remove这个删除命令

#例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic = {'广东':'广州','山东':'济南','海南':'三亚'}

ret = dic.pop('广东')  #通过key删除,返回被删除的value
print(ret) #广州 :可以查看到的是通过key将值为广州删除了
print(dic) #{'山东': '济南', '海南': '三亚'}

del dic['山东']  #要注意删的时候只能是写key,不能写value删
print(dic) #{'广东': '广州', '海南': '三亚'}

dic.clear()  #{}  #清空
print(dic) #{}

ret = dic.popitem()  #随机删除,返回值 一个元组(key,value)
print(ret) #('海南', '三亚')
print(dic) #{'广东': '广州', '山东': '济南'}

#2.3.修改

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#关键字
1、dic['键'] = '值'
2、dic.update(dic1)

#例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic = {'广东':'广州','山东':'济南','海南':'三亚'}

dic["广东"] = '湖北' 
#需要注意的是前边的修改是键key,然后等号后面修改的value值
print(dic) #{'广东': '湖北', '山东': '济南', '海南': '三亚'}

dic1 = {'战狼':'吴京','亮剑':'李云龙','山东':'淮上'}
dic.update(dic1)
print(dic)
#{'广东': '湖北', '山东': '淮上', '海南': '三亚', '战狼': '吴京', '亮剑': '李云龙'}
#把dic1中的内容更新到dic中,如果key重名,则修改替换,如果不存在key,则新增

#2.4.查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 关键字
# 1、使用for循环获取,获取到的是键,不是值
# 2、print(dic['']) #查询键,返回值
# 3、print(dic.get(''))  #如果没有查询到的话就会返回None
# 4、print(dic.setdefault(''))

#例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic = {'广东':'广州','山东':'济南','海南':'三亚'}
# for i in dic:
#     print(i) #for循环默认是获取字典中的键
# 广东
# 山东
# 海南

print(dic['广东'])   #查看1,如果没有这个键的时候查询就会报错
# print(dic['湖北'])  #报错,NameError: name '湖北' is not defined

print(dic.get('广东','这个是没有的'))  #查看2,没有返回None,可以指定返回内容
#广州

print(dic.get('广西')) #None,因为没有这个key
print(dic.setdefault('广东'))  #如果没有的话也是返回None

#2.5.字典的其他操作(特有)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#keys  #获取到字典中的每一个键
#value  #获取到字典中的值
#itmes   #获取到字典中的键值对数据

#例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic = {"id":123,"name":"cw","age":22,"ok":"大佬"}
print(dic.keys())  #(高仿列表)

for i in dic.keys():
    print(i)
#获取到键:id,name,age,ok

for i in dic:
    print(i)   #以上的几种方法都是获取到字典中的每一个键
#获取到id,name,age,ok

print(dic.values())
for i in dic.values():  #获取到字典中的每一个值
    print(i)
#获取到值:123,cw,22,大佬

for i in dic.items():  #获取到键值对
    print(i)
# ('id', 123)
# ('name', 'cw')
# ('age', 22)
# ('ok', '大佬')

3.字典的嵌套

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
嵌套就是一层套着一层,字典套着字典

#演练:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#写字典嵌套来查找
dic1 = {
           "name": "张世豪",
           "age": 18,
           "wife": {
                 "name": '大哥成',
                 "age": 28 },
           "children": ['第⼀个毛孩子', '第⼆个毛孩子'],
           "desc": '峰哥不不会告我吧. 没关系. 我想上头条的'
              }

#通过key取查找,使用get
#1.查找大哥成
#思路:首先可以看到大哥成是作为wife键的值,所以可以先找wife键,拿到值,再接着获取键name,打印出它的value值
print(dic1.get("wife")) #{'name': '大哥成', 'age': 28}
print(dic1.get("wife").get("name")) #大哥成

#2.查看28
#思路:和上面一样,通过找出键获取到值
print(dic1.get("wife").get("age")) #28

#3.查找第一个毛孩子
#思路:同样是通过键找出值,然后通过索引进行获取
print(dic1.get("children")[0]) #第⼀个毛孩子

#嵌套练习

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
dic1 = {
    'name':['guo',2,3,5],
    'job':'teacher',
    'dianshi':{'haijun':['python1','python2',100]}
}
#要求
# 1,将name对应的列表追加⼀个元素’ke’。
# 2,将name对应的列表中的guo首字母大写。
# 3,dianshi对应的字典加一个键值对’蒋小鱼’,’niubi’。
# 4,将dianshi对应的字典中的haijun对应的列表中的python2删除
#
s1 = (dic1.get('name'))
s1.append('ke')
print(s1) #['guo', 2, 3, 5, 'ke']

print(dic1.get('name')[0].capitalize()) #Guo

dic1['蒋小鱼'] = 'niubi'
print(dic1) #{'name': ['guo', 2, 3, 5], 'job': 'teacher', 'dianshi': {'huijun': ['python1', 'python2', 100]}, '蒋小鱼': 'niubi'}

dic2 = (dic1.get('dianshi').get('haijun').pop(1))
print(dic2) #python2
print(dic1)
#{'name': ['guo', 2, 3, 5], 'job': 'teacher', 'dianshi': {'haijun': ['python1', 100]}}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
柔性机械臂:动力学建模具体方法
建立柔性机械臂动力学方程主要利用Newton-Euler和Lagrange方程这两个最具代表性的方程,另外比较常用的还有Kane方法等。为了建立动力学模型和控制的方便,柔性关节一般简化为弹簧。当连杆存在柔性时,常采用假设模态法、有限元法、有限段法等方法描述相应臂杆的柔性变形,然后再根据需要进行截断。柔性臂杆的变形常常简化为Euler-Bernulli梁来处理,即考虑到机械臂连杆的长度总比其截面尺寸大得多,运行过程中所产生的轴向变形和剪切变形相对于挠曲变形而言非常小,柔性臂杆只考虑挠曲变形,忽略轴向变形和剪切变形。因而从动力学角度看,每根柔性连杆都可视为一段梁。
ZC_Robot机器人技术
2020/10/03
4.8K22
柔性机械臂:动力学建模具体方法
机器人动力学分析——拉格朗日法
在机器人手臂上添加相应的力学传感器,为之在运动过程中提供反馈信号,进而使得机器人具有触觉。以往的研究资料表明,机器人精确的运动控制离不开动力学分析,因此,本部分对常用的动力学分析方法进行介绍,提供简单实例,为后续工作提供基础。
联远智维
2022/01/20
2.3K0
机器人动力学分析——拉格朗日法
【Dynamics】机械臂动力学建模(牛顿-欧拉法)
(1)动力学用于机械臂的仿真,机械臂的动力学有助于进行机械臂完成特定任务比如目标捕获、操作、抓取以及分拣等操作;仿真可以得到机械臂在完成此类任务过程中的动态特性;
ZC_Robot机器人技术
2020/06/25
12.3K0
【Dynamics】机械臂动力学建模(牛顿-欧拉法)
机器人动力学建模:机械臂动力学
多体系统动力学形成了多种建模和分析的方法, 早期的动力学研究主要包括 Newton-Euler 矢量力学方法和基于 Lagrange 方程的分析力学方法。 这种方法对于解决自由度较少的简单刚体系统, 其方程数目比较少, 计算量也比较小, 比较容易, 但是, 对于复杂的刚体系统, 随着自由度的增加, 方程数目 会急剧增加, 计算量增大。 随着时代的发展, 计算机技术得到了突飞猛进的进步, 虽然可以利用计算机编程求解出动力学方程组, 但是, 对于求解下一时刻的关节角速度需要合适的数值积分方法, 而且需要编写程序, 虽然这种方法可以求解出方程的解, 但是, 由于这种编程方法不具有通用性, 针对每个具体问题, 都需要编程求解, 效率比较低, 因此, 如果能在动力学建模的同时就考虑其计算问题, 并且在建模过程中考虑其建模和求解的通用性, 就能较好的解决此问题。
ZC_Robot机器人技术
2020/10/15
9K1
机器人动力学建模:机械臂动力学
柔性机械臂:动力学建模原理
刚性机械臂建模方法已经可以有效地求解出机械臂各部分之间的耦合情况,但是对于柔性机械臂的动力学建模其侧重点在于基于刚性机械臂建模方法的基础上如何有效的处理机械臂关节柔性以及臂杆柔性的问题。由于机械臂的截面相对于其长度而言很小,可以将柔性杆作为Euler-Bernouli梁,柔性机械臂可以视为一个具有无限自由度的连续系统。相对于刚性机械臂杆件之间的耦合,柔性机械臂还需要考虑关节的柔性以及臂杆弹性变形的耦合。因而,柔性机械臂的运动方程具有高度非线性。
ZC_Robot机器人技术
2020/10/03
4.5K0
柔性机械臂:动力学建模原理
机器人动力学:机械臂正向动力学与逆向动力学
正向动力学:已知机器人的关节驱动力矩和上一时刻的运动状态(角度和角速度),计算得到机器人下一时刻的运动加速度,再积分得到速度和角度;
ZC_Robot机器人技术
2020/10/16
23.9K1
机器人动力学:机械臂正向动力学与逆向动力学
自由漂浮机器人运动学和动力学建模
随着空间技术的不断发展和人类对空间探索的不断深入,空间机器人在完成诸如空间站的建造与维护等任务中发挥着重要的作用。
ZC_Robot机器人技术
2020/10/17
4.2K2
自由漂浮机器人运动学和动力学建模
机器人刚柔耦合动力学建模与应用汇总
柔性机器人轻量节能, 对环境和目 标的变化具有适应性, 但也存在因 为结构刚度较低而导致的结构振动的问题.现有的绝大多数机器人结构设计是结构刚度最大化, 以减小机器人结构的振动而实现精确的运动定位. 但是, 这种最大化刚度结构的机器人用材多、 不经济, 结构笨重不节能, 惯量大而动态性能差, 生产效率低. 况且, 不存在绝对的刚性结构, 一定条件的输入会激励出 一定频率的振动, 即使设计成最大化刚度结构, 机器人在高速重载的工作条件下同 样面临着结构振动的问 题.
ZC_Robot机器人技术
2020/11/17
4.2K0
机器人刚柔耦合动力学建模与应用汇总
Robot-走近机器人动力学建模与仿真
云机器人就是云计算与机器人学的结合。而机器人则是云机器人的主要终端,云可以为机器人提供数据监控以及分析服务,同时也可从远端遥操作机器人的动作。腾讯云社区为大家了解和使用腾讯云服务提供了优秀的平台。而对于机器人部分,下面给出关于机器人关键技术之一的动力学建模与仿真的介绍。
ZC_Robot机器人技术
2020/05/09
15K2
Robot-走近机器人动力学建模与仿真
柔性机械臂:控制算法介绍
建立的系统动力学模型必须按照控制的要求进行简化以便为控制系统的设计提供设计模型。大致可以划分为被动控制和主动控制两大类。
ZC_Robot机器人技术
2020/09/28
6.6K4
柔性机械臂:控制算法介绍
Robot-adams机器人动力学仿真
机器人的动力学仿真软件有很多,在之前的文章中【Robot-走近机器人动力学建模与仿真】也有详细的分类介绍,在众多的机器人仿真软件中,Adams 是科学研究中关于动力学仿真求解最稳定的。这主要是由于adams 具有强大的动力学微分仿真求解器.本文旨在详细介绍adams在机器人研发领域内的应用。
ZC_Robot机器人技术
2020/06/16
8.2K9
Robot-adams机器人动力学仿真
Robot:七自由度机械臂动力学建模与控制研究(一)
冗余构型机械臂的动力学与控制存在着其特殊性。七自由机械臂的动力学算法一般计算量大,且其控制中存在“自运动”问题。针对上述问题,本文主要研究内容包括:基于铰接体算法的空间机械臂正向动力学,冗余机械臂位置控制,基于增强混合阻抗控制的空间冗余机械臂力控制研究。
ZC_Robot机器人技术
2021/01/21
5.2K3
Robot:七自由度机械臂动力学建模与控制研究(一)
机器人运动学和动力学:概念区分
机械臂是典型的多体系统,研究机器人操作能力,机械臂是典型的研究对象之一。关于机械臂的基本理论知识主要涉及到机器人的路径规划、轨迹规划、运动学以及动力学。机器人的相关概念具体如下所示:
ZC_Robot机器人技术
2020/10/04
8.2K1
机器人运动学和动力学:概念区分
机器人动力学方程的性质
一个n连杆的机器人的动力学方程含有很多项,特别是全部是转动关节的机械臂,让人看着害怕。但是,机器人动力学方程含有一些有助于开发控制算法的重要性质,其中最重要的是反对称性、无源性、有界性和参数的线性性。
机器人网
2018/04/25
1.9K0
机器人动力学方程的性质
机器人运动学和动力学:机器人学究竟有什么不同
说到智能化设备,首先想到的是机器人与数控加工中心。至于二者,均是工业4.0时代的重要加工媒介和工具,是支撑工业智能化时代的重要组成设备。但是二者的具体区别到底在什么地方尼?
ZC_Robot机器人技术
2020/10/10
4.1K0
机器人运动学和动力学:机器人学究竟有什么不同
基于空间矢量的机器人动力学建模与对比分析
普通的矢量属于3D矢量,即每个3D矢量是由空间的三个标量表示,举例来说,空间的某个位置矢量是由三个XYZ轴的标量值得到,空间的力矢量是力在XYZ轴的标量值合成,力矩也是三个标量合成。而在6D 空间矢量则是分为运动学量以及动力学量,具体为
ZC_Robot机器人技术
2020/09/19
3.2K9
基于空间矢量的机器人动力学建模与对比分析
机械臂驱动结构简析
机械臂是由多个电机驱动,常见的工业机械臂大多数具有六个自由度,由六个直流伺服电机驱动,是一个多变量的复杂对象。本节以机械臂的结构作为出发点,进行分析。关节类型主要分为移动关节和旋转关节:
ZC_Robot机器人技术
2021/03/14
9.8K0
机械臂驱动结构简析
基于空间矢量的机器人动力学:铰接体惯量法matlab程序
与运动学建模不同的是,机械臂的刚体动力学建模首先需要建立其连体坐标系,该连体系可以不按D-H原则建立,然后在机械臂连体系下表示机械臂运动学量(位置、速度、加速度),最后根据动力学普遍方程建立多体系统模型。
ZC_Robot机器人技术
2020/09/24
2.5K3
基于空间矢量的机器人动力学:铰接体惯量法matlab程序
七自由度冗余机械臂梯度投影逆运动学
冗余机械臂的微分逆运动学一般可以增加额外的优化任务。 最常用的是梯度投影算法 GPM (Gradient Project Method),文献 [1] 中第一次将梯度投影法应用于关节极限位置限位中。 该算法中设计基于关节极限位置的优化指标, 并在主任务的零空间中完成任务优化。 此种思想也用于机械臂的奇异等指标优化中。 Colome 等 对比分析了速度级微分逆向运动学中的关节极限位置指标优化问题, 但是其研究中的算法存在一定的累计误差, 因而系统的收敛性和算法的计算稳定性难以得到保证。 其他学者综合多种机器人逆向运动学方法, 衍生出二次计算方法、 梯度最小二乘以及模糊逻辑加权最小范数方法等算法。Flacco 等 针对七自 由度机械臂提出一种新的零空间任务饱和迭代算法, 当机械臂到达关节限位时, 关节空间利用主任务的冗余度进行构型调整, 从而使得机械臂回避极限位置。 近年来, 关于关节极限回避情况下的冗余机械臂运动规划成为了很多学者的研究方向, 相应的改进 策 略 也 很 多.
ZC_Robot机器人技术
2020/10/28
7K2
七自由度冗余机械臂梯度投影逆运动学
Robot:七自由度机械臂动力学建模与控制研究(二)
为了有效的进行冗余机械臂位置控制,本文采用基于运动学的构型控制策略,选择臂角为构型控制中的运动学函数,以此参数化其“自运动”。为了检验算法的正确性,本文建立了空间七自由度机械臂的数值仿真系统,仿真结果表明,基于该算法可以有效控制冗余机械臂的运动。
ZC_Robot机器人技术
2021/01/21
4.5K0
Robot:七自由度机械臂动力学建模与控制研究(二)
相关推荐
柔性机械臂:动力学建模具体方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档