ros編寫hello_ros及注意細節
下面是接觸ROS程式設計的第一個小實驗---編寫hello_ros
首先還是建立ros的工作空間,
- 開啟終端,輸入mkdir -p ~/catkin_op/src
- cd catkin_op/src
- 進入src,建立工作包pkg, catkin_create_pkg print_hello roscpp std_msgs (catkin_create_okg 包名 依賴)
- 在上面一步生成的src檔案下建立一個原始檔hello.cpp
下面就直接貼上這個hello_ros程式碼,
#include<ros/ros.h>
int main(int argc,char **argv)
{
ros::init(argc,argv,"hello_ros");
ros::NodeHandle nh;
ROS_INFO("Hello_Ros!");
ros::spinOnce();
}
下一步就是要注意的地方,修改CMakeLists.txt的內容,先把我這一次的內容貼出來,然後來說下自己的錯誤,(CSDN居然不能複製貼上,難受)
cmake_minimun_required(VERSION 2.8.3) --------------------------------------1
project(print_hello) --------------------------------------2
add_compile_options(-std=c++11) -------------------------------------3
find_package(catkin REQUIRED COMPONENTS
roscpp
std_msgs) -------------------------------------4
catkin_package(
INCLUDE_DIRS include
LIBRARIES print_hello
CATKIN_DEPENDS roscpp std_msgs) --------------------------------------5
include_directories(
#include ${catkin_INCLUDE_DIRS}
) --------------------------------------6
add_ececutable(hello ./src/hello.cpp) --------------------------------------7
target_link_libraries(hello ${catkin_LIBRARIES}) --------------------------------------8
在這上面的標記中,我的錯誤開始在第5處的catkin_packge()中的內容沒有注意,這個內容是編譯自己的程式和依賴,生成可行程式的連結,而且catkin_packge()是寫在find_packge()後面的,find_packge()是我們需要使用的依賴。
如果又錯誤,執行catkin_make編譯的時候,會爆出來的,根據紅色錯誤,可以一點點的找到問題。
關於這個CMakeLists.txt的內容每一項是什麼意思,可以在其他部落格中找到,不過自己也應該整理一份方便自己理解,時間不夠了,後面有空閒時間自己在整理下1.2.3.4.5.6.7.8.以及.xml檔案的每一項的意思。
然後就是在catkin_op這個工作空間下開啟終端,輸入:catkin_make,編譯整個程式
注意到,最後兩行的兩個100%後面的內容,一個連結到/devel/lib下的可執行程式,一個是hello.cpp構建成功,說明該ros程式的編譯完成。(出現這個結果很重要)
最後,在ros下執行該程式的輸出,
開啟一個終端,輸入:roscore,啟動ros環境
再開啟一個終端,輸入:cd catkin_op
再輸入:source devel/setup.bash ,重新整理環境
最後輸入:rosrun print_hello hello ,執行該節點