ROS 文件系统 & 命令行工具

ROS 文件系統

ROS文件系统级指的是在硬盘上ROS源代码的组织形式,其结构大致可以如下图所示:

img

launch文件

launch文件實質也是xml文件

需求

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?

官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。

實現

  1. 在功能包下創建launch文件夾,通過在命令行輸入:

  2. launch文件夾下,創建launch文件:

  3. 編輯launch文件内容

    node : 需要啓動的節點

    pkg : 功能包

    type : 被執行的節點文件

    name : 節點名稱

    特别的,使用launch文件会默认启动roscore,不需要额外启动。

  4. 運行launch文件

  5. 運行結果: 原來需要分別啓動的roscore、烏龜GUI和鍵盤控制節點,能夠一次性全部啓動。

package.xml

该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖性。请注意,该概念类似于旧版 rosbuild 构建系统中使用的_manifest.xml_文件。

CMakelists.txt

文件CMakeLists.txt是CMake构建系统的输入,用于构建软件包。任何兼容CMake的软件包都包含一个或多个CMakeLists.txt文件,这些文件描述了如何构建代码以及将代码安装到何处。

ROS Tools

查找、安裝和刪除相關ROS功能包

查找

Notes:<distro>為ROS版本號,<package>為ROS包名。此外,ROS所有包名的命名格式都是ros-<distro>-<package>,即ros-版本號-包名

列出所有可用的ROS package

從中查找我們需要的包,如導航模塊中的gmapping:

安裝

刪除

roscore

roscore是節點運行和通信的必要條件:

  • ros master;

  • ros 参数服务器;

  • rosout 日志节点;

用法:

或指定端口号(不常用)

image-20220703203034222

rosrun

用法:

示例:

roslaunch

catkin_create_pkg

rospack

作用:獲取packages相關信息;

rospack find可以獲取package的路徑信息。下面將簡單演示rospack find的使用。

用法:

示例:

將會返回以下信息:

如果是在Ubuntu下安裝的ROS Kinetic,將返回以下信息:

roscd

作用:直接切換到ROS package的路徑下;

ROS package 根目錄

用法:

切換到roscpp包下:

爲了驗證確實切換到了roscpp下,輸入pwd打印當前路徑:

可以發現,這一路徑與rospack find給出的路徑是一樣的:

Notes:與其他ROS Tools一樣,roscd只會查找ROS_PACKAGE_PATH中列出的目录中的 ROS package。輸入以下命令可查看當前ROS_PACKAGE_PATH内容:

Ubuntu下安裝的ROS Kinetic通常能夠收到以下信息:

與其他環境變量一樣的是,可以向ROS_PACKAGE_PATH添加其他目錄,不同路徑用 : 分割。

ROS package 子目錄

示例:

返回以下信息:

roscd log

roscd log將切換到ROS日志文件的存放路徑。

Notes:如果在此之前尚未運行過任何ROS節點,將返回錯誤信息并表示路徑不存在。

rosls

作用:通過ROS package名稱即可列出其子目錄,而不需要完整的路徑;

用法:

示例:

收到以下信息:

Tab 補全(Tab-completion)

輸入完整的package名稱是一件冗長乏味的事情。在前面的例子中,roscpp_tutorials無疑是一個相當長的名字了。所幸的是,一些ROS工具支持Tab補全。

可以輸入以下内容:

然後按下TAB鍵,命令行就會補全剩下的部分:

當然,這是因爲在在當前ROS package中,僅有roscpp_tutorialsroscpp_tut開頭。

現在我們嘗試輸入以下内容:

按下TAB鍵后,命令行内容可能將補充至以下内容:

然而,當前有多個packagesturtle開頭。再次按下TAB鍵,將會輸出所有以turtle開頭的ROS package

然后,命令行仍然顯示如下内容:

如果想要定位到turtlesim/ ,則需要至少再繼續在turtle後面輸入一個s,然後按下TAB

當僅有一個packageturtles開頭時, 將出現以下内容:

如果想看到當前所有的以安裝packages的列表,可以在rosls后,連續點擊兩次TAB

rosed

需要安裝vim,用法:

示例:

幫助

當不明確ROS Tools使用規則時,可以在命令後鍵入-h獲得使用説明,如下:

命令行將顯示如下内容:

image-20220703170334323

Reference

Last updated