我正在使用ROS Fuerte和qt_ros,因此可以在Qt GUI中集成ROS。我想用
我的Qt GUI中ROS启动文件中的一些参数。在GUI Im的main.cpp文件中 使用ROS启动文件启动这样的过程:
int main(int argc, char **argv) {
//Roslaunch
QProcess process;
process.start("roslaunch", QStringList() << "/home/launch/pow.launch");
//GUI
QApplication app(argc, argv);
pow_gui::MainWindow w(argc,argv);
w.show();
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
int result = app.exec();
std::cout << "q application finished" << std::endl;
return result;
}
所以在我的pow.launch中
<launch>
<param name="/use_sim_time" value="true"/>
<node name="hector_mapping" pkg="hector_mapping" type="hector_mapping" output="screen">
<param name="pub_map_odom_transform" value="false"/>
<remap from="scan" to="scan_2"/>
<param name="map_frame" value="map"/>
</node>
<node name="foo_throttler" type="throttle" pkg="topic_tools" args="messages /scan 10/scan_throttle" />
<node name="foo_throttler1" type="throttle" pkg="topic_tools" args="messages /raw_imu 10/raw_imu_throttle" />
<node name="rosplay" pkg="rosbag" type="play" args="/home/10m_forward5.bag --clock"/>
<node pkg="tf" type="static_transform_publisher" name="corner_duhhu" args="-0.17 -0.2 0 0 0 0 base_link laser 20"/>
<node pkg="tf" type="static_transform_publisher" name="raw_tf" args="0 0 0 0 0 0 /map /raw_frame 10"/>
<!--node pkg="analyzer" type="parking" name="parking" output="screen"/> -->
<node pkg="analyzer" type="wst_forward10m" name="wst_forward10m" output="screen"/>
<!--node pkg="analyzer" type="wst_turn" name="wst_turn" output="screen"/> -->
</launch>
当我使用节点pkg =“analyzer”type =“wst_forward10m”name =“wst_forward10m”时我想在QT中有一个标签,说我正在使用该节点并且在使用节点时pkg =“analyzer”type =“ wst_turn“name =”wst_turn“希望在QT中显示。
任何帮助?
答案 0 :(得分:1)
这样做的方法是向QT应用程序添加两个参数,例如argv[1]
指定节点类型,argv[2]
获取节点名称。
然后通过
std::string node_type("node_type:=");
std::string node_name("node_name:=");
node_type += argv[1];
node_name += argv[2];
process.start("roslaunch", QStringList() << "/home/launch/pow.launch"
<< node_type
<< node_name);
并且启动文件中的节点如下所示
...
<arg name="node_type" default="wst_forward10m" />
<arg name="node_name" default="wst_forward10m" />
<node pkg="analyzer" type="$(arg node_type)" name="$(arg node_type)" output="screen"/>
...
最后,您在QT应用程序中使用argv [1]和argv [2]的参数值来创建相应的标签。
答案 1 :(得分:1)
正如您在qt_ros中看到的那样,有一个在后台工作的线程ROS节点。因此,使用该节点在参数服务器中存储参数将更加清晰,如此ROS Parameter Server Overview中所做的那样,之后所有已启动的节点都需要来自此服务器的参数。 (我已经很长时间没有找到源代码了:\)