文章目录
- 1 准备工作
- 2 几个基本概念
- 3 节点
- 4 Client Libraries
- 5 roscore
- 6 使用rosnode
- 7 使用rosrun
- 8 总结回顾
这篇教程主要介绍了
roscore
,
rosnode
,和
rosrun
等命令行工具。
1 准备工作
首先安装一个轻量级的tutorial
:
$ sudo apt-get install ros-<distro>-ros-tutorials
其中,<distro>
需要用特定的版本号替换,例如kinetic
。
2 几个基本概念
- Nodes节点:一个节点就是能与另外一个节点通信的可执行程序。
- Messages消息:订阅或发布话题时,ROS的数据结构类型。
- Topics话题:一个能订阅或发布话题的节点。
- Master:帮助所有nodes找到彼此的节点。
- rosout:ROS标准输出。
- roscore:包含了Master,rosout和parameter server参数服务器。
3 节点
节点不仅仅是一个可执行文件。
- ros节点可以利用ros client libarary来和其他节点通信。
- 节点可以订阅或者发布一个topic话题。
- 节点也可以提供或者使用一个service服务。
4 Client Libraries
ROS client libraries允许节点用不同的编程语言编写,并进行通信:
- rospy = python client libary
- roscpp = c++ client library
5 roscore
在使用ros之前,第一件要做的事情就是启动roscore
:
$ roscore
启动之后会看到这样的消息:
... logging to /home/lk/.ros/log/57e9d664-9a49-11e9-8898-d46d6d97e028/roslaunch-Mibook-7319.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://Mibook:45859/
ros_comm version 1.12.14
SUMMARY
========
PARAMETERS
* /rosdistro: kinetic
* /rosversion: 1.12.14
NODES
auto-starting new master
process[master]: started with pid [7330]
ROS_MASTER_URI=http://Mibook:11311/
setting /run_id to 57e9d664-9a49-11e9-8898-d46d6d97e028
process[rosout-1]: started with pid [7343]
started core service [/rosout]
如果roscore
没有被初始化,就会产生一个网路配置的问题。
6 使用rosnode
打开一个新的终端,使用rosnode
命令来查看roscore
做了什么,注意之前的roscore
窗口一定不能被关闭!
打开一个新的终端,环境会被重新设置,
~/.bashrc
文件会被刷新。如果新打开一个窗口,
rosnode
出了问题,需要把环境手动添加到~/.bashrc
文件中。
rosnode
显示了当前正在运行的ros节点:
$ rosnode list
会看到:
/rosout
使用rosnode info
命令来查找特定节点的信息:
$ rosnode info /rosout
# echo
--------------------------------------------------------------------------------
Node [/rosout]
Publications:
* /rosout_agg [rosgraph_msgs/Log]
Subscriptions:
* /rosout [unknown type]
Services:
* /rosout/get_loggers
* /rosout/set_logger_level
contacting node http://Mibook:45075/ ...
Pid: 7343
7 使用rosrun
rosrun
可以在不知道package路径的情况下,直接运行节点。
标准用法:
$ rosrun [package_name] [node_name]
举例,现在运行一个turtlesim_node
:
$ rosrun turtlesim turtlesim_node
会看到一个窗口:
在新的窗口中查看rosnode
节点:
$ rosnode list
# echo
/rosout
/turtlesim
可以使用重映射命令来改变节点的名称:
$ rosrun turtlesim turtlesim_node __name:=liukai_turtle
这时候又会产生一个小乌龟:
最后再查看一下节点:
$ rosnode list
/liukai_turtle
/rosout
/turtlesim
如果出错了,使用
rosnode cleanup
命令清理所有节点。
最后使用rosnode ping
命令来ping
一下自己的小乌龟:
$ rosnode ping liukai_turtle
rosnode: node is [/liukai_turtle]
pinging /liukai_turtle with a timeout of 3.0s
xmlrpc reply from http://Mibook:41971/ time=0.499010ms
xmlrpc reply from http://Mibook:41971/ time=2.086878ms
xmlrpc reply from http://Mibook:41971/ time=1.683950ms
xmlrpc reply from http://Mibook:41971/ time=1.563072ms
xmlrpc reply from http://Mibook:41971/ time=2.007008ms
xmlrpc reply from http://Mibook:41971/ time=1.938105ms
^Cping average: 1.629670ms
8 总结回顾
- roscore = ros + core
- rosnode = ros + node
- rosrun = ros + run
常用命令:
命令 | 作用 |
roscore | 启动ros核心, 包括master,rosout, parameter server参数服务器 |
rosnode list | 列出所有的rosnode 节点 |
rosnode info [node_name] | 列出某个node的信息 |
rosrun [package_name] [node_name] | 启动某个ros节点 |
rosnode ping [node_name] | ping某个节点 |