1 創建文件,初始化工作空間
mkdir -p -/catkin_ws/src
cd -/catkin_ws/src
catkin_init_workspace # src下出現CMakeList
2 編譯
cd ...
caktin_make # catkin_ws下出現build和devel
3 創建功能包
cd src
#創建指令 #包名(文件夾名字) #依賴的功能包
catkin_create_pkg XXXXXX std_msgs rospy roscpp
此時,新創建的包文件夾下會有include、src、CMakeList.txt、package.xml
“CMake是一種跨平台編譯工具,CMake主要是編寫CMakeLists.txt文件,然后用cmake命令將MakeLists.txt文件轉化為make所需要的makefile文件,最后用make命令編譯源碼生成可執行程序或共享庫。”
“package.xml 也是一個catkin的package必備文件, 它是這個軟件包的描述文件, 用於描述pacakge的基本信息。rospack find 、 rosdep 等命令之所以能快速定位和分析出package的依賴項信息, 就是直接讀取了每一個pacakge中的 package.xml 文件。”
在src下編輯文件seg.cpp,添加到CMakeList:
# 可執行文件名 源文件名
add_executable(seg src/seg.cpp)
# 可執行文件名 添加可執行文件的依賴
target_link_libraries(seg ${catkin_LIBRARIES})
注意添加CMakeList時,順序不要亂了,遇到過生成的可執行文件出現在build而不是在devel中:
CMakeList中聲明順序有問題,要先聲明catkin_package(),再聲明add_executable()
4 創建新的話題
在當前功能包新建msg文件夾,存放msg文件(由於話題名自帶包名,所以yolo錄的話題都是darknet_ros_msgs/開頭的,用的時候新建的話題也得是darknet_ros_msgs/打頭,我這里干脆新創建同名包darknet_ros_msgs,專門存話題了)
package.xml下添加:
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend> # 或者<exec_depend>message_runtime</exec_depend>
CMakeList添加
find_package(message_generation) # 話題用到的依賴,比如pcl庫等
add_message_files(BoundingBox.msg BoundingBoxes.msg) # 話題文件
catkin_package(message_runtime)
catkin_make 后在catkin_ws/devel/include/darknet_ros_msgs``下生成話題.h文件; 在程序中#include <darknet_ros_msgs/BoundingBox.h>進來就好;
如果是在單獨的功能包中創建的的話題,還需要在CMakeList中find_package(darknet_ros_msgs)
launch文件
<launch>
<!-- 兩種參數讀入方式 -->
<!-- 1、從yaml文件中 -->
<rosparam file="$(find segmentation)/config/params.yaml" command="load" />
<!-- 2、直接從launch文件中 -->
<param name="center_x" value="381.91"/>
<!-- pkg:包名 type:可執行文件名 name:節點名 -->
<node pkg="segmentation" type="seg" name="seg" output="screen" respawn="true" />
<node name="rviz" pkg="rviz" type="rviz" output="log" args="-d $(find segmentation)/launch/rviz.rviz" />
</launch>
