我是ROS的新手,我正在寻找以编程方式启动'video_stream_opencv'节点。
以下链接: http://wiki.ros.org/video_stream_opencv
启动文件与命令roslaunch一起运行良好
<!-- images will be published at /camera_name/image with the image transports plugins (e.g.: compressed) installed -->
<group ns="$(arg camera_name)">
<node pkg="video_stream_opencv" type="video_stream" name="$(arg camera_name)_stream" output="screen">
<remap from="camera" to="image_raw" />
<param name="camera_name" type="string" value="$(arg camera_name)" />
<param name="video_stream_provider" type="string" value="$(arg video_stream_provider)" />
<param name="fps" type="int" value="$(arg fps)" />
<param name="frame_id" type="string" value="$(arg frame_id)" />
<param name="camera_info_url" type="string" value="$(arg camera_info_url)" />
<param name="flip_horizontal" type="bool" value="$(arg flip_horizontal)" />
<param name="flip_vertical" type="bool" value="$(arg flip_vertical)" />
<param name="width" type="int" value="$(arg width)" />
<param name="height" type="int" value="$(arg height)" />
</node>
<node if="$(arg visualize)" name="$(arg camera_name)_image_view" pkg="image_view" type="image_view">
<remap from="image" to="image_raw" />
</node>
</group>
但是现在我正在尝试用C ++代码做同样的事情但是我没有看到如何在我的节点中设置'type'属性......
printf("Started ROS thread\n");
//glutInit(&argc, argv);
ros::init(argc, argv, "camera_name);
ROS_INFO("camera_name started");
// MY params to set
std::string camera_name = "toto";
std::string video_stream_provider = "toto";
int fps = 30;
std::string frame_id= "toto";
std::string camera_info_url= "toto";
bool flip_horizontal= false;
bool flip_vertical= false;
int width = 30;
int height = 30;
ros::NodeHandle nh;
ros::M_string remappings;
remappings.insert(std::make_pair("camera", "image_raw"));
ros::NodeHandle node_handle(nh, "camera_name",remappings);
node_handle.setParam("type",video_stream);
node_handle.setParam("camera_name",camera_name);
node_handle.setParam("video_stream_provider",video_stream_provider );
node_handle.setParam("fps",fps);
node_handle.setParam("frame_id",frame_id);
node_handle.setParam("camera_info_url", camera_info_url);
node_handle.setParam("flip_horizontal", flip_horizontal);
node_handle.setParam("flip_vertical",flip_vertical);
node_handle.setParam("width", width);
node_handle.setParam("height", height);
答案 0 :(得分:0)
我知道启动rosnode的唯一两种方法是使用rosrun的终端或启动文件。
https://answers.ros.org/question/198279/how-to-start-a-ros-node/
答案 1 :(得分:0)
我假设您是在询问为rosnode设置参数类型的问题。
在roscpp中,包括/ros/node_handle.h, setParam()确实有多个变体,每个变体旨在处理特定类型的参数。
void setParam(const std::string& key, const std::string& s) const;
void setParam(const std::string& key, const char* s) const;
void setParam(const std::string& key, double d) const;
以此类推。
您已经在代码中完成了此操作。