ROS学习--第3篇:ROS基础---创建工作空间和软件包
1.創建工作空間 catkin_ws
創建src文件,放置功能包源碼:
mkdir -p ~/catkin_ws/src
進入src文件夾:
cd ~/catkin_ws/src
初始化文件夾:
catkin_init_workspace
這樣就在src文件中創建了一個 CMakeLists.txt 的文件,目的是告訴系統,這個是ROS的工作空間。
2.編譯工作空間 catkin_make
所有編譯工作都要在catkin_ws文件夾下編譯:
cd ~/catkin_ws/
編譯,編譯完成后,會發現catkin_ws中多了兩個文件 build 和 devel
catkin_make
3.設置環境變量
在第1篇中,我們介紹了設置環境變量,那個是將整個ros系統的環境變量設置到bash腳本中,現在我們需要把我們工作空間的環境變量設置到bash中。
echo “source ~/catkin_ws/devel/setup.bash” >> ~/.bashrc
讓上面的配置在當前的終端生效:
source ~/.bashrc
我們用 vi 編輯器打開 ~/.bashrc 文件,就可以看到最后兩行,第一行是我們第1篇添加的ros系統的環境變量,第2行是我們創建的catkin_ws工作空間的環境變量:
如果想要查看環境變量:
echo $ROS_PACKAGE_PATH
終端會輸出:
/home/wdd/catkin_ws/src : /opt/ros/kinetic/share 第一個是我們剛才創建的catkin_ws的,第二個是ros系統的。
4.創建功能包
在src中創建:
cd ~/catkin_ws/src/
功能包格式:
catkin_create_pkg package_name depend1 depend2 depend2
package_name:功能表名稱
depend1、2、3:依賴項
創建功能包:
catkin_create_pkg learning_communication std_msgs roscpp rospy
std_msgs:包含常見消息類型
roscpp:使用C++實現ROS各種功能
rospy:使用python實現ROS各種功能
5. catkin工作空間中的軟件包
開發catkin軟件包的推薦方法是使用catkin工作空間,但是你也可以單獨開發catkin軟件包。一個簡單的工作空間如下所示:
workspace_folder/ – WORKSPACE:工作空間
src/ – SOURCE SPACE:代碼空間
CMakeLists.txt – ‘Toplevel’ CMake file, provided by catkin:最頂層CMake文件,由catkin提供
package_1/
CMakeLists.txt – CMakeLists.txt file for package_1
package.xml – Package manifest for package_1
…
package_n/
CMakeLists.txt – CMakeLists.txt file for package_n
package.xml – Package manifest for package_n
6. 軟件包依賴關系
6.1 一級依賴
使用catkin_create_pkg命令時提供了幾個軟件包作為依賴關系,現在可以使用rospack命令工具查看這些一級依賴包。
rospack depends1 beginner_tutorials
返回的結果:
std_msgs
rospy
roscpp
rospack列出了在運行catkin_create_package命令時作為參數的依賴包,這些依賴包存儲在package.xml文件中。
6.2 間接依賴
在很多種情況下,一個依賴包還會有它自己的依賴關系,比如,rospy就有其他依賴包關系
kandi@ubuntu:~/catkin_ws/src/study$ rospack depends rospy
catkin
genmsg
genpy
cpp_common
rostime
roscpp_traits
roscpp_serialization
message_runtime
gencpp
geneus
gennodejs
genlisp
message_generation
rosbuild
rosconsole
std_msgs
rosgraph_msgs
xmlrpcpp
roscpp
rosgraph
ros_environment
rospack
roslib
kandi@u
7.編譯功能包
cd ~/catkin_ws
catkin_make
這行這邊后,工作空間構建完成,在devel子目錄下創建一個與你通常在/opt/ros/$ROSDISTRO_NAME下看到的目錄結構類似的結構,比如我們下載的是noetic版本,其目錄結構如下:
工作空間目錄說明如下:
要將這個工作空間添加到ROS環境中,你需要source 一下生成的配置文件:
$ . ~/catkin_ws/devel/setup.bash
顯示如下說明編譯成功:
…
[ 0%] Built target nav_msgs_generate_messages_eus
[ 0%] Built target nodelet_generate_messages_lisp
[ 33%] Built target slam_gmapping_nodelet
[ 44%] Linking CXX executable /home/kandi/catkin_ws/devel/lib/gmapping/slam_gmapping_replay
[ 55%] Linking CXX executable /home/kandi/catkin_ws/devel/lib/gmapping/slam_gmapping
[ 77%] Built target slam_gmapping
[100%] Built target slam_gmapping_replay
在工作空間根目錄下(比如/home/kandi/catkin_ws)編譯生成可執行文件slam_gmapping和slam_gmapping_replay位于/home/kandi/catkin_ws/devel/lib/gmapping/目錄下。
8.執行可執行文件
命令行終端先運行roscore啟動master階段,再在另一個終端執行可執行文件。
kandi@ubuntu:~/catkin_ws$ cd /home/kandi/catkin_ws/devel/lib/gmapping/
kandi@ubuntu:~/catkin_ws/devel/lib/gmapping$ ./slam_gmapping
標準的做法:
$ rosrun [package_name] [node_name]
這里的包名package_name通過軟件包文件catkin_ws\src\slam_gmapping\gmapping\package.xml
gmapping
中name知道package_name為gmapping.
節點名node_name通過
add_executable(slam_gmapping src/slam_gmapping.cpp src/main.cpp)
target_link_libraries(slam_gmapping ${Boost_LIBRARIES} ${catkin_LIBRARIES})
if(catkin_EXPORTED_TARGETS)
add_dependencies(slam_gmapping ${catkin_EXPORTED_TARGETS})
endif()
…
set(LOCAL_DEPENDENCIES gmapping-rtest ${PROJECT_NAME}_basic_localization_stage_indexed.bag
${PROJECT_NAME}_test_replay_crash.bag
${PROJECT_NAME}_test_turtlebot.bag
${PROJECT_NAME}_test_upside_down.bag
${PROJECT_NAME}_hallway_slow_2011-03-04-21-41-33.bag
${PROJECT_NAME}_basic_localization_stage_groundtruth.pgm
slam_gmapping
slam_gmapping_replay
)
通過
add_executable(slam_gmapping src/slam_gmapping.cpp src/main.cpp)
add_executable()使用指定的源文件來生成目標可執行文件slam_gmapping,slam_gmapping也就是上面的節點名node_name。
catkin_create_pkg命令生成的CMakeLists.txt文件也非常重要,詳見wiki的鏈接:
添加鏈接描述
總結
以上是生活随笔為你收集整理的ROS学习--第3篇:ROS基础---创建工作空间和软件包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 综合类资源汇聚
- 下一篇: 人工智能技术类资源汇聚