ROS(一):檔案系統介紹
阿新 • • 發佈:2018-12-21
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視窗的配置(顯示哪些控制元件、視角、 引數) |