1. ROS系統(tǒng)的基本結(jié)構(gòu)
ROS 系統(tǒng)簡單的說是一個多進程管理系統(tǒng)缘屹,其中結(jié)點Node是最小的功能執(zhí)行單元揍堕,它可以是一個main函數(shù)缠沈,當一個node被啟動時,其相應(yīng)的功能便被執(zhí)行桐经。Package是ROS里最小的編譯單元吃衅,其包含多個node以及相關(guān)結(jié)構(gòu)性文件佃迄。當需要執(zhí)行某個node時派桩,需要表明此node所在package。Workspace是ROS最小的環(huán)境配置單元蚌斩,package需要放置在workspace才能被編譯铆惑。
2. 構(gòu)建簡單ROS系統(tǒng)
了解ROS系統(tǒng)的基本結(jié)構(gòu)后,我們來自己構(gòu)建一個簡單的ROS系統(tǒng)送膳。
首先我們新建文件夾HalloRos作為我們的workspace员魏,在此文件夾下再新建次級文件夾src,在terminal中cd到src文件下執(zhí)行以下命令:
catkin_init_workspace
用來初始化workspace叠聋,可以看到在此src下自動生成一個CMakeLists.txt文件(不用編輯)用來生成此workspace的相關(guān)信息撕阎。然后cd回到HalloRos文件夾下,執(zhí)行:
catkin_make
用來真正生成此工作空間碌补,同時build和devel文件夾自動生成(不用編輯)虏束。此時我們需要執(zhí)行命令:
echo 'source ~/HalloRos/devel/setup.bash' >> ~/.bashrc
向Linux系統(tǒng)也就是我們的工作環(huán)境報備我們生成了一個ROS系統(tǒng),以便使系統(tǒng)知道此ROS系統(tǒng)及其命令的存在厦章。此刻workspace成功創(chuàng)建镇匀,接下來我們需要cd到src文件夾下,然后創(chuàng)建我們自己的包package袜啃,命令如下:
catkin_create_pkg printHelloRosPK std_msgs rospy roscpp
第一個參數(shù)printHelloRosPK是包名汗侵,后面的參數(shù)是依賴庫,例如如果需要使用c++群发,則需要依賴庫roscpp晰韵。至此,包printHelloRosPK建立成功熟妓,在此包下自動生成include雪猪、src文件夾以及CMakelists、package.xml文件滑蚯。在此workspace下可以用相同的命令建立多個包浪蹂。
3. 節(jié)點建立
在包printHelloRosPK下我們可以建立多個結(jié)點node抵栈。cd到printHelloRosPK下的src文件夾,新建一個printHelloRosPK.cpp文件作為我們的第一個節(jié)點node坤次。
#include <ros/ros.h>
int main(int argc, char **argv)
{
? ? ros::init(argc,argv,"printHelloRosPK");//初始化ros系統(tǒng),注意這里的printHelloRosPK是節(jié)點的名稱
? ? ros::NodeHandle n;//創(chuàng)建一個ros節(jié)點
? ? ROS_INFO("Hello ROS");//打印信息
? ? ros::spinOnce();//消息回調(diào)處理函數(shù)古劲,也就是系統(tǒng)等在這里,直到有回調(diào)消息進入
}
然后我們在包printHelloRosPK下的CMakeLists.txt文件里添加:
add_executable(printHelloRosPK src/printHelloRosPK.cpp)
target_link_libraries(printHelloRosPK ${catkin_LIBRARIES})
告訴系統(tǒng)此node的存在缰猴。然后回到工作空間HalloRos文件夾下产艾,再次編譯:
catkin_make
則擁有節(jié)點printHelloRosPK的ROS系統(tǒng)建立成功。
在一個新terminal中輸入:
roscore
再在另一個terminal中輸入:
rosrun printHelloRosPK printHelloRosPK
(其中第一個參數(shù)是包名滑绒,第二個參數(shù)是節(jié)點名)闷堡,節(jié)點功能便被執(zhí)行,輸出:
至此疑故,一個簡單的ROS系統(tǒng)建立成功杠览,下一篇將介紹ROS系統(tǒng)節(jié)點間通信機制。如有問題歡迎討論纵势。
參考文檔:ROS系統(tǒng)學習2---ROS最小系統(tǒng)的制作_python_weixinhum-CSDN博客