ROS系统架构及概念 学习笔记(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/JDWell/article/details/82385759

理解ROS文件系统级

指令学习:

标准cmake流程,一次仅能编译一个包:

$ camke packageToBuild/
$ make

编译工作空间所有包:

$ cd workspace
$ catkin_make

为了创建  修改  或者使用功能包.ROS给我们提供了一些工具:

rospack: 获取信息或在系统中查找工作空间
catkin_create_pkg: 创建新的功能包
catkin_make: 编译工作空间
rosdep: 安装功能包的依赖项
rqt_dep: 查看包依赖关系图
roscd: 更改目录
rosed: 编辑文件
roscp: 从一些功能包复制文件
rosd: 列出功能包目录
rosls: 列出功能包下的文件

定位ros_tutorials综合功能包:

$ rosstack find ros_tutorials

显示路径为:/opt/ros/kinetic//share/ros_tutorials

查看里面的代码:

$ gedit /opt/ros/kinetic/share/ros_tutorials/package.xml

查看消息的结构的命令:

$ rosmsg show std_msgs/Header

输出:

uint32 seq
time stamp
string frame_id

理解ROS计算图级

节点(Node ) :  主要的计算机执行进程

节点管理器(Master) :   用于节点的名称注册和查找等

参数服务器(Parameter Server) :   能够使数据通过关键词存储在一个系统的核心位置

消息(Message): 包含一个节点发送到其他节点的信息数据

主题(Topic): 每个消息都必须有一个名称来被ROS 网络路由

服务(Service): 从节点获取一个请求或应答需要服务实现

消息记录包(bag): 是一种用于保存和回收ROS消息数据的文件格式

ROS提供的处理节点的工具: rosnode

rosnode info NODE 输出当前节点信息
rosnode kill NODE 结束当前运行节点进程或发送给定信号
rosnode list 列出当前活动节点
rosnode machine hostname 列出某一特定计算机上运行的节点或列出主机的名称
rosnode ping NODE 测试节点间的连通性
rosnode cleanup 将无法访问的节点的注册信息清除

改变主题名称:

$ rosrun book_tutorials tutorialX topic1:=/level1/topic1

命令将主题名称从topic1改为/level1/topic1

更改节点参数:

$ rosnode book_tutorials tutorialX _param:=9.0

这样参数(param)就设置为浮点数9.0

下边是系统保留的关键子名称,不能用作参数名:

_name  为节点名称保留的一个特殊关键字

_log 为记录节点日志存储地址保留的一个关键字

_ip和_hostname表示ROS_IP和ROS_HOSTNAME的关键字

_master 表示ROS_MASTER_URI 的关键字

_ns 表示ROS_NAMESPACE  的关键字

主题

概念:节点间用来传输数据的总线   

一个主题可以有多个订阅者也可以有多个发布者,但是你需要注意用不同的节点发布同样的主题

ROS的主题可以使用TCP/IP和UDP传输

ROS默认传输TCP/IP 长连接--->TCPROS

UDP传输--->UDPROIS是一种低延迟高效率的传输方式,但是可能丢失数据,最适合远程操控的任务

ROS提供了一个操作主题的工具: rostopic

rostopic bw /topic 显示主题所使用的宽带
rostopic echo /topic 将消息输出到屏幕
rostopic find message_type 按照类型查找主题
rostopic hz /topic  显示主题的发布频率
rostopic info /topic
rostopic list 输出活动主题的列表
rostopic pub /topic type args 将数据发布到主题,它允许我们直接从命令行中对任意主题创建和发布数据
rostopic type /topic 输出主题的类型,或者说主题中发布的消息类型

服务

直接与节点通信并获得应答得使用服务

ROS关于服务的命令行工具有两个:rossrv和rosservice    通过rossrv看到有关服务数据结构的信息与rosmsg具有完全一致的用法

rosservice可以列出服务列表和查询某个服务

rosservice call/service args 根据命令行参数调用服务
rosservice find msg-type 根据服务类型查询服务
rosservice info/service 输出服务信息
rosservice list 输出活动服务清单
rosservice type/service 输出服务类型
rosservice uri/service 输出服务的ROSRPC URI

消息

消息类型包括ros提供的标准类型和用户自定义类型

消息类型在ros中按照以下命名方式进行约定:功能包名称/.msg文件名称  例如,std_msgs/msg/String.msg的消息类型是std_msgs/String

ROS使用命令行工具rosmsg来获取有关信息的消息
 

rosmsg show 显示一条消息的字段
rosmsg list 列出所有消息
rosmsg package 列出功能包的所有消息
rosmsg packages 列出所有具有该消息的功能包
rosmsg users 搜索使用该消息类型的代码文件
rosmsg md5 显示一条消息的MD5求和结果

消息记录包

消息记录包是由ROS创建的一组文件  使用.bag格式保存消息\主题\服务和其他ROS数据消息

使用可视化工具调用和回放数据

rosbag 用来录制\播放和执行其他操作
rqt_bag 用于可视化图形环境中的数据
rostopic 帮助我们看到节点发送的主题

ROS节点管理器

ROS节点管理器向ROS系统中其他节点提供命名和注册服务

跟踪主题的发布者和订阅者

节点管理器的作用是使用ROS节点之间能够相互查找

节点管理器通常使用roscore命令运行,它会加载ROS节点管理器及其他ROS核心组件

参数服务器是可以通过网络访问的共享的多变量字典。节点使用此服务器来存储和检索运行时的参数。

XMLRPC是一个使用XML编码并以HTTP作为传输机制的远程调用(Remote Procrdure Call, RPC)协议。

参数服务器使用XMLRPC数据类型为参数赋值,包括以下类型:

  • 32位整数
  • 布尔值
  • 字符串
  • 双精度浮点
  • ISO 8601 日期
  • 列表
  • 基于64位编码的二进制数据

ROS中关于参数服务器工具是rosparam。支持的参数如下所示:

rosparam list 列出了服务器中的所i有参数。
rosparam get parameter 获取参数值。
rosparam set parameter value 设置参数值。
rosparam delete parameter 删除参数。
rosparam dump file 将参数服务器保存到一个文件。
rosparam load file 加载参数文件到参数服务器。

理解ROS开源社区级

ROS文件系统:

查看turtlesim包路径:

$ rospack find turtlesim
将显示  /opt/ros/kinetic/share/turtlesim

寻找已经在系统中安装了的某个综合功能包:

ubuntu@ubuntu:~$ rosstack find ros_comm
/opt/ros/kinetic/share/ros_comm

获得功能包或功能包集下面的文件列表,那么需要使用:

ubuntu@ubuntu:~$ rosls turtlesim
cmake  images  msg  package.xml  srv

进入文件夹下:

ubuntu@ubuntu:~$ roscd turtlesim
ubuntu@ubuntu:/opt/ros/kinetic/share/turtlesim$ 

获得路径:

ubuntu@ubuntu:/opt/ros/kinetic/share/turtlesim$ pwd
/opt/ros/kinetic/share/turtlesim

查看ROS正在使用的空间:

ubuntu@ubuntu:/opt/ros/kinetic/share/turtlesim$ echo $ROS_PACKAGE_PATH
/home/ubuntu/catkin_ws/src:/opt/ros/kinetic/share

创建工作空间:

$ mkdir -p ~/dev/catkin_ws/src
$ cd ~/dev/catkin_ws/src
$ catkin_init_workspace

创建完成,里面没有功能包,只有CMakeList.txt  编译工作空间,使用如下命令:

$ cd ~/dev/catkin_ws
$ catkin_make

输入ls命令,可以看到上面命令创建的新文件夹,分别是build和devel文件夹

完成配置,使用下面命令:

$ source devel/setup.bash

这一步只是重新加载了setup.bash文件  如果你关闭并打开一个新的终端,也将得到同样的效果

解决每次使用此命令,在~/.bashrc中加入下边命令行:

$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

创建ROS功能包和综合功能包

在工作空间创建新的功能包:

$ cd ~/dev/catkin_ws/src
$ catkin_create_pkg chapter2_tutorials std_msgs roscpp

格式:catkin_create_pkg [package_name] [depend1] [depend2] [depend3] ...

  • std_msgs 包含了常见消息类型,表示基本的数据类型和其他基本的消息构造,如多维数组
  • roscpp 使用C++实现ROS的各种功能 他提供了一个客户端,让C++程序员能够调用这些接口快速完成与ROS的主题\服务和参数相关的开发工作
rospack profile 此命令用于通知新添加的内容
rospack find chapter2_tutorials  此命令用于查找路径
rospack depends chapters2_tutorials 此命令用于查看依赖关系
rosls chapter2_tutorials 此命令用于查看内容
roscd chapter2_tutorials 此命令会更改实际路径

编译ROS功能包

编译功能包:

$ cd ~/dev/catkin_ws/
$ catkin_make

使用ROS节点

在使用ROS前,必须使用 $ roscore 命令启动roscore

使用rosnode获取节点数据

获取参数更详细的解释:

 $ rosnode <param> -h

roscore正在运行,我们想要获取正在运行节点的相关信息:

$ rosnode list

发现仅仅有 /rosout节点,这个节点是随着roscore运行而运行

使用下列命令能够获得更详细的信息:

$ rosnode info
$ rosnode ping
$ rosnode machine
$ rosnode kill
$ rosnode cleanup

使用rosrun 命令启动一个新节点,如下所示

$ rosrun turtlesim turtlesim_node

查看节点信息:

$ rosnode info /turtlesim

如何使用主题与节点交互

要进行交互并获取主题的信息,可以使用rostopic工具  此工具接受以下参数:

rostopic bw TOPIC 显示主题所使用的宽带
rostopic echo TOPIC 将消息输出到屏幕
rostopic find TOPIC 按照类型查找主题
rostopic hz TOPIC 显示主题的发布频率
rostopic info TOPIC 输出活动主题信息
rostopic list TOPIC 列出活动主题
rostopic pubs TOPIC 将数据发布到主题
rostopic type TOPIC 输出主题的类型

查看有关这些参数的详细信息,请使用-h,如下所示:

$ rostopic bw -h 

猜你喜欢

转载自blog.csdn.net/JDWell/article/details/82385759