热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ros构建机器人运动学模型_ROS入门学习之七Moveit机械臂控制

1.MoveIt!系统架构MoveIt是什么:一个易于使用的集成化开发平台由一系列移动操作的功能包组成:运动规划、操作控制、3D感知、运动学、控制与导航
46cb3078a2637e2b674f0a8b2fd550dc.png

1.MoveIt!系统架构

MoveIt是什么:

  • 一个易于使用的集成化开发平台
  • 由一系列移动操作的功能包组成:运动规划、操作控制、3D感知、运动学、控制与导航算法
  • 提供友好的GUI
  • 可应用于工业、商业、研发和其他领域
  • ROS社区中使用度排名前三的功能包
1bdce536a7a52958620bd4e7be128334.png

系统架构

用户接口(User Interface)

  • C++:使用move_group_interface包提供的API
  • Python:使用moveit_commander包提供的API
  • GUI:使用Moveit!的rviz插件

ROS参数服务器

  • URDF:robot_description参数,获取机器人URDF模型的描述信息
  • SRDF:robot_description_semantic参数,获取机器人模型的配置信息
  • config:机器人的其他配置信息,例如关节限位、运动学插件、运动规划插件

机器人

Topic和Action通信

1b848baaed13f25b3c302df8a63839a6.png

系统架构

06ec27467b63d16b73b364c974d86b5c.png
63514cfca76eff173ecb86a32c3420c4.png

约束条件

  • 位置约束:限制link的运动区域
  • 方向约束:限制link的运动方向(roll、pitch和yaw)
  • 可见性约束:限制link上的某点在某区域内的可见性(通过视觉传感器)
  • joint约束:限制joint的运动范围
  • 用户定义约束:用户通过回调函数自定义所需的约束条件

适配器

  • FixStartStateBounds:修复joint的初始极限
  • FixWorkspaceBounds:设置一个默认尺寸的工作空间
  • FixStateCollision:修复碰撞配置文件
  • FixStatePathConstraints:找到满足约束的姿态作为机器人的初始姿态
  • AddTimeParameterization:为空间轨迹进行速度、加速度约束,为每个轨迹点加入速度、加速度、时间等参数

监听信息

  • 状态信息(State Information)机器人的关节话题joint_states
  • 传感器信息(Sensor Information)机器人的传感器信息
  • 外界环境信息(World geometry Information)通过传感器建立的周围环境信息
8632c0fe3f4ea9722711c81e216b7484.png

MoveIt!使用步骤

  • 1)组装:创建机器人URDF模型
  • 2)配置:使用MoveIt!Setup Assistant工具生成配置文件
  • 3)驱动:添加机器人控制器插件(controller)
  • 4)控制:MoveIt!控制机器人运动(算法仿真、物理仿真)

2.创建机械臂模型与配置文件

宏定义

b9d19312c5e842d95278aac337ed7017.png

link与joint

4a0790a36bc79238d89afdedf8d47257.png

gazebo属性

c47b10e828edc5b7ede941ad316c7570.png

可视化

ce9b25f5cfdcec8c4be1c656a709b822.png

模型可视化

roslaunch marm_description view_arm.launch

94d5a7ca4afbca2bbcb8c25e224c1d71.png

启动MoveIt!Setup Assistant

rosrun moveit_setup_assistant moveit_setup_assistant

4c90e12c4106cff01f4d085e59711aed.png
0c0f6c762abbfcbb0016ea50731881cb.png
9f87c11d866b85d93ed92e6bc82fa798.png
d5158961be2a29b356ac43363cdb5ffe.png
8e26b813838c8fbea2f8cc7d7696f44d.png
585d803cf25c0a7faaa59775b7478932.png
ad97bb7ec6ab94d77402443f391f4b71.png
72a40bee9b839f6cf4dffb7af3624c6a.png
0b8282b9570fec2b345ee7c29ca47cb1.png
a2314c570ded488014b0366a767584d2.png
a9318ce2a65f18e8c1ef50637acaaf18.png

启动demo

roslaunch marm_moveit_config demo.launch

拖动规划

d52eadd358eb8b4a60ca607d25abcbc6.png

随机目标点规划

4596d706122025960cc660d56e5782bf.png

设置初始位姿

a83f959d3f9e40add3bac584253b0ade.png

加入场景物体

39b8bfd23015610f62594eed78c2da60.png

碰撞检测

53e60901852c90b4e0ca4400ccd4fe5d.png

3.MoveIt!编程练习

326b2f4b9864a6400b09cf4fcdcedf6f.png

编程接口

175d3afe97d060148831b3f2b84a9653.png

关节空间规划

9883e7be3a858ad2751657b3d654bbdc.png

关节空间规划例程

roslaunch marm_moveit_config demo.launch
rosrun marm_planning moveit_fk_demo.py

工作空间规划

27269729bb95cd4c226cc04e298f876e.png

工作空间规划例程

roslaunch marm_moveit_config demo.launch
rosrun marm_planning moveit_ik_demo.py

笛卡尔路径规划

fae8f686635bd2006012e5a24a7d971a.png

工作空间规划例程

roslaunch marm_moveit_config demo.launch
rosrun marm_planning moveit_cartesian_demo.py _cartesian:=True(走直线)
rosrun marm_planning moveit_cartesian_demo.py _cartesian:=False(走曲线)

避障规划

89f2c99ba492e0af858f6fd55191e6e0.png

自主避障规划例程

roslaunch marm_moveit_config demo.launch
rosrun marm_planning moveit_obstacles_demo.py

4.Gazebo机械臂仿真

关节轨迹控制器

Joint Trajectory Controller

  • 线性样条:位置连续,速度、加速度不连续
  • 三次样条:位置和速度连续,加速度不连续
  • 五次样条:位置、速度、加速度都连续
19ef0d2f7cc35960e85f44e4a3707b42.png
a92743c404fc7e6f6492009f1696cbc3.png

MoveIt!控制器

ada6a6d25e2866060b66ebaed0b696bc.png
0b1e4557c046c1163ee5014508dd7f2d.png
0b1e4557c046c1163ee5014508dd7f2d.png
22a28ccc04b18b7897c98339a63eb643.png
430051bf2a58260eda01662a111376f0.png
19d0ebc3e1c20aa98659e01fee9cc5ec.png

启动仿真环境

roslaunch marm_gazebo arm_bringup_moveit.launch

fa7d0f0df8881fbd64413903edaf29c1.png

5.ROS-I框架介绍

将ROS强大的功能应用到工业生产的过程中
为工业机器人的研究与应用提供快捷有效的开发途径
为工业机器人创建一个强大的社区支持
为工业机器人提供一站式的工业级ROS应用开发支持

ff0d9d0fa1f2aa46bb82cc39a0906980.png

总体架构

  • GUI:ROS中现在已有的UI工具和专门针对工业机器人通用的UI工具
  • ROS Layer:ROS基础框架,提供核心通信机制
  • MoveIt!Layer:为工业机器人提供规划、运动学等核心功能的解决方案
  • ROS-I Application Layer:处理工业生产的具体应用,目前也是针对未来的规划
  • ROS-I Interface Layer:接口层,工业机器人的客户端,通过simple message协议与机器人的控制器通信
  • ROS-I Simple Message Layer:通信层,定义了通信的协议,打包和解析通信数据
  • ROS-I Controller Layer:机器人厂商开发的工业机器人控制器
fa9e09d5cad6c1dcc197c494fe7b9ff5.png

sudo apt-get install ros-kinetic-industrial-core

基于ROS-I框架的应用(Kungfu Arm)

037aa3e53b44d4bbc7274023f1d5848e.png



推荐阅读
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • 统一知识图谱学习和建议:更好地理解用户偏好
    本文介绍了一种将知识图谱纳入推荐系统的方法,以提高推荐的准确性和可解释性。与现有方法不同的是,本方法考虑了知识图谱的不完整性,并在知识图谱中传输关系信息,以更好地理解用户的偏好。通过大量实验,验证了本方法在推荐任务和知识图谱完成任务上的优势。 ... [详细]
  • Android自定义控件绘图篇之Paint函数大汇总
    本文介绍了Android自定义控件绘图篇中的Paint函数大汇总,包括重置画笔、设置颜色、设置透明度、设置样式、设置宽度、设置抗锯齿等功能。通过学习这些函数,可以更好地掌握Paint的用法。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • 深入理解Java虚拟机的并发编程与性能优化
    本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
    2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • 本文介绍了利用ARMA模型对平稳非白噪声序列进行建模的步骤及代码实现。首先对观察值序列进行样本自相关系数和样本偏自相关系数的计算,然后根据这些系数的性质选择适当的ARMA模型进行拟合,并估计模型中的位置参数。接着进行模型的有效性检验,如果不通过则重新选择模型再拟合,如果通过则进行模型优化。最后利用拟合模型预测序列的未来走势。文章还介绍了绘制时序图、平稳性检验、白噪声检验、确定ARMA阶数和预测未来走势的代码实现。 ... [详细]
author-avatar
wyf叶子_594
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有