ROS传参
目的是通过从ROS参数服务器获取传输图像的信息,而不是在代码中手动输入
<?xml version="1.0"?>
<launch>
<node pkg="push_video" type="push_ros" name="push_zedm" output="screen" args="zedm">
<param name="width" type="int" value="1280"/>
<param name="height" type="int" value="720"/>
<param name="fps" type="int" value="15"/>
</node>
</launch>
int main(int argc, char *argv[])
{
node_arg = argv[1];
string node_name;
string subscribe_topic;
string rtmp_addr;
if (node_arg == "zedm")
{
node_name = "/push_zedm";
subscribe_topic = "/zedm/zed_node/rgb/image_rect_color";
rtmp_addr = "rtmp://1.116.137.21:7788/videotest";
}
ros::init(argc, argv, node_name);
ros::NodeHandle nh;
ros::param::get(node_name + "/width", width);
ros::param::get(node_name + "/height", height);
ros::param::get(node_name + "/fps", fps);
// cout << width << " " << height << " " << fps << endl;
rtmp = make_shared<PushRTMP>(width, height, fps);
if (!rtmp->initRTMP(rtmp_addr))
{
cout << "Failed to initialize RTMP!" << endl;
return -1;
}
image_transport::ImageTransport it(nh);
image_transport::Subscriber sub = it.subscribe("/zedm/zed_node/rgb/image_rect_color", 1, imageCallback);
ros::spin();
return 0;
}
- 注意
param
标签在node
标签内和node
标签外的区别 - 在代码中获取参数信息时要先
ros::init()
ros::param::get()
函数返回值为bool
型,可辅助判断是否获取成功- 也可用
nh.getParam()
函数来获取参数,详见博客