理解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