ROS系统

ROS=通信机制+开发工具+应用功能+生态系统-->提高软件复用率

通过两种不同的方式进行通讯:

1.TOPIC异步通信:publish and subscribe between publisher and subscriber nodes by message under the ROS moaster registration模式。节点关系:多对多。多用于数据传输

2.SERVICE同步通信:request and response between servicer and client nodes by message under the ROS moaster registration模式。节点关系:一对多。多用于逻辑处理

参数:全局共享字典。

元功能包meta packages including package

 最多只能找到在20.04Ubuntu安装ROS的教程,找不到在22.04上的,只好把22.04的卸载重新安装了。记住,vmware上的是20.04,virtualbox上的是22.04。

常用ROS命令:

rqt_graph基于qt可视化显示并且解释当前结点之间关系。

rosnode显示节点相关的信息,输入rosnode就会被提示相关的命令。例如rosnode list显示所有结点(不用关心rosout结点,因为这个节点是默认用来记录节点信的);rosnode info xx查看xx结点的信息.

rostopic显示相关话题的信息,输入rostopic就会被提示相关命令。例如rostopic list显示当前所有话题列表,rostopic pub给结点发布信息。

rosmsg查看节点信息。比如rosmsg show xx查看某个数据的结构与内容。

rosservice查看服务相关信息,例如resoservice list显示列表,rosservice call xx为节点创建一个service。

rosbag用于一次实验的记录与复原。记录:

rosbag record -a -O xx

将运行的数据存入xx之中,-a代表全部,-O代表放入xx之中。

复现:

rosbag play xx

即可复现。

ROS工作空间与功能包:

工作空间(存放工程开发相关文件的文件夹):

1.src代码空间(source space):放功能包

2.build:编译空间(build space)存放编译好的二进制文件

3.devel:开发空间(development space)

4.install:安装空间(isntall space)

3.4作用相似,所以在ROS2中合为一体

创建工作空间:

 

 功能包:储存源码的最小单元,源码必须放在这里,不能直接放入srd。

同一个工作空间不能有同名功能包,不同工作空间可以有同名功能包。

功能包放在src中。

 

 功能包中四个文件:

1.src放置源码

2.include放置头文件

3.cmakelist.txt描述编译语法

4.package.xml包含功能包描述信息,作用描述,开源许可证,作者信息以及功能包依赖等等,编译时会首先搜索依赖,看看是否已经具备

想执行功能包,要先配置环境变量(在catkin_ws中):

source devel/setup.bash

随后检查环境变量:

echo $ROS_PACKAGE_PATH

 实现Publisher:

 1.在工作空间创建功能包

 2.在功能包的src中创建源代码

 3.源代码包含:初始化结点,注册节点信息,创建消息,发布消息

 4.配置编译文件

 5.编译文件

 6.设置环境变量(也可以选择把这个命令放入隐藏的配置文件夹.bashrc中去)

 7.运行!

实现Subscriber:

 同上

用opencv创建摄像头:(51条消息) ROS教程(五):OpenCV调用USB摄像头并发布topic(详细图文)_Leslie___Cheung的博客-CSDN博客_opencv调用usb摄像头

实现Client与Server:

与publisher,subscriber类似

参数字典:

相当于一个储存各个节点的参数的空间。

查看,修改的方法:1.用rosparam命令行查看并修改;2.用程序在工作空间中进行修改与查看。

具体请查看古月居的ppt。

ROS之坐标管理系统tf:

用launch便捷启动:

关于ROS2:

安装ROS2入门教程——2. Ubuntu20.04安装ROS2 Foxy - 古月居 (guyuehome.com)

教程ROS2安装方法 - ROS2入门教程 (guyuehome.com)

我的ubuntu上shell是sh,不是bash或者zsh,所以

source install/local_setup.bash

要改成

source install/local_setup.sh

(查错可费老鼻子劲了)

用python语言实现节点要在功能包的setup.py文件中添加接口,

entry_points={
    'console_scripts': [
     'node_helloworld       = learning_node.node_helloworld:main',
     'node_helloworld_class = learning_node.node_helloworld_class:main',
     'node_object           = learning_node.node_object:main',
     'node_object_webcam    = learning_node.node_object_webcam:main',
    ],

如上。注意,接口等号前后都要做修改,等号右边功能包名和节点名都要改。没改全导致我花了整整一天。。。

posted @ 2022-08-06 10:49  _a_rk  阅读(239)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end