1. 程式人生 > >ROS(一):檔案系統介紹

ROS(一):檔案系統介紹

ROS的檔案系統

一個catkin軟體包稱為一個程式包package,package主要包含兩個主要檔案:

(1)package.xml:package的描述資訊

(2)CMakeList.txt:構建package的主要CMake檔案,用於呼叫Catkin的函式與巨集,解析pakage.xml檔案,新增所需要依賴catkin軟體包,新增環境變數

$ cd ~/catkin_ws #回到工作空間,catkin_make必須在工作空間下執行
$ catkin_make #開始編譯
$ source ~/catkin_ws/devel/setup.bash #重新整理壞境

構造工作空間

$ mkdir -p ~/catkin_ws/src  
$ cd ~/catkin_ws/
$ catkin_make #初始化工作空間

檢視結構

$ cd ~/catkin_ws
$ sudo apt install tree
$ tree

 

package的常見檔案和路徑:

建立package

catkin_create_pkg test_pkg roscpp rospy std_msgs

pakage常用相關命令:


安裝所有依賴

rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y

CMakeList.txt寫法如下:

小海龜CMake檔案:

cmake_minimum_required(VERSION 2.8.3)
#CMake至少為2.8.3版
project(turtlesim)
#專案(package)名稱為turtlesim,在後續檔案中可使用變數${PROJECT_NAME}來引用專案名稱turltesim
find_package(catkin REQUIRED COMPONENTS geometry_msgs message_generation rosconsole ro
scpp roscpp_serialization roslib rostime std_msgs std_srvs)
#cmake巨集,指定依賴的其他pacakge,實際是生成了一些環境變數,如<NAME>_FOUND, <NAME>_INCLUDE_DIRS
, <NAME>_LIBRARYIS
#此處catkin是必備依賴 其餘的geometry_msgs...為元件
find_package(Qt5Widgets REQUIRED)
find_package(Boost REQUIRED COMPONENTS thread)
include_directories(include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
#指定C++的標頭檔案路徑
link_directories(${catkin_LIBRARY_DIRS})
#指定連結庫的路徑
add_message_files(DIRECTORY msg FILES
Color.msg Pose.msg)
#自定義msg檔案
add_service_files(DIRECTORY srv FILES
Kill.srv
SetPen.srv
Spawn.srv
TeleportAbsolute.srv
TeleportRelative.srv)
#自定義srv檔案
generate_messages(DEPENDENCIES geometry_msgs std_msgs std_srvs)
#在add_message_files、add_service_files巨集之後必須加上這句話,用於生成srv msg標頭檔案/module,生
成的檔案位於devel/include中
catkin_package(CATKIN_DEPENDS geometry_msgs message_runtime std_msgs std_srvs)
# catkin巨集命令,用於配置ROS的package配置檔案和CMake檔案
# 這個命令必須在add_library()或者add_executable()之前呼叫,該函式有5個可選引數:
# (1) INCLUDE_DIRS - 匯出包的include路徑
# (2) LIBRARIES - 匯出專案中的庫
# (3) CATKIN_DEPENDS - 該專案依賴的其他catkin專案
# (4) DEPENDS - 該專案所依賴的非catkin CMake專案。
# (5) CFG_EXTRAS - 其他配置選項
set(turtlesim_node_SRCS
src/turtlesim.cpp
src/turtle.cpp
src/turtle_frame.cpp
CMakeLists.txt
)
set(turtlesim_node_HDRS
include/turtlesim/turtle_frame.h
)
#指定turtlesim_node_SRCS、turtlesim_node_HDRS變數
qt5_wrap_cpp(turtlesim_node_MOCS ${turtlesim_node_HDRS})
add_executable(turtlesim_node ${turtlesim_node_SRCS} ${turtlesim_node_MOCS})
# 指定可執行檔案目標turtlesim_node
target_link_libraries(turtlesim_node Qt5::Widgets ${catkin_LIBRARIES} ${Boost_LIBRARIE
S})
# 指定連結可執行檔案
add_dependencies(turtlesim_node turtlesim_gencpp)
add_executable(turtle_teleop_key tutorials/teleop_turtle_key.cpp)
target_link_libraries(turtle_teleop_key ${catkin_LIBRARIES})
add_dependencies(turtle_teleop_key turtlesim_gencpp)
add_executable(draw_square tutorials/draw_square.cpp)
target_link_libraries(draw_square ${catkin_LIBRARIES} ${Boost_LIBRARIES})
add_dependencies(draw_square turtlesim_gencpp)
add_executable(mimic tutorials/mimic.cpp)
target_link_libraries(mimic ${catkin_LIBRARIES})
add_dependencies(mimic turtlesim_gencpp)
# 同樣指定可執行目標、連結、依賴
install(TARGETS turtlesim_node turtle_teleop_key draw_square mimic
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
# 安裝目標檔案到本地系統
install(DIRECTORY images
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}
FILES_MATCHING PATTERN "*.png" PATTERN "*.svg")

package.xml寫法:

package.xml示例:

其他檔案:

launch檔案 以.launch或.xml結尾,它對ROS需要執行程式進行了打包,通過一句命令來
啟動
msg/srv/action檔案 ROS程式中有可能有一些自定義的訊息/服務/動作檔案,為程式的發者所設計的資料結構,這類的檔案以 .msg , .srv , .action 結尾,通常放在package的 msg/ , srv/ , action/ 路徑下。
urdf/xacro檔案 定義了機器人的連桿和關節的資訊,以及它們之間的位置、角度等資訊,通過urdf檔案可以將機器人的物理連線資訊表
示出來。
yaml檔案 yaml檔案一般儲存了ROS需要載入的引數資訊,一些屬性的配置。通常在launch檔案或程式中讀取.yaml檔案,把引數載入到引數伺服器上
dae/stl檔案 dae或stl檔案是3D模型檔案,機器人的urdf或模擬環境通常會引用這類檔案,它們描述了機器人的三維模型。相比urdf檔案簡單定義的性狀,dae/stl檔案可以定義複雜的模型,可以直接從solidworks或其他建模軟體匯出機器人裝配模型,從而顯示出更加精確的外形。
rviz檔案 rviz檔案本質上是固定格式的文字檔案,其中儲存了RViz視窗的配置(顯示哪些控制元件、視角、
引數)