­

ROS基本程序實現

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

image
注意:
我的功能包文件夾位置為:~/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

image
注意:
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
image
編輯方式:
找到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)進入工作空間目錄並編譯

image
編譯成功截圖
image
注意:
若編譯失敗,再重新走一遍流程,一般都是流程出錯

(6)刷新環境並執行程序

1.先打開一個新終端,運行roscore

lxb@lxb-virtual-machine:~$ roscore
image

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

image

2.後言

這個在我稀稀拉拉學ros多年,終於把它給搞懂了,這裡對於新學習ROS的同學,可以看下這個教程//www.autolabor.com.cn/book/ROSTutorials/ ,這個教程給了我很多的啟發。如果有什麼問題,也歡迎大家評論去交流,最後祝大家可以ROS順利!