下·1.5.1ROS文件系统 34
1、数据交换的格式:
通过以下三种,进行设定。
2、package.xml文件中的解释:
编译时的编译工具、编译时依赖的工具包、 导出依赖、执行依赖。
二、ROS通信机制
1、ROS是进程(Nodes)的分布式构架
2、每个功能点都是被称为一个进程,每个进程之间的数据交换(通信)
3、通信机制:话题、
2.1话题通信
1、话题通信适用于数据不断更新的场景当中。发布、订阅。
2、2.1.2和2.1.3对应案例一。2.1.4、2.1.5和2.1.6对应案例二。
2.1.1话题通信机制模型
一般函数的调用,我有需要就可以去调用,自己可以把控去调用使用。
回调函数:需要外部消息的进入,告知使用才会去被调用使用。(类似中断,外部信息相当于中断信息)
注意:python与c++两者之间的匹配,将两者之间的话题对象进行统一设置,发布者就能够在订阅者收到了。
2.2服务通信
2.2.1服务通信模型
2.2.2服务通信自定义srv 64
srv:需要由两部分组成:请求+响应
为何是三个?
节点文件名、两个参数的输入。一共三个
第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个
注意:
1、如果没有任何设置的话,先启动客户端,会出现报错。一般是需要先启动服务端,后开启客户端。
2、如果没有先开启客户端,则需要进行设置说明。71
2.2.3参数服务器 78
2.4常用的命令 90
用途:用于不同节点之间自定义的节点与已存在的节点之间的通信,获取对方的话题、以及消息的承载格式。
通信机制部分的总结:
节点之间通过话题关联到一起,并使用某中类型的数据载体实现数据传输。
三、ROS通信机制进阶
3.1常用API
3.1.1初始化 125
3.1.2话题与服务相关对象 126
发布对象:
3.1.3回旋函数
作用:ros::spin() 和 ros::spinOnce() 用于处理回调函数。
spin():是执行到回调函数处,并处理在回调函数处再对回调函数自身进行循环。
spinOnce():
3.1.4时间
定时器的使用:
关闭节点指令:
3.2自定义头文件的调用 143
3.2.1自定义头文件的调用 143
3.2.2自定义源文件的调用 144
解决rosrun执行不到.py文件。需要进行以下的配置。
视频145
比较重要,看视频进行配置。python3就可以执行所编写的文件。
方案一:
方案二:
四、 ROS运行管理
问题一:功能包之间的关联
解决三个问题:
4.1元功能包
步骤一、在package.xml中添加可执行依赖
自己定义设置的功能包
步骤二、在CMakeLists中进行设置
注:内部括号内不需要有空格
4.2launch文件启动
4.2.3include
.launch文件复用:启动已存在的launch文件。复用!!
4.2.4对节点进行重新命名
4.2.5parm参数的设置
而本例子中name:是被称为私有名空间
4.2.6rosparm使用
从yaml中获得参数:load
结果:
而且还能够获取得到后面对应的数值,比如说.yaml文件中的数值数据。
从parm导入到.yaml文件当中:dump
4.2.7group使用
结果:
4.2.8arg的使用
实际上相当于编程语言中的宏定义功能。
结果:
自定义设置参数输入:
快捷键:
pwd:查看路径信息
ctrl+alt+a:加注释
alt + 方向键移动:所在的命令行整体的上下移动。(也可能是需要先复制)
问题:
1、如何将自己创建的python程序,生成ROS下的节点
2、节点之间的交互?拍摄照片节点、ICP算法定位节点、Moveit!运动控制节点。
目前最佳的选择是通过:服务通信。
思路:利用前面两个部分节点融合获取到的定位内容数据,通过服务通信来进行传递获取得到的定位数据内容发送回给Moveit!运动控制这部分的节点,进行控制机械臂进行向下运动处理。
3、控制执行:可以使用定时器,控制一个大致时间后,再进行另外的节点操作。参考视频131
4、梳理根据自己由python编写的功能包在ROS下进行。实际上我所编写的功能包的作用实际上就是经过ICP处理后得到的工件位姿的X、Y、Z的三维坐标进行订阅以及发布。
步骤一:创建工作空间,并根据python编写功能包的流程就行设置
步骤二:根据订阅将内容进行修改,把xyz的坐标进行处理,作为数据信息通过ROS订阅进行输出
步骤三:进行测试,使用一个订阅者,查看是否能够接收到发布者发的的数据。
步骤四:或者使用服务通信进行设置。
注意:
自己创建的信息、节点等要在自己的所创建的工作空间下进行操作!!!!!!
yaml格式的文件是存放在磁盘当中的。