ros通信机制详细版
1.在ros诞生前很多人认为机器人研究需要一个开放式协作框架,在2000年斯坦福大学开展了斯坦福人工智能机器人等项目,在研究具有代表性,集成式人工智能系统的过程中,创立了用于室内场景的高灵活性、动态软件系统,其可以用于机器人学研究。3.编译:中间文件在(/工作空间/devel/lib/python3/dist-pachages/包名/msg)3.提供用于在多台计算机上获取,构建,编号和运行代码的工
1.ros简介
1.ros诞生背景
在2007年Willow Garage公司发布了ros系统(机器人操作系统),是一套机器人通用软件框 架,可以提升模块复用性
2.ros概念
1.是适用于机器人的开源元操作系统
2.集成了大量工具、库、协议、提供类似操作系统所提供的功能,简化对机器人的控制
3.提供用于在多台计算机上获取,构建,编号和运行代码的工具和库,类似于“机器人框架”
4.是通讯机制、工具软件包、机器人高层技能一级机器人生态系统的集合体
3.设计目标:代码复用、分布式、松耦合、精简、语言独立性、易于测试、大型应用、丰富的组 件工具、免费且开源
4.发展历程
1.在ros诞生前很多人认为机器人研究需要一个开放式协作框架,在2000年斯坦福大学开展了斯坦福人工智能机器人等项目,在研究具有代表性,集成式人工智能系统的过程中,创立了用于室内场景的高灵活性、动态软件系统,其可以用于机器人学研究
2.2007年Willow Garage公司提供大量资源,用于将斯坦福大学机器人项目的软件系统进行扩展与完善,同时ros的核心思想和基本软件包逐渐得到完善
3.ros的发行版本指软件包的版本,与Linux发行版本概念类似。退出ros发行版本旨在开发人员可以使用相对稳定的代码库,知道其准备好将所有内容进行版本升级为止
2.ros安装
可在上述链接中查看ros系统安装教程
3.ros快速体验
1.添加Ubuntu中文输入法
1.打开settings
2.找到![]()
3.点击Manage Installed Languages
4.在弹出的窗口中点击 Install 安装语言支持
5.勾选Chinese (Simplified),点击Apply
6.回到Region & Language
7.在input Sources部分,点击 + 按钮添加输入法
8.找到Chinese
9.选中后点击Add
10.可用win+空格键切换输入法
2.代码实现
1.流程:指定解释器,导包,编写主入口,初始化ros节点,输出日志
指定解释器:#! /usr/bin/env python
2.编译:在cmake文件中添加 
可自动下载python解释器
3.执行catkin make
4.新开窗口,输入roscore进入当前窗口,输入当前目录,加载环境变量
5.rosrun+包名+被执行的python文件
4.集成环境搭建
1.安装终端terminator
输入sudo apt install terminator
2.安装vscode
1.使用和基本配置
1.创建工作空间:mkdir -p xxx_ws/src
cd xxx_ws
catkin_make
2.使用code命令进入vscode
3.在集成终端中打开:输入chomd +x *.py
4.软链接:sudo ln -s /usr/bin/python3 /usr/bin/python
3.launch文件展示
1.优势:可以一次性实现多个ros节点
2.实现
1.选定功能包右击--》添加launch文件夹
2.选定launch文件夹右击--》添加launch文件(xml文件)
3.编辑launch文件内容

node--》包含的某个节点
pkg--》功能包
type--》被运行的节点文件
name--》为节点命名
output--》设置日志的输出目标
4.运行:roslaunch 包名 launch文件名
5.ros架构
1.系统架构
1.os层:操作系统
2.中间层:封装关于机器人开发的中间件
3.应用层:功能包,以及功能包内的节点
2.自身结构
1.文件系统:源代码组织形式
2.计算图
3.开源社区
3.文件系统
1.结构

4.ros文件系统相关命令



5.计算图
1.简介:以点对点的网络形式表现数据交互过程
2.安装(以noetic为例)

3.启动:rosrun rqt_graph rqt_graph
6.ros通信机制
使用python实现代码时需导包:import rospy
导入消息格式:from std_msgs.msg import String
1.实现策略
1.话题通信(发布订阅模式)
2.服务通信(请求响应模式)
3.参数服务器(参数共享模式)
2.简介
1.概念:以发布订阅的方式实现不同节点之间数据交互的通信模式
2.作用:用于不断更新的,少逻辑处理的数据传输场景
3.理论模型
1.角色--》流程--》注意
1.角色:master-管理者:可根据话题建立发布者和订阅者之间的连接
talker-发布者:
listener-订阅者
2.注意:1.使用的协议由PRC和TCP
2.发布者和订阅者话题无顺序关系
3.发布者和订阅者都可以存在多个
4.发布者和订阅者建立连接后,管理者就可以关闭了
5.下图实现流程以实现封装,以后直接调用即可
3.话题通信应用时的关注点
1.大部分已经实现封装了
2.话题设置
3.关注发布者和订阅者实现
4.关注信息载体

3.需求分析
1.发布者python
代码主体

2.添加发布逻辑
指定发布频率:rate=rospy.Rate(发布频率)
修改后代码

3.订阅者实现
代码示例

注:1.在最后一定要写上rospy.spin
2.无论是发布者还是订阅者都要以下图形式进行编译

3.若发现发布者和订阅者信息不对称,须在发布前进行休眠(rospy.sleep(休眠时间))确保订阅
4.使用计算图显现
1.启动:输入rqt_graph启动计算图
4.自定义msg
1.定义msg文件:功能包下新建msg目录,添加文件Person.msg

2.编辑配置文件
1.在package文件中导入message_generation和message_runtime
2.在cmake中添加message_generation以及进行下图操作


3.编译:中间文件在(/工作空间/devel/lib/python3/dist-pachages/包名/msg)
4.python实现
在代码实现前需输入from msg包名 import 数据文件名
1.配置vscode:方便代码提示以及误抛异常

2.发布方实现
代码实现

3.订阅方实现

5.服务通信
1.概念:已请求相应的方式实现不同节点数据交互的通信模式
2.作用:用于偶然的,对时时性有要求,有一定逻辑处理需求的数据传输场景
3.理论模型
1.master-管理者
2.server-服务端
3.client-客户端
4.流程:master会根据话题实现server和client的连接
5.注:
1.保证顺序:客户端发起请求时,服务端需已经启动
2.客户端和服务端都可以存在多个
6.关注点
1.流程已被封装直接调用即可
2.话题
3.服务端
4.客户端
5.数据载体

7.自定义srv
1.流程
1.按照固定格式创建srvwenjian
2.编辑配置文件
3.编译生成中间文件
2.定义srv文件

3.编辑配置文件在package文件中添加message_generation和message_runtime
4.在cmake中添加message_generation,并解除service注释,以及添加下图内容

5.vscode配置:同message配置
6.流程
1.导包
2.初始化ros节点
3.创建服务端对象
4.处理逻辑(回调函数)
5.spin()
代码示例

7.客户端实现
流程:
1.导包
2.初始化ros节点
3.创建客户端对象
4.组织请求数据,并发送请求
5.处理响应
代码示例

8.优化实现:可以在实行节点时,动态传入参数
使用sys.argv数组
优化后的代码示例

9.注意事项
1.需先启动服务端,客户端先于服务端启动,会抛出异常
解决方案:使用ros内置函数,等待服务启动
1.client.wait_for_service()
2.rospy.wait_for_service("话题名称")
10.参数服务器
1.概念:一共享的方式实现不同节点之间数据交互的通信模式
2.作用:存储一些多节点共享的数据,类似于全局变量
3.理论模型

1.master:管理者
2.talker:设置者
3.listener:调用者
4.注:参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据
5.可用数据类型

6.参数新增与修改
1.需求:在参数服务器中设置机器人属性,型号,半径
2.实现:rospy.set_param()
3.代码示例

7.参数服务器获取参数
1.函数类别

8.参数删除
代码示例

注:二次删除会抛出异常
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)