ROS基本程式實現

2022-06-06 15:07:24

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_newnamehello_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順利!