ros将参数文件上传到服务器,ROS参数传递

这里只介绍使用roslaunch指令运行launch文件时进行参数传递的情况

0. 常见launch文件写法

//launch文件写法

pkg:功能包名

type:可执行文件名称

name:节点名字

launch-prefix:rosrun命令的启动前缀,输出信息在另一个独立终端

output:输出到屏幕上

1. 使用参数服务器进行参数传递

//launch文件写法

//CPP文件中的调用方法

std::string camera_name; //如果该变量为全局变量,将该变量的声明放到全局范围内

ros::param::get("~camera_name", camera_name); //"~camera_name"表私有参数,在launch文件中,将写到里面,那么参数就是私有参数

ros::param::get("file_name", filename); //"filename"这里使用全局参数,即其他节点也可以使用

2. 使用mian参数进行参数传递

//launch文件写法

//CPP文件中的调用方法

ros::init(argc, argv, "robot_detector");

if (argc != 2)

{

ROS_ERROR("need turtle name as argument");

return -1;

};

camera_name = argv[1];

3. 具体案例解析之main参数传递

launch文件

// args文件之前有一个空格,一定不要忘记了

// pkg是包名,type是可执行文件名称,name是节点名

CPP文件

#include

#include

#include

#include

#include

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) //对输入参数数量进行判断

{

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. 具体案例解析之参数服务器参数传递

launch文件

CPP文件

#include

#include

#include

#include

#include

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); //私有参数解析,也可以通过ros::param::set("~camera_name", camera_name)进行参数设置

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);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值