ROS基础知识

 

ROS基础知识

通信机制

开源机器人操作系统ROS——机器人领域的安卓系统-上海托华机器人有限公司 ROS 学习笔记02 ROS 的定义与核心概念| 孙健耕的博客

ROS学习笔记—ros的通信机制-IT Blog

  1. 话题使用编程语言无关的 .msg 文件定义 类型和数据结构 用于传输数据
  2. 服务使用编程语言无关的 .rsv 文件定义 类型和数据结构 用于传输数据

node – 执行单元

执行具体任务的执行单元,可以分布式运行在不同的主机,由不同的编程语言实现。名称必须唯一。

ros master – 节点管理器

  1. 为节点提供命名和注册服务
  2. 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接。
  3. 提供参数服务器,由所有节点共享。适合存储一些静态、非二进制的配置参数

文件系统

ROS架构组成---文件系统级_我要和你讲道理的博客-CSDN博客

  1. 功能包:ros基本单元,包含节点源码、配置文件、数据定义等
  2. 功能包清单:记录功能包的基本信息
  3. 元(综合)功能包:组织用于同一目的的功能包

常用命令

  1. rostopic
  2. rosservice
  3. rosnode
  4. rosparam
  5. rosmsg
  6. rossrv

启动样例

# 启动 ros master 用于管理所有的节点
$ roscore

# rosrun 运行某个功能包里面的某个节点
$ rourun <功能包> <节点>

# 显示系统的计算图:各个节点及其指点的通讯数据和方式
$ rqt_graph 

rosnode

# 列出所有节点
$ rosnode list

# 查看某个节点的信息:发布什么话题,订阅什么话题,提供什么服务,它的配置、主机信息
$ rosnode info <node>

话题

rostopic

$ rostopic list

# 用命令行发送话题。加上 -r int数,就可以指定话题发布的频率,为(int数)Hz。
$ rostopic pub [-r] [int] <topic> <消息数据的结构> <消息数据的内容>
# 例子(按两次tab就会出现 geometry_msgs/Twists "…………" 这些,只需要修改数据的内容即 "…………" 这部分):
$ rostopic pub /turtle/cmd_vel geometry_msgs/Twists "…………"


rosmsg

# 显示消息的数据结构
$ rosmsg show geometry_msgs/Twists

服务

rosservice

$ rosservice list

话题记录和复现

# 记录
$ rosbag record -a -O <zip_name>
$ rosbag record -a -O cmd_record

# 复现
$ rosbag play cmd_record.bag

创建工作空间与功能包

ROS(四)——创建工作空间与功能包& Catkin编译系统_hxxjxw的博客-程序员宅基地- 程序员宅基地

devel 和 install 重叠部分很多

样例

$ mkdir -p ~/catkin_ws/src
$ cd <path_to_src>
$ catkin_init_workspace
$ cd ..  # 工作空间根目录
$ catkin_make
$ catkin_make install

创建功能包

功能包是源码的最小单元,因此所有的源码都要放在功能包里面,不能直接放在 src 里面

$ catkin_create_pkg <package_name> [depend1] [depend2] [depend3] …
$ catkin_create_pkg test_pkg std_msgs rospy roscpp


# 创建后,编写代码在 /test_pkg/src 		头文件在 /test_pkg/include/test_pkg
# 回到 catkin_ws (工作空间根目录)编译
$ catkin_make

$ source devel/setup.bash

# 查看功能包路径
$ echo $ROS_PACKAGE_PATH

功能包里面的 CMakLists.txt

功能包里面的 package.xml

  1. 名字
  2. 版本号
  3. 描述信息
  4. 维护者的email
  5. 开源许可证
  6. 依赖信息
    1. 编译依赖 build_depend
    2. 执行依赖 exec_depend

发布订阅模型编程实现

md