ROS学习21讲


前言

  • 转载自古月居,谢谢大佬的指导
  • 视频链接见B站古月居

概述

  • ROS全名为机器人操作系统
  • ROS分为四部分,如下图

在这里插入图片描述

Linux简述

安装比较

在这里插入图片描述

  • 虚拟机安装:复制系统镜像文件,容易在其他机器上运行
    在这里插入图片描述

  • 安装步骤:安装VMware——>安装全屏工具——>设置拔除镜像(具体见视频)

重点回顾

  • Windows是不同盘,而Linux是只有一个盘,但有不同文件夹

  • 软件中心配置软件源便于下载
    在这里插入图片描述

  • CTRL+ALT+T为打开终端的快捷键

常用命令

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • pwd:查看当前终端所在路径

  • 默认打开的终端路径在用户目录下

  • sudo apt-get update:用于更新软件源列表

python与C++

  • 安装C++编译器和python解析器

在这里插入图片描述
在这里插入图片描述

  • python是不需要编译的解析性语言

循环

在这里插入图片描述在这里插入图片描述

  • C程序要先编译,然后运行可执行文件
  • python程序直接运行
  • iostream包含系统库和函数
  • -o表示生成可执行文件
  • ./用于运行程序或脚本

面向对象

在这里插入图片描述

安装ROS系统

  1. 配置软件库
  2. 见下图
    在这里插入图片描述在这里插入图片描述
  • 添加ROS软件源,因为ROS有单独镜像维护

  • 安装前需要对照密钥,所以要添加秘钥

  • sudo apt update:从各种软件源的链接中去更新软件源的所有安装路径

  • 更改热点,下载成功率inc

  • 若更新软件源成功——>则将下载软件源下载地址更新到本地

  • rosdep:用于完成功能包依赖的设置和安装

  • rosdep update:更新软件源列表,确认每个版本间的依赖,具体地为从远程服务器上来更新不同ROS版本

  • 设置环境变量:告诉系统ROS命令行的位置,类比Windows系统的环境变量

  • bashrc:终端配置文件

  • source命令用于运行脚本

  • ros+tab可显示ROS相关命令


ROS关键概念

在这里插入图片描述

通信机制

在这里插入图片描述

节点和节点服务器

在这里插入图片描述

话题通信

在这里插入图片描述

服务通信

在这里插入图片描述

比较

在这里插入图片描述- 话题方式:单向传输方式

  • topic:数据管道
  • 服务:双向
  • 缓冲区:用于发送方与接收方的速度匹配
  • 服务通信方式:请求一次,响应一次,中间阻塞等待

参数服务器

在这里插入图片描述

  • 全局共享对象字典

文件系统

在这里插入图片描述

  • 松耦合式分布式通信
  • 节点图=计算图
  • ctrl+H:可显示隐藏文件

ROS常用命令

在这里插入图片描述

实例

在这里插入图片描述

在这里插入图片描述

命令行发布消息和调用服务

在这里插入图片描述

  • rosrun + 功能包 +节点

  • rqt_graph:计算图

  • rosout: ros启动后的默认启动节点,用于采集所有节点信息

  • 命令行方式控制海龟运动

  • pub即通过命令行方式进行发布+topic+消息类型+消息内容

  • -r 10表示间隔10地循环进行publish
    在这里插入图片描述

话题记录

在这里插入图片描述

  • 默认保存在当前终端所在目录
  • -a:-all
  • -o表示保存为压缩文件

工作空间和功能包

在这里插入图片描述

  • 工作空间:理解为工程目录

  • 代码空间:存放功能包及其配置文件以及launch文件

  • 编译空间:编译中所产生的中间文件,即二进制文件

  • 开发空间:编译生成的可执行文件,库,脚本

  • install:安装空间,使用安装指令时的默认文件存储位置

单独使用它或者其后跟一个斜线(~/),代表了当前用户的宿主目录。
(在shell下可以通过命令“echo ~(~\)”来查看)。
例如“~/bin”代表“/home/username/bin/”(当前用户宿主目录下的bin目录)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 主文件夹:自己用户名命名的目录下

  • catkin_ws可以不同,但后面的src一定要相同

  • 要在工作空间的根目录上进行编译
    在这里插入图片描述

  • install,dev功能类似,install更多强调在开发后分享给客户使用的结果文件

  • 源码要放在功能包中

  • include文件夹:包含头文件等

  • source的原因:运行前要设置环境变量


在这里插入图片描述

  • package.xml:描述功能包的元信息,如作者,依赖的其他功能包等

  • CMakeLists:描述编译规则,即定义怎么编译源代码


发布者编程实现

在这里插入图片描述

  • 发布者向topic发布Twist类型的topic,订阅者订阅该topic

创建功能包

在这里插入图片描述

发布者代码

在这里插入图片描述

  1. 初始化
  2. 注册节点,设置队列长度
  3. 创建消息数据
  4. 循环发布消息
  • 节点句柄NodeHandle:用于管理ROS相关的API资源
  • 设置消息队列的原因:底层以太网可能无法快速响应发布的频率,所以基本流程如下:
    • 消息先存储在队列中,然后队列通过底层以太网的rostopic的TCP通讯机制发送消息

配置编译规则

在这里插入图片描述

  • target_link_libraries:用于可执行文件的链接

编译并运行发布者

在这里插入图片描述

  • 为了不用每次都source,所以在bashrc文件中,即终端配置文件中添加如下语句

在这里插入图片描述

  • 最后一行语句是工作空间的setup.bash所在位置,通过此设置可找到相关功能包位置

python实现

在这里插入图片描述

  • python文件不需要编译,但要注意设置属性为允许作为程序执行文件

在这里插入图片描述

订阅者

在这里插入图片描述

订阅者实现

在这里插入图片描述

在这里插入图片描述

  • 回调函数不能处理时间过长,不然队列积压严重,因为只有当前回调函数处理完,才会处理下一个
  • 接收队列存在意义:若积压严重,队列会抛出最老的数据

配置编译规则

在这里插入图片描述

编译并运行订阅者

在这里插入图片描述

python实现

在这里插入图片描述

  • python文件不用编译,直接运行
    在这里插入图片描述

话题消息定义与使用

在这里插入图片描述

自定义话题消息

在这里插入图片描述

  • 消息定义文件与语言无关,所以在CMakeLists.txt时要添加编译选项,便于转化为其所对应的编程语言类型

  • 添加功能包依赖:

    1. 添加了生成消息的功能包依赖
    2. 添加了动态生成的功能包依赖
  • 编译选项中的std_msgs是自定义消息文件时所依赖的包

  • 宏定义的调用方式

  • 含有动态生成的代码,需要让可执行文件和动态生成的程序产生依赖关系

  • 动态地和通过Person.msg生成的头文件进行连接

  • 即用于和自定义的消息进行连接

  • roscore:婚介所角色

  • 关注如何引入自定义消息接口

订阅者代码

在这里插入图片描述

配置编译规则

在这里插入图片描述

编译与运行

在这里插入图片描述

python实现

在这里插入图片描述

  • 具体地如下图所示:
    在这里插入图片描述
    在这里插入图片描述

服务

  • 服务模型:客户端+服务器

客户端实现

在这里插入图片描述

创建功能包

在这里插入图片描述

客户端代码

在这里插入图片描述
在这里插入图片描述

  • waitForService:阻塞式服务,用于发现服务
  • call方法:阻塞式方法

配置编译规则

在这里插入图片描述

编译并运行

在这里插入图片描述

python实现

在这里插入图片描述
在这里插入图片描述

  • target_link_libraries:需要链接ROS相关的库
  1. 创建工作空间
  2. 创建功能包
  3. 创建源代码
  4. 设置编译规则
  5. 工作空间根目录编译
  • 针对服务的标准定义:trigger数据类型
  • 注意source有无的原因
  • spinonce队列中没有数据,则继续执行,否则去回调
  • python中spin是死循环

服务端实现

在这里插入图片描述

C语言实现

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

配置编译规则

在这里插入图片描述

编译并运行服务器

在这里插入图片描述

python实现

在这里插入图片描述

  • 第一个函数为发布器内容
  • 第二个函数为服务的回调函数
  • 第三个号函数为创建服务
  • 服务内容:使用publisher进行发布

服务数据的定义与使用

在这里插入图片描述

自定义服务数据

在这里插入图片描述

服务器代码

在这里插入图片描述

在这里插入图片描述

客户端代码

在这里插入图片描述

配置编译规则

在这里插入图片描述

编译与运行

在这里插入图片描述

python实现

服务器

在这里插入图片描述

客户端

在这里插入图片描述

  • —来分隔请求和响应

  • 根据定义产生对应的头文件

  • 添加动态生成message的依赖的功能包

  • 使用编译产生的头文件

在这里插入图片描述

  • add_dependencies:添加动态生成的CPP头文件

  • spin:一直死循环

  • 和动态生成的头文件进行依赖

参数服务器

在这里插入图片描述

  • 保存各个节点的配置参数

  • 全局变量的存储空间

创建功能包

在这里插入图片描述

参数命令行使用

在这里插入图片描述

程序实现

在这里插入图片描述

在这里插入图片描述

  • YAML参数文件

  • 获取参数的方式

  • 改变RGB值,然后向sim请求,才能生效
    在这里插入图片描述

  • 保存在终端当前路径

配置编译规则

在这里插入图片描述

编译与运行

在这里插入图片描述

python实现

在这里插入图片描述
在这里插入图片描述

ROS坐标管理系统

坐标变换基础

在这里插入图片描述在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

命令行工具与可视化工具

在这里插入图片描述

  • 底层机制:广播监听机制

  • 坐标系保存在TF树中

  • launch理解为启动脚本文件

  • rosrun tf view_frames
    在这里插入图片描述

  • 根坐标系+目标坐标系

  • RPY:XYZ轴旋转

  • rviz:三维可视化平台

  • fixed frame +add tf
    在这里插入图片描述

TF坐标系广播和监听编程实现

在这里插入图片描述

广播代码

在这里插入图片描述

在这里插入图片描述

监听器代码

在这里插入图片描述
在这里插入图片描述

设置编译规则

在这里插入图片描述

编译并运行

在这里插入图片描述

python实现

广播器

在这里插入图片描述

监听器

在这里插入图片描述

  • 重映射

  • 创建广播器

  • 是否存在——>查找变换关系

  • 最大等待时间和查询时间

  • 节点名字的重映射

  • 通过参数设置获取海龟名字

launch启动文件

在这里插入图片描述
在这里插入图片描述

基本语法

在这里插入图片描述

参数设置

在这里插入图片描述
在这里插入图片描述

实例

在这里插入图片描述
在这里插入图片描述

  • 启动launch文件,则自动启动roscore

  • ns:用于给节点配置命名空间

  • args:用于给节点配置参数

  • 重映射=重命名,之前名字失效

  • 连接其他库中的功能,本身没有可编程内容

创建launch文件夹,存放launch文件

关注param内外区别:有无命名空间

在这里插入图片描述

可视化工具

在这里插入图片描述
在这里插入图片描述

rviz

在这里插入图片描述

在这里插入图片描述

gazebo

在这里插入图片描述

在这里插入图片描述
显示插件标准已经定义好,按照标准数据结构发布,则可显示

添加图像显示插件(项)——>选择对应的图像的话题

roscore
rosrun rviz(功能包) rviz(执行文件名)

roslaunch gazebo

ros_control框架

moveit移动机械臂

课程总结

在这里插入图片描述

机器人控制与仿真

在这里插入图片描述在这里插入图片描述在这里插入图片描述

资源推荐

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


Moveit

集成化的功能包
moveJ
moveP
能够自主避障
关节空间和工作空间

  • 8
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值