前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Lighthouse教程】网页内容抓取入门

【Lighthouse教程】网页内容抓取入门

原创
作者头像
溪歪歪
修改于 2020-06-16 03:55:58
修改于 2020-06-16 03:55:58
7.1K00
代码可运行
举报
文章被收录于专栏:巫山跬步巫山跬步
运行总次数:0
代码可运行

0x00 概述

网页内容抓取(Web Scraping)是指通过网页抓取工具(即Web Crawler,亦称网页爬虫)对指定网页进行设定行为的自动访问,并进行数据分析提取、最终持久化至电子表格/数据库等存储的过程。此类工作对于科学研究、推荐系统设计、大数据挖掘分析、人工智能、商业分析等多类应用领域都是不可或缺的关键步骤。

本文是一篇入门教程,将向读者介绍网页抓取基本原理和步骤,并基于腾讯云的轻量应用服务器Python工具Scrapy,快速上手并实践相对简易的爬虫工具。

目标读者:有一定Python实践和Web基础概念的的研究分析人员或技术爱好者。

实践目标:通过代码自动化抓取腾讯视频主页下的部分电影信息,并以CSV形式保存成电子表格。

网站内容示例
网站内容示例

抓取后存储为CSV,方便电子表格软件展示和进一步处理。

输出为结构化的表格形式
输出为结构化的表格形式

0x01 环境准备

1、云服务器准备

第一步当然是准备环境,云服务器所提供的计算资源和网络能力是网页抓取任务的基础。不过这次让我们来点新鲜的,不用大家已经熟悉的CVM,而是试用下腾讯云新推出的轻量应用服务器,官网称它是最佳入门途径:

轻量应用服务器(Lighthouse)是一种易于使用和管理、适合承载轻量级业务负载的云服务器,能帮助个人和企业在云端快速构建网站、博客、电商、论坛等各类应用以及开发测试环境,并提供应用部署、配置和管理的全流程一站式服务,极大提升构建应用的体验,是您使用腾讯云的最佳入门途径。

这里使用Lighthouse实例的原因无他,主要是配置方便启动快,省得折腾工夫,价格也便宜些。我们直接在控制台新建即可,购买页设计得很简洁:

轻量应用服务器选购的清爽界面
轻量应用服务器选购的清爽界面

轻量应用服务器还支持不同的应用镜像,如WordPress、Node.js等,需要的话还是挺方便的。不过本实验用不到,这里我们直接选Ubuntu18.04的系统镜像就足够。登录后根据个人习惯简单配置下开始下一步。

2、Python3 VirtualEnv环境准备

Ubuntu18.04是默认安装了Python3 (3.6.9),但是没有安装对应版本的VirtualEnv。如下命令安装即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo apt install python3-venv

然后初始化后续项目的venv

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 -m venv scrapy_examples
cd scrapy_examples
source bin/activate

注意source后,默认的python就是python3了,并且在venv环境中还有了pip,虚拟环境(venv)中的一切是与外界(系统python和相应的库)完全隔离的。

接下来安装scrapy等依赖包,并创建项目:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install scrapy
scrapy startproject movie
cd movie

至此准备工作完成。

scrapy创建的movie项目的目录结构如tree命令所示,大部分是框架的配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(scrapy_examples) ➜  movie tree
.
├── movie
│   ├── __init__.py
│   ├── items.py
│   ├── middlewares.py
│   ├── pipelines.py
│   ├── __pycache__
│   ├── settings.py
│   └── spiders
│       ├── __init__.py
│       └── __pycache__
└── scrapy.cfg

Scrapy既然是框架(Framework),意味着它将作为程序启动的入口,而我们使用者只需实现业务需要的类及其方法即可。

0x02 示例一:静态URL抓取

我们从一个最简单的固定URL列表访问的示例开始。

新建文件 movie/spiders/movie_spider_1.py,代码内容如下:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
import scrapy

class MovieSpider1(scrapy.Spider):
    name = "movie_1"

    def start_requests(self):
        urls = [
            'https://v.qq.com/channel/movie?listpage=1&channel=movie&itype=100012', # 科幻
            'https://v.qq.com/channel/movie?listpage=1&channel=movie&itype=100005', # 爱情
            'https://v.qq.com/channel/movie?listpage=1&channel=movie&itype=100004', # 喜剧
        ]
        for url in urls:
            yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        movie_list = response.css('body > div.mod_row_box > div > div.mod_figure.mod_figure_v_default.mod_figure_list_box > div')
        for m in movie_list:
            yield {
                '电影标题': m.css('a::attr(title)').get(),
                '播放地址': m.css('a::attr(href)').get(),
                '海报链接': 'https:{}'.format(m.css('a > img.figure_pic::attr(src)').get()),
                '播放时长': m.css('a > div.figure_caption::text').get(),
                '影评分数': m.css('a > div.figure_score::text').get(),
            }

运行crawl子命令执行网页抓取任务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
scrapy crawl movie_1 -o movies.csv

指定名称为movie_1的spider,注意这里须要MovieSpider1类的属性name一致,并将结果输出成csv。另外scrapy同时还支持json/jsonlines/xml等多种格式。输出大致如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(scrapy_examples) ➜  movie head movies.csv 
电影标题,播放地址,海报链接,播放时长,影评分数
僵尸世界大战,https://v.qq.com/x/cover/r5trbf8xs5uwok1.html,https://puui.qpic.cn/vcover_vt_pic/0/r5trbf8xs5uwok11590989398026/220,02:03:02,7.7 
复仇者联盟4:终局之战,https://v.qq.com/x/cover/v2098lbuihuqs11.html,https://puui.qpic.cn/vcover_vt_pic/0/v2098lbuihuqs111587100715029/220,02:54:05,9.2 
美人鱼,https://v.qq.com/x/cover/xg95sxi4q7zc4uo.html,https://puui.qpic.cn/vcover_vt_pic/0/xg95sxi4q7zc4uot1460107848.jpg/220,01:33:45,8.3 
环太平洋:雷霆再起,https://v.qq.com/x/cover/f7pqur8uhmzltps.html,https://puui.qpic.cn/vcover_vt_pic/0/f7pqur8uhmzltps1559809738/220,01:50:59,7.6 
钢铁飞龙之奥特曼崛起,https://v.qq.com/x/cover/380idj4s3fxn1mz.html,https://puui.qpic.cn/vcover_vt_pic/0/380idj4s3fxn1mz1543994759/220,01:30:43,6.5 
地心历险记2:神秘岛,https://v.qq.com/x/cover/ny2pykcofj3tljs.html,https://puui.qpic.cn/vcover_vt_pic/0/ny2pykcofj3tljs1567405217/220,01:34:10,8.1 
速度与激情:特别行动,https://v.qq.com/x/cover/mu01sbah4rauf44.html,https://puui.qpic.cn/vcover_vt_pic/0/mu01sbah4rauf441573116092/220,02:13:52,8 
透明人,https://v.qq.com/x/cover/l3u3m6tzeddnnhk.html,https://puui.qpic.cn/vcover_vt_pic/0/l3u3m6tzeddnnhkt1444906881.jpg/220,01:46:34,8.2 
星际大逃亡,https://v.qq.com/x/cover/mzc00200a20krmb.html,https://puui.qpic.cn/vcover_vt_pic/0/mzc00200a20krmb1590481722077/220,01:28:25,7.7 

上述并没有什么黑魔法,这里简要解释一下重点:

这个继承自scrapy.Spider类的MovieSpider1类,是用来定义整个的内容抓取逻辑的。

网页内容抓取核心的三个问题就是:

  • Request 请求哪些网页,以及请求的逻辑条件:该例通过start_requests方法定义了初始请求的url列表,即3个静态的网页URL。而每个请求,其成功后都会执行指定的回调函数来完成后续的解析工作,如parse函数。通过python代码理论上可以实现任意复杂的动态请求逻辑。
  • Parse 如何解析提取信息:通过选择器(selector)来完成,相对简单通用的CSS选择器外,还支持XPATH等更高级用于复杂解析。
  • Store 存在哪里:该例通过parse回调函数的yield返回结果,通过框架将其存于csv文件。

仔细厘清以上三点的逻辑,是编写spider类的重点。

Tips如果对CSS选择器的语法不那么熟悉怎么办?

当然可以去从这里这里进行系统复习,不过以下方法更加方便。

Chrome浏览器开发工具的元素审查(Inspect)功能可以快速定位DOM结构,选中对应的节点,右键复制菜单里有Copy Selector,直接可以导出CSS选择器的表达式,如下图:

通过浏览器审查工具复制选择器表达式
通过浏览器审查工具复制选择器表达式

复制出的表达式为如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
body > div.mod_row_box > div > div.mod_figure.mod_figure_v_default.mod_figure_list_box > div:nth-child(1)

用它稍作改动就可以用于代码中的解析步骤了,轻松~

0x03 示例二:动态URL抓取

示例一的方法仅能抓取首屏渲染的部分电影信息,即每个子类仅是最靠前的30个电影,而相对排名靠后的电影是需要手动滚动才能出发动态的数据按需拉取。那么如何抓取某一分类下的全部电影呢?

其实该站点有更加“爬虫友好”的页面以方便自动化访问,拉取数据的是通过URL参数中的query_string参数来实现分页的,所以我们可以通过动态调整请求来实现全部抓取全部数据,或者说动态的决策请求的URL。

新建文件 movie/spiders/movie_spider_2.py,代码内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import scrapy
from urllib.parse import parse_qs

class MoviesSpider2(scrapy.Spider):
    name = "movie_2"
    # download_delay = 1.0

    base_url_template = 'https://v.qq.com/x/bu/pagesheet/list?append=2&channel=movie&itype=100012&listpage=1&pagesize={}&offset={}'
    page_size = 30

    def start_requests(self):
        url = self.base_url_template.format(self.page_size, 0)
        yield scrapy.Request(url=url, callback=self.parse)

    def parse(self, response):
        movie_list = response.css('body > div > div > div.mod_figure.mod_figure_v_default.mod_figure_list_box > div')
        for m in movie_list:
            yield {
                '电影标题': m.css('a::attr(title)').get(),
                '播放地址': m.css('a::attr(href)').get(),
                '海报链接': 'https:{}'.format(m.css('a > img.figure_pic::attr(src)').get()),
                '播放时长': m.css('a > div.figure_caption::text').get(),
                '影评分数': m.css('a > div.figure_score::text').get(),
            }
        # 如果还有,更新url参数继续请求
        if len(movie_list) > 0:
            current_offset = int(parse_qs(response.url)['offset'][0])
            next_url = self.base_url_template.format(self.page_size, current_offset + self.page_size)
            yield scrapy.Request(next_url, callback=self.parse)

以上的逻辑大致是每次请求30个(这是官方支持的最大数)电影信息,直到完结。注意下一个请求的创建依赖当前请求结果的解析,故对于此例(单一初始请求URL),所有的请求是串行的,时间会稍长。

另外注意,以dowload_delay属性可以在请求之间设置延迟,这样可以调整控制访问频次。

猜猜总共多少部科幻片?
猜猜总共多少部科幻片?

不出所料地,目前700+个科幻电影的相关信息就全部摘录完成~

0x04 小结

到了这里,你应该已经可以在腾讯云轻量应用服务器之上,初步搭建属于自己的初级机器爬虫了,开始高效地探索互联网吧!

网页抓取技术所涉及的是一个系统级的工程,从爬虫的逻辑设计、架构性能优化、到安全稳定可扩展等多个方面都会有很多的难点值得深入研究和攻克。Scrapy框架中的各个组件也做了不少优化和组合。

Scrapy架构设计
Scrapy架构设计

如果觉得有兴趣或收获,点赞评论并期待后续更多干货吧~

P.S. 不要天真地以为抓到播放链接就可以为所欲为,该看的广告还得看完,该付费的首播/独播内容还得氪金,我先去充会员了,毕竟这么多好片子呢。

0x05 参考

  1. 轻量应用服务器(Lighthouse)
  2. Scrapy.org用户文档
  3. 腾讯视频电影精选
  4. develop-your-first-web-crawler-in-python-scrapy

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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