基础知识和常用命令

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文件夹里面

ROS的程序之所以能用`rosrun`启动,只取决于`CMakeLists`和`package.xml`,如果不打算使用ROS通信的东西,C++程序里可以不添加`ros::init`和`NodeHandle`

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开发的