ROS最主要的构成是节点(node),每一个节点可以看做为一个单独的处理单元.它可以接受外部的消息(这个步骤叫订阅,subscribe),也可以向外部发出自己的消息(这个步骤叫发布,publish);
节点之间通讯的管理需要一个管理员(ros中被称为roscore节点).当节点分布在不同的计算机上时,需要指明master.ROS底层的通信是通过HTTP完成的,因此ROS内核本质上是一个HTTP服务器,它的地址一般是http://localhost:11311/
,即本机的11311端口。当需要连接到另一台计算机上运行的ROS时,只要连上该机的11311端口即可。
Binary install 是指通过sudo apt-get install ros-kinetic-pkg
的方式安装的。这样的包会直接被安装进opt/ros/kinetic/share
文件夹里面
rosbash系列
rosbash
是ROS提供的一系列便利的命令,在source /opt/ros/kinetic/setup.bash
后可使用。一个setup.*sh
会尽可能撤销先前其他所有setup.*sh
的影响,然后它再自己施加影响。
source
可在最后加上选项--extend
,作用是 skips the undoing of changes from a previously sourced setup file,
devel/setup.bash
的作用是让我们能使用roscd
等ROS独有的shell命令,还有识别当前工作空间的package名称
roscd: 直接跳到某个package的地址,这个是用的最多的。不过它的本质是针对环境变量ROS_LOCATIONS
中规定的地址,它的格式是这样:1
export ROS_LOCATIONS="pkgs=~/ros/pkg:openmv=/home/user/qt-ros-ws/src/openmv_cam"
pkgs和openmv是其中规定的两个地址,二者用冒号隔开,现在就可以使用roscd openmv
了
rosls: 列出某个package中的所有文件
rospd: 这个命令特殊,可以记录和跳到所有package的地址,可以看做roscd的升级版。rospd package
会跳到某个package,rospd
会列出去过的所有package地址并且编号,以后可以直接rospd num
到指定地址
rosnode
查看当前运行的节点用
rosnode list
命令优雅关闭每个节点,使用
rosnode kill
命令。使用ctrl+c或者直接关闭终端也可以关闭节点,但这种方法不免过于简单粗暴,而且并未完全的关闭节点,因为节点管理器那里仍然有记录。rosnode kill -a # 关闭除
rosout
外的所有节点ping节点:
rosnode ping node
,检查一个节点的连通性显示ROS节点使用的IP:
rosnode machine
rospack系列命令
- 列出所有有效的package:
rospack list
- 输出指定package的路径:
rospack find turtlesim
,输出/opt/ros/kinetic/share/turtlesim
- 查看package的依赖项:
rospack depends turtlesim
catkin_make系列命令
使用catkin_make
系列命令时,会把工作空间所有的包的CMakeLists先检查一遍,有时会很麻烦。使用catkin_make_isolated
命令可以针对单独的包进行编译,但速度会慢很多。
rqt系列命令
rqt
命令会运行一个对话框:
rqt_graph
包用于显示各节点和主题之间的关系,命令:rosrun rqt_graph rqt_graph
rosdep
rosdep是一个安装系统依赖项的命令,用于package的依赖项安装,比如对PACKAGE:1
rosdep install PACKAGE
也可以安装工作空间中所有package的依赖项,先cd到工作空间的根目录,执行下面命令:1
rosdep install --from-paths src --ignore-src -r -y
其他命令
用曲线查看主题的各个消息情况rosrun rqt_plot rqt_plot
,这个工具是用Qt开发的