構(gòu)建catkin工作空間
?mkdir -p ~/catkin_ws/src ?
?cd ~/catkin_ws/src
?catkin_init_workspace
?cd ~/catkin_ws/
?catkin_make
配置環(huán)境變量
?echo "source ~/catkin_ws/devel/setup.bash" >> ?~/.bashrc
?source ~/.bashrc
檢查環(huán)境變量
?echo $ROS_PACKAGE_PATH
遇到錯(cuò)誤:上面操作不需要用sudo 進(jìn)行操作,但是由于初學(xué)者可能存在操作不當(dāng)導(dǎo)致錯(cuò)誤
ros catkin_maked的時(shí)候報(bào)錯(cuò)誤代碼:? The specified base path “/home/ubuntu/catkin_ws” contains a CMakeLists.txt but “catkin_make” must be invoked in the root of workspace…..
出現(xiàn)這種情況的原因是catkin_init_workspacce的時(shí)候,出現(xiàn)下面這句:?
Creating symlink “/home/ubuntu/catkin_ws/CMakeLists.txt” pointing to “/opt/ros/indigo/share/catkin/cmake/toplevel.cmake”
將當(dāng)前工作空間下的CMakeLists.txt與/ros/下的cmake做了鏈接
解決方法:?
unlink /home/youpath/catkin_ws/CMakeLists.txt?
發(fā)布一個(gè)話題案例:
創(chuàng)建功能包
cd ~/catkin_ws/src
catkin_create_pkg package1 roscpp rospy std_msgs
使用命令cd ~/catkin_ws/src 進(jìn)入代碼空間,并在代碼空間中創(chuàng)建功能包
使用catkin_create_pkg創(chuàng)建名為package1的功能包,功能包的支撐庫(kù)為roscpp rospy和std_msgs,創(chuàng)建功能包的命令格式為catkin_create_pkg <package_name> [depends1] [depends2] [depends3]。此時(shí)~/catkin_ws/src路徑下會(huì)出現(xiàn)兩個(gè)文件,一個(gè)是CMakeLists.txt另外一個(gè)則是我們的功能包package,在package路徑下會(huì)出現(xiàn)4個(gè)文件,分別是include文件夾(用于存放類似于.h的頭文件),src文件夾(用于存放cpp文件),CMakeLists.txt(指定編譯的規(guī)則),package.xml(支持包的相關(guān)信息,如果后續(xù)文件需要擴(kuò)展就在此文件中增加相關(guān)的庫(kù)),到此功能包已經(jīng)創(chuàng)建完畢,后續(xù)還需要修改CMakeLists.txt更新我們的編譯規(guī)則,但在此之前我們需要新建一個(gè)cpp源碼。
cd ~/catkin_ws/src/package1/src
touch pub_node_test.cpp
進(jìn)入~/catkin_ws/src/package1/src文件夾,使用touch命令創(chuàng)建一個(gè)cpp文件,在cpp文件中輸入以下內(nèi)容。
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
int main(int argc,char **argv)
{
ros::init(argc,argv,"talker"); //初始化
ros::NodeHandle n; //創(chuàng)建句柄
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter",1000); //設(shè)定話題名稱為chatter,并且緩存隊(duì)列長(zhǎng)度為1000,用于平衡硬件發(fā)送速度
ros::Rate loop_rate(10); //設(shè)置發(fā)送波特率為10HZ,與后面的loop_rate.sleep();相互呼應(yīng),如果下一幀信息不滿足頻率要求系統(tǒng)則會(huì)延時(shí)
int count = 0;
while(ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss<<"first example!"<<count;
msg.data = ss.str();
ROS_INFO("%s",msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
以上代碼創(chuàng)建了一個(gè)名為talker的節(jié)點(diǎn),該節(jié)點(diǎn)通過"chatter"話題發(fā)布消息
然后修改package1功能包中的CMakeList.txt文件.打開CMakeLists.txt文件并在里面輸入以下內(nèi)容。
add_executable(pub_node src/pub_node_test.cpp)
target_link_libraries(pub_node ${catkin_LIBRARIES})
這樣就可以在devel/lib文件夾下生成名為pub_node的可執(zhí)行文件了,這兩條編譯碼的一般格式如下:add_executable([可執(zhí)行文件名] src/[cpp文件名]) target_link_libraries([可執(zhí)行文件名] ${catkin_LIBRARIES})
回到工作空間下并使用catkin_make編譯整個(gè)工作空間
cd ~/catkin_ws
catkin_make
打開一個(gè)新終端,使用如下命令即可運(yùn)行剛編譯生成的可執(zhí)行文件
rosrun package1 pub_node
顯示界面如下:文章來源:http://www.zghlxwxcb.cn/news/detail-688304.html
工作空間及消息創(chuàng)建成功!使用rostopic list可以看到會(huì)出現(xiàn)一個(gè)新的名為chatter的話題。文章來源地址http://www.zghlxwxcb.cn/news/detail-688304.html
到了這里,關(guān)于[ros][ubuntu]ros在ubuntu18.04上工作空間創(chuàng)建和發(fā)布一個(gè)話題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!