ROS參數(shù)傳遞

這里只介紹使用roslaunch指令運行l(wèi)aunch文件時進行參數(shù)傳遞的情況

0. 常見launch文件寫法

//launch文件寫法
<launch>
    <node pkg="camera_driver" type="robot_detector" name="cama_detector"  launch-prefix="xterm-e" output="screen"/>
</launch>
  • pkg:功能包名
  • type:可執(zhí)行文件名稱
  • name:節(jié)點名字
  • launch-prefix:rosrun命令的啟動前綴头镊,輸出信息在另一個獨立終端
  • output:輸出到屏幕上

1. 使用參數(shù)服務(wù)器進行參數(shù)傳遞

//launch文件寫法
<launch>
    <param name="file_name" type="string" value="/home/nvidia/camera_parameters.yml" />
    <node pkg="camera_driver" type="robot_detector" name="camera_detector"  launch-prefix="xterm-e" output="screen">
        <param name="camera_name" type="string" value="/camera" />
    </node>
    <node pkg="camera_driver" type="robot_detector" name="camerab_detector"  launch-prefix="xterm-e" output="screen" />
</launch>

//CPP文件中的調(diào)用方法
std::string camera_name;        //如果該變量為全局變量灌曙,將該變量的聲明放到全局范圍內(nèi)
ros::param::get("~camera_name", camera_name);           //"~camera_name"表私有參數(shù),在launch文件中,將<param.../>寫到<node.../>里面,那么參數(shù)就是私有參數(shù)
ros::param::get("file_name", filename);                 //"filename"這里使用全局參數(shù),即其他節(jié)點也可以使用                            

2. 使用mian參數(shù)進行參數(shù)傳遞

//launch文件寫法
<launch>
    <param name="file_name" type="string" value="/home/nvidia/camera_parameters.yml" />
    <node pkg="camera_driver" type="robot_detector" name="camera_detector" args="filename" launch-prefix="xterm-e" output="screen" />
</launch>

//CPP文件中的調(diào)用方法
ros::init(argc, argv, "robot_detector");
if (argc != 2)
{
    ROS_ERROR("need turtle name as argument");
    return -1;
};
camera_name = argv[1];                          

3. 具體案例解析之main參數(shù)傳遞

  • launch文件
 <launch>
    <node pkg="camera_driver" type="camera_sub" name="cameraa_shower" args=" /cameraa" launch-prefix="xterm -e" output="screen" />
    <node pkg="camera_driver" type="camera_sub" name="camerab_shower" args=" /camerab" launch-prefix="xterm -e" output="screen" />
    <node pkg="camera_driver" type="camera_sub" name="camerac_shower" args=" /camerac" launch-prefix="xterm -e" output="screen" />
    <node pkg="camera_driver" type="camera_sub" name="camerad_shower" args=" /camerad" launch-prefix="xterm -e" output="screen" />
 </launch>
 // args文件之前有一個空格,一定不要忘記了
 // pkg是包名,type是可執(zhí)行文件名稱次屠,name是節(jié)點名
  • CPP文件
#include <ros/ros.h>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>


using namespace cv;
using namespace std;

std::string camera_name;            //全局變量

void imageCallback(const sensor_msgs::ImageConstPtr &msg)
{
    try
    {
        cout << camera_name << " : all is ok!!!" << endl;
            imshow(camera_name, cv_bridge::toCvShare(msg, "bgr8")->image);
            waitKey(5);
            cout << "================================================================" << endl;
    }
    catch (cv_bridge::Exception &e)
    {
        ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());
    }
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "image_shower");
    if (argc != 2)      //對輸入?yún)?shù)數(shù)量進行判斷
    {
        ROS_ERROR("need turtle name as argument");
        return -1;
    };
    camera_name = argv[1];
    ros::NodeHandle nh;
    namedWindow(camera_name, CV_WINDOW_NORMAL);
    image_transport::ImageTransport it(nh);
    image_transport::Subscriber sub = it.subscribe(camera_name + "/image", 1, imageCallback);
    ros::spin();
    cv::destroyWindow(camera_name);
}

4. 具體案例解析之參數(shù)服務(wù)器參數(shù)傳遞

  • launch文件
 <launch>
    <node pkg="video_driver" type="camera_sub" name="camera_shower" launch-prefix="xterm -e" output="screen">
        <param name="camera_name" type="string" value="/camera" />
    </node>
 </launch>
  • CPP文件
#include <ros/ros.h>
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
#include <image_transport/image_transport.h>
#include <cv_bridge/cv_bridge.h>


using namespace cv;
using namespace std;

std::string camera_name;

void imageCallback(const sensor_msgs::ImageConstPtr &msg)
{
    try
    {
        cout << camera_name << " : all is ok!!!" << endl;
            imshow(camera_name, cv_bridge::toCvShare(msg, "bgr8")->image);
            waitKey(5);
            cout << "================================================================" << endl;
    }
    catch (cv_bridge::Exception &e)
    {
        ROS_ERROR("Could not convert from '%s' to 'bgr8'.", msg->encoding.c_str());
    }
}

int main(int argc, char **argv)
{
    ros::init(argc, argv, "image_shower");
    ros::param::get("~camera_name", camera_name);               //私有參數(shù)解析,也可以通過ros::param::set("~camera_name", camera_name)進行參數(shù)設(shè)置
    ros::NodeHandle nh;
    namedWindow(camera_name, CV_WINDOW_NORMAL);
    image_transport::ImageTransport it(nh);
    image_transport::Subscriber sub = it.subscribe(camera_name + "/image", 1, imageCallback);
    ros::spin();
    cv::destroyWindow(camera_name);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末雳刺,一起剝皮案震驚了整個濱河市劫灶,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掖桦,老刑警劉巖本昏,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異滞详,居然都是意外死亡凛俱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進店門料饥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蒲犬,“玉大人,你說我怎么就攤上這事岸啡≡#” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵巡蘸,是天一觀的道長奋隶。 經(jīng)常有香客問我,道長悦荒,這世上最難降的妖魔是什么唯欣? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮搬味,結(jié)果婚禮上境氢,老公的妹妹穿的比我還像新娘。我一直安慰自己碰纬,他們只是感情好萍聊,可當我...
    茶點故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悦析,像睡著了一般寿桨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上强戴,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天亭螟,我揣著相機與錄音挡鞍,去河邊找鬼。 笑死媒佣,一個胖子當著我的面吹牛匕累,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播默伍,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼衰琐!你這毒婦竟也來了也糊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤羡宙,失蹤者是張志新(化名)和其女友劉穎狸剃,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狗热,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡钞馁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了匿刮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片僧凰。...
    茶點故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熟丸,靈堂內(nèi)的尸體忽然破棺而出训措,到底是詐尸還是另有隱情,我是刑警寧澤光羞,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布绩鸣,位于F島的核電站,受9級特大地震影響纱兑,放射性物質(zhì)發(fā)生泄漏呀闻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一潜慎、第九天 我趴在偏房一處隱蔽的房頂上張望捡多。 院中可真熱鬧,春花似錦勘纯、人聲如沸局服。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽淫奔。三九已至,卻和暖如春堤结,著一層夾襖步出監(jiān)牢的瞬間唆迁,已是汗流浹背鸭丛。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留唐责,地道東北人鳞溉。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像鼠哥,于是被迫代替她去往敵國和親熟菲。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,060評論 2 355

推薦閱讀更多精彩內(nèi)容