目录

一、机器人自由度

二、机器人姿态的表达方式

1.旋转矩阵

2.坐标轴旋转——欧拉角

2.1 固定转轴欧拉角 转 旋转矩阵

2.2 非固定旋转轴的欧拉角

3.等效轴角

4.四元数

三、ros基础知识

1. 节点(Node)——执行单元

2.节点管理器(Master)——控制中心

3. 通信机制

3.1 话题(Topic)

3.2 服务(Service)

3.3 动作(Action)

4.参数(Parameter)——全局共享字典

5.消息记录包(Bag)


一、机器人自由度

自由度是机器人的一个重要技术指标,它是由机器人的结构决定的,并直接影响到机器人的机动性。

机器人自由度一般指末端执行器的自由度。一般机器人有6个自由度。机器人的机械臂一般具有3个自由度。

二、机器人姿态的表达方式

机器人姿态的表示方式可以分为以下三种:

  1. 旋转矩阵
  2. 坐标轴旋转-绕xyz轴旋转不同的角度(欧拉角)
  3. 四元数-ROS2的TF2中的姿态描述

姿态描述方法,三类共五种方法如下:

  • 旋转矩阵-旋转矩阵
  • 坐标轴旋转-固定轴欧拉角,非固定轴欧拉角
  • 任意轴旋转-等效轴角,四元数

1.旋转矩阵

旋转矩阵采用的是旋转后的坐标系三个轴分别与原坐标系三个轴的夹角余弦值共九个数字组成3*3的矩阵。

旋转矩阵一般记作记作R,其一般形式为:

2.坐标轴旋转——欧拉角

旋转矩阵对绕轴旋转的姿态表达非常不直观,而最直观的方法即绕主轴旋转。

绕主轴的旋转表示方法,按是否固定可以分为两种,一是不固定的欧拉角,二是固定角。要三个参量就能表示空间所有姿态的一种方法,结果是最直观的。欧拉角不是唯一的,只要是参考坐标系按照一定顺序依次进行三次绕主轴的旋转就到达空间中任意姿态。只要满足以下条件就可以保证能到达所有姿态:

【1】所有旋转都是绕着参考轴的
【2】三次旋转至少涉及两个不同主轴
【3】同一个主轴不进行两次旋转
注意:绕轴旋转顺序不同结果不同,加上可以参考自身坐标系或参考固定的坐标系旋转,所以欧拉角有12*2=24种旋转方式。

2.1 固定转轴欧拉角 转 旋转矩阵

以绕固定轴以XYZ顺序旋转为例,最终结果为:

2.2 非固定旋转轴的欧拉角

以绕固定轴以ZYX顺序旋转为例,最终结果为:

3.等效轴角

如果轴的方向是一般方向(不是主轴方向),任何姿态都可以通过选择适当的轴和角度来得到。

如果我们选择的是一个主轴,那么他就是我们常见的平面旋转矩阵;如果选择的是一般轴,那么等效旋转矩阵为:

4.四元数

四元数的四个数字由一个实部和三个虚部组成,是一个超复数形式:q=w+x∗i+y∗j+z∗k

三、ros基础知识

0.ros的文件系统

1. 节点(Node)——执行单元

【1】节点就是执行具体任务的进程或独立运行的可执行文件,通常一个系统由多个节点组成,节点之间可以通过ROS客户端库(如roscpp 、rospy)相互通信。【2】不同节点可使用不同编程语言,可分布式运行在不同的主机。【3】节点在系统中的名称必须是唯一的。

2.节点管理器(Master)——控制中心

【1】节点管理器在系统中主要起到了一个中介的作用,能够帮助节点相互找到彼此。【2】节点管理器能够为节点提供命名和注册服务,以及跟踪和记录话题/服务通信。【3】同时节点管理器还提供了一个参数服务器(Parameter Server),节点使用此服务器存储和检索运行时的参数。

节点与节点管理器工作图示如下:

3. 通信机制

ROS采用的是一种点对点的分布式通信机制,实现模块间点对点的松耦合连接,所有软件功能及工具都建立在这种通信机制上,为用户提供多节点(进程)的通信服务,其中ROS最核心的三种通信机制是话题(Topic)通信机制、服务(Service)通信机制和参数(Parameter)管理机制。

3.1 话题(Topic)

话题通信采用的是一种异步通信机制。话题通信基于发布/订阅模型,数据由发布者传输给订阅者。其中节点既可以作为发布者发布消息(message),也可以作为订阅者订阅消息。同一个话题的发布者和订阅者可以不唯一,另外一个节点也可以发布或订阅多个消息。一般来说,发布者和订阅者并不知道对方的存在。发布者将信息发布在一个全局的工作区内,当订阅者发现该信息是它所订阅的,就可以接收到这个信息。通常用于数据传输。

关于话题的命令:

3.2 服务(Service)

服务通信采用的是一种同步通信机制。服务通信基于客户端/服务器模型,客户端(Client)发送请求数据(Request),服务器(Server)完成处理后返回应答数据(Response)。与话题不同的是,ROS中只允许有一个节点提供指定命名的服务。通常用于逻辑处理。

话题与服务的区别

3.3 动作(Action)

动作是基于ROS消息机制实现的一种问答通信机制,基于客户端/服务器模型,服务器可以连续反馈数据给客户端,客户端可以在任务运行过程中中止运行。动作Action的接口主要由goal、cancel、status、feedback和result组成,客户端可以在任务启动前向服务器发布任务目标goal,也可以在任务过程中向服务器发送cancel请求取消任务。服务器向客户端反馈服务器当前的状态,或周期性反馈任务运行的监控数据,而result在任务运行过程中只发布一次,仅在服务器完成动作后反馈一个最终结果。

4.参数(Parameter)——全局共享字典

参数服务器能够保存一部分参数作为全局共享字典,系统中的所有节点都可以通过网络访问这些共享字典,存储和检索参数的参数名或参数值,而字典中的数据类型包含了int整型、float浮点型、string字符串等。参数的存储和检索采用的通信机制是更为底层的RPC,而不再是话题或服务。它更适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。

5.消息记录包(Bag)

消息记录包是一种用于保存和回放ROS消息数据的文件格式。它使用.bag格式保存消息、主题、服务和其他ROS数据信息,可以在事件发生后,通过使用可视化工具调用和回放数据,检查在系统中到底发生了什么。记录包文件可以像实时会话一样在ROS中再现情景,在相同时间向主题发送相同的数据。通常用于调试算法。

使用

参考学习资料:

B站:古月居【ros入门】

博客:【1】机器人姿态 https://blog.csdn.net/weixin_39258979/article/details/119855612

【2】机器人姿态 http://t.csdn.cn/qSV7s

【3】ros基础 http://t.csdn.cn/eEQTw

机器人学习——姿态表达,ros通讯机制相关推荐

  1. ROS笔记(6) ROS通讯机制

    ROS笔记(6) ROS通讯机制 1. 通讯机制简介 2. 通讯机制基本要素 3. 通讯机制分类 1. 通讯机制简介 ROS的核心功能是提供一种软件点对点通信机制,一种基于 socket 网络连接的松 ...

  2. 遨博机械臂——ROS通讯机制

    文章目录 知识目标 1. 遨博机械臂SDK二次开发接口 2. 机械臂MoveIt!低级控制器配置 3. aubo ROS中间件通讯机制 知识目标 学习遨博机械臂SDK开发常用接口: 学习MoveIt! ...

  3. UR5机器人学习之TCP/IP通讯

    最近因为项目原因在研究UR机器人,主要是通过PC上位机与UR通讯,采用TCP/IP通讯的方式,PC上位机通过发送UR脚本指令实现控制机器人和操作机器人. IP地址:可以根据UR机器人控制终端读取到IP ...

  4. ROS学习第三天 ROS的通讯机制

    感谢3.1 常用API · Autolabor-ROS机器人入门课程<ROS理论与实践>零基础教程 第三节 ROS的通讯机制 这一节主要讲的是通讯机制 就像前面说的那样,ROS通过节点发布 ...

  5. ROS自主导航学习———ROS通信机制

    前言 前面ROS很多都忘记了 ,现在来重新回顾一下内容 ROS 中的基本通信机制主要有如下三种实现策略: 话题通信(发布订阅模式) 服务通信(请求响应模式) 参数服务器(参数共享模式) Action通 ...

  6. Webots 机器人仿真平台(二) 与ROS通讯

    Webot 与ROS通讯 1 Webot Ubuntu客户端与ROS通讯 1.1 配置webots_ros包 1.2 启动webots_ros包 1.3 gmapping建图测试 1.4 键盘遥控we ...

  7. ROS基础(二):ros通讯之服务(service)机制

    上一章内容链接: ROS基础(一):ROS通讯之话题(topic)通讯 目录 一.概念 二.实例 1. 小乌龟例程中的service 2. 自定义service 3. 创建服务器节点与客户端节点(c+ ...

  8. Python 机器人学习手册:1~5

    原文:ILearning Robotics using Python 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自[ApacheCN 计算机视觉 译文集],采用译后编辑(MTPE)流程来 ...

  9. 机器人学习必看系列:如何使用moveit控制真实机械臂?

    大家好,我是你们可爱的小鱼.最近关于moveit相关的问题感觉非常多,毕竟机械臂+视觉的应用的确是非常的火爆,小鱼都想直接开课教机械臂运动规划相关的了. 有的同学问小鱼,怎么使用moveit控制真实机 ...

最新文章

  1. package.json 依赖包版本号
  2. PTA基础编程题目集-7-4 BCD解密
  3. 计算机科学与导论期末论文题目,★计算机科学与技术导论论文题目计算机科学与技术导论毕业论文题目大全计算机科学与技术导论论文选题参考(3页)-原创力文档...
  4. mysql dba系统学习(20)mysql存储引擎MyISAM
  5. java 正则出特殊字符_java正则_特殊字符处理
  6. 通过这5个简单的技巧减少GC开销
  7. 使用Spring Security,Thymeleaf和Okta保护Java应用程序的安全
  8. java中update_Java 7 Update 21安全改进的详细信息
  9. devtools安装_R语言如何批量安装软件包
  10. Java并发编程——线程带来的风险
  11. C++ log日志类实现
  12. set列表对象去重_set去重应用
  13. python和其它语言混合编程_C++和Python混合编程 - python嵌入C++
  14. php printf 和sprintf,深入浅析php中sprintf与printf函数的用法及区别
  15. 全息投影技术及其实现(附素材下载)
  16. gitee推送更新失败问题记录:remote: error: hook declined to update refs/heads/master
  17. 使用搜狗输入法的U模式打出不会读的字
  18. coreldraw快速撤回_CorelDRAW基础教程,教你CDR X8撤销、重做与重复操作方法
  19. 最新Handsome主题V6.0免授权版+Typecho内核
  20. C#:命名空间“System.Windows”中不存在类型或命名空间名“Forms”(是否缺少程序集引用?)

热门文章

  1. 华硕B250主板组装机安装win7及office2010
  2. Accumulator累加器(一)
  3. springboot项目里面使用redis出现看不懂的\xac\xed\x00\x05t\x00\解决方法(规范使用)
  4. 安装ubuntu系统过程中卡住
  5. 亲测好用的Odoo集成X-SpreadSheet方法!
  6. JAVA诊所信息管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  7. mysql连接oracle视图_oracle数据库视图
  8. 如何找到一个好的学习率
  9. Feign详解4-Contract 源码
  10. 没时间学 Vue (7) —— 渲染(二):条件渲染 v-if