建立一個ros功能包
一、建立並配置工作空間(workspace)
工作空間是存放工程開發相關檔案的資料夾,現在較新版本的ROS預設使用catkin編譯系統,該編譯系統的空間比較特殊,所以需要特殊的方式建立。
1、建立工作空間
mkdir -p ~/catkin_ws/src #在home目錄下建立兩級目錄,先建立catkin目錄,再建立src目錄,必須使用-p選項
cd ~/catkin_ws/src #切換到src目錄
catkin_init_workspace #初始化工作空間
2、編譯工作空間,此時工作空間為空,經過編譯會生成很多檔案,嚴格來說是遷移來很多檔案
cd ~/catkin_ws/
catkin_make #catkin自己的編譯命令
3、初始化環境變數,使環境變數生效
source devel/setup.bash #其實就是執行編譯生成的devel目錄下的setup.bash檔案
4、驗證環境變數是否有效
echo $ROS_PACKAGE_PATH #列印當前工作空間的路徑,結果如下:,包括剛剛建立的工作空間的目錄就對了,否則,要好好找找原因了。
municationk@developk:~/catkin_ws$ echo $ROS_PACKAGE_PATH
/home/municationk/catkin_ws/src:/opt/ros/melodic/share
二、在工作空間建立功能包,ROS系統的實現主要靠功能包實現各個功能
功能包中包含了許多檔案和配置資訊及編譯資訊等,現在較新版本的ROS預設使用catkin編譯系統,該編譯系統對功能包要求比較特殊,所以需要特殊的方式建立。
1、建立功能包,應用catkin_create_pkg命令
cd ~/catkin_ws/src #切換到程式碼空間,也就是工作空間的src目錄
catkin_create_pkg learning_com std_msgs rospy roscpp #建立功能包,並指定有三個功能包依賴
2、再次編譯工作空間,並設定環境變數
cd ~/catkin_ws/
catkin_make #編譯
source devel/setup.bash #設定環境變數
三、在工作空間建立功能包,實現一個簡單的釋出、訂閱程式:主要是新增兩個cpp原始碼talker.cpp和listener.cpp,修改一個編譯配置檔案CMakeList.txt,修改一個功能包配置檔案package.xml檔案
1、talker.cpp在工作空間的程式碼空間的功能包的程式碼空間中,本文中為:~/catkin_ws/src/learning_com/src/目錄
2、listener.cpp在工作空間的程式碼空間的功能包的程式碼空間中,本文中為:~/catkin_ws/src/learning_com/src/目錄中
3、CMakeList.txt在工作空間的程式碼空間的功能包的程式碼空間中,本文中為:~/catkin_ws/src/learning_com/目錄中
4、package.xml在工作空間的程式碼空間的功能包的程式碼空間中,本文中為:~/catkin_ws/src/learning_com/目錄中
5、編譯功能包,並設定環境變數
cd ~/catkin_ws/
catkin_make #編譯
source devel/setup.bash #設定環境變數
測試,開啟三個終端,在第一終端輸入:roscore,第二個終端輸入:rosrun learning_com talker 第三個終端輸入:rosrun learning_com listener
在第一終端輸入:roscore,第二個終端輸入:rosrun learning_com talker,第三個終端輸入:rosrun learning_com listener,當在第二個終端中使用ctrl+c將程式中talker的publisher退出,第三個終端中的lisenter的subscriber也無法接受資料
參考部落格:https://www.cnblogs.com/guochaoxxl/p/11303128.html