程序包,里面包含节点Node、ROS程序库、数据集、配置文件
程序包的配置文件,即描述程序包的相关信息,包括其名字、版本、功能简述、依赖关系
代码仓库
计算图,ROS在点对点网络里整合并处理数据的过程。图中包含的基本概念:节点、主机、参数服务器、消息、服务、话题、数据包。
节点,一个机器人控制系统由多个节点组成,每个节点控制不同的部分。比如一个机器人有两个节点,一个是传感器节点,专门负责接收传感器数据,另一个是控制节点,专门负责控制机器人作出某些动作。
主机,节点管理器,功能是对于计算图中各个元素进行名字注册(register)和检索,没有主机,节点之间就不能找到彼此则无法进行通信。
参数服务器,是主机的一部分,允许数据通过键的方式存储
消息,节点之间通过传递消息交流,消息是一种数据结构
话题,消息的传输使用的是发布\订阅的机制。一个话题可理解为只针对某种消息,节点发送消息则是将该消息发布到其对应的话题上,只有那些订阅该话题的节点才能接收到这个消息。一个话题可能有多个订阅者和发布者,一般他们互相是不知道(也不需知道)对方的存在,以达到解耦(decouple)的效果。
【配图,节点发送消息的过程】
服务,尽管"发布\订阅"模型非常灵活,但它是多对多、单向传输的,不适用于"发出请求\返回响应"方式的交互,然而这种交互在分布式系统中十分常见。因此 "请求\响应"通过服务来实现。节点需要提供的信息有:所使用服务的名字以及使用服务的客户,将这些信息打包成请求,发送出去之后等待答复。
数据包,存储一段时间内ROS的消息数据
相当于ROS中的stdout/stderr
主机+Rosout+参数服务器
catkin工作空间:
创建catkin工作空间,在需要创建的目录下输入命令:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash
echo $ROS_PACKAGE_PATH
可以看到当前工作空间的路径在最前面
**【注:roscd, rospack等ROS工具只能针对那些路径已包含在环境变量ROS_PACKAGE _PATH中的程序包】**
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
(注意要先将当前工作空间的路径添加到环境变量中,即前面提到的source命令,这样之后执行rospack命令才不会报错提示找不到beginner_tutorials这个包)
rospack depends1 beginner_tutorials
输出结果
std_msgs
rospy
roscpp
对于程序包A的一级依赖程序包B,其自身也依赖一些其它的程序包C,这些程序包C是A的间接依赖
rospack depends1 rospy
可看到rospy的一级依赖
rospack depend beginner_tutorials
递归检测出A的所有的依赖包(包括一级和间接)
用catkin_make,可认为是在CMake标准工作流程中依次调用了cmake和make
在工作空间中使用catkin_make
在工作空间的根目录下,输入
catkin_make
该命令会编译位于目录 catkin_ws/src 中的所有程序包
更多关于catkin_ make的资料: http://wiki.ros.org/catkin/commands/catkin_make
每个节点是一个可执行文件
节点之间通过话题来通信
使用rosrun
rosrun ros_pkg ros_pkg_node
使用rosnode list
rosnode list
使用rostopic echo
rostopic echo [topic]
使用rqt_graph
rosrun rqt_graph rqt_graph
使用rqt_plot
rosrun rqt_plot rqt_plot
首先运行turtlesim包中的turtlesim_node节点[海龟本体]
rosrun turtlesim turtlesim_node
另外打开一个终端
rosrun turtlesim turtle_teleop_key
在新终端中打开rqt_graph,可观察到这两个节点通过话题cmmd _vel来通信
rosrun rqt_graph rqt_graph
在新终端中, 列出当前的topic
rostopic list
列出该话题的消息类型
rostopic type /turtle1/cmd_vel
列出该消息类型的详细数据类型
rosmsg show geometry_msgs/Twist
发布消息到话题cmd_vel,告诉turtlesim _node,使其以2.0大小的线速度和1.8大小的角速度移动
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
命令中的-1表示rostopic发布一条信息后马上退出,也可以设置为循环发送:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
该信息以1Hz的稳定频率来发送,使turtle保持移动状态
这时可以观察rqt_graph
发现多了一个节点:rostopic发布器节点,同样地,该节点与turtlesim_node节点[海龟本体] 通过话题cmd _vel通信
使用roslaunch同时运行多个节点,通过编写launch文件来配置各个节点
首先保证环境变量中是否有catkin_ws工作空间的路径
echo $ROS_PACKAGE_PATH
若无,则进入该工作空间的根目录,执行
source devel/setup.bash
之后在任意目录下都可以进入之前创建的程序包
roscd beginner_tutorials
新建launch文件夹,在里面创建launch文件
mkdir launch
gedit turtlemimic.launch
拷贝以下launch文件的内容:
http://wiki.ros.org/cn/ROS/Tutorials/UsingRqtconsoleRoslaunch
ROS编写消息发布器和订阅器
相关API格式
https://blog.csdn.net/junshen1314/article/details/44701693 更详细的解释
[http://wiki.ros.org/cn/ROS/Tutorials/WritingPublisherSubscriber(c%2B%2B)]
原文:https://www.cnblogs.com/notesbyY/p/10485711.html