0.前言
現在介紹ROS基本程式實現的教程有很多,步驟無非就是建工作空間,編譯,建立功能包,建立檔案和修改CMakeList,之後再編譯、執行程式這幾步。但是這些教程中很多在資料夾切換的很混亂,導致會出現一堆奇奇怪怪的錯誤,其實只要注意你操作的資料夾位置,很多問題都不是問題。這也是博主為什麼寫這篇文章的原因。
1.實現步驟
(1)建立工作空間並初始化
lxb@lxb-virtual-machine:~/study_ros$ mkdir -p my_workspace/src
lxb@lxb-virtual-machine:~/study_ros$ cd my_workspace/
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ catkin_make
注意:
我的工作空間資料夾位置為:~/study_ros/my_workspace/
(2)進入 src 建立功能包並新增依賴
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ cd src
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src$ catkin_create_pkg my_function_package roscpp rospy std_msgs
注意:
我的功能包資料夾位置為:~/study_ros/my_workspace/src/my_function_package
以後的操作大多數都是在功能包中進行的,除了catkin_make
編譯
(3)進入功能包的 src 目錄建立編輯核心程式碼hello_world.cpp
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src$ cd my_function_package/
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ touch hello_world.cpp
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ gedit hello_world.cpp
注意:
hello_world.cpp的內容為:
#include "ros/ros.h"
int main(int argc, char *argv[])
{
//執行 ros 節點初始化
ros::init(argc,argv,"hello");
//建立 ros 節點控制程式碼
ros::NodeHandle n;
//控制檯輸出 hello world
ROS_INFO("hello world!");
return 0;
}
(4)編輯功能包下的 Cmakelist.txt檔案
lxb@lxb-virtual-machine:~/study_ros/my_workspace/src/my_function_package$ gedit CMakeLists.txt
編輯方式:
找到Cmakelist.txt檔案下面對應的部分,去掉前面#
註釋,並將內容改為如下所示,其中hello_world_newname
為hello_world.cpp
的對映名,隨便寫,但是建議寫成和hello_world.cpp
同名,也就是hello_world
add_executable(hello_world_newname src/hello_world.cpp)
target_link_libraries(hello_world_newname
${catkin_LIBRARIES}
)
(5)進入工作空間目錄並編譯
編譯成功截圖
注意:
若編譯失敗,再重新走一遍流程,一般都是流程出錯
(6)重新整理環境並執行程式
1.先開啟一個新終端,執行roscore
lxb@lxb-virtual-machine:~$ roscore
2.在原來的終端下重新整理環境並執行程式
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ source ./devel/setup.bash
lxb@lxb-virtual-machine:~/study_ros/my_workspace$ rosrun my_function_package hello_world_newname
2.後言
這個在我稀稀拉拉學ros多年,終於把它給搞懂了,這裡對於新學習ROS的同學,可以看下這個教程http://www.autolabor.com.cn/book/ROSTutorials/ ,這個教程給了我很多的啟發。如果有什麼問題,也歡迎大家評論去交流,最後祝大家可以ROS順利!