ROS Qt5 librviz人机交互界面开发十三(显示话题列表)

本系列教程文章专栏:

ROS机器人GUI程序开发

本系列课程已上线古月学院,欢迎感兴趣的小伙伴订阅:

  1. ROS Qt开发环境搭建以及基础知识介绍
  2. ROS人机交互软件的界面开发
  3. ROS Rviz组件开发方法

在这里插入图片描述
开发交流QQ群: 797497206
完整项目代码:
github

一,实现效果

可以显示多机/单机话题列表,就是在终端使用rostopic list查看话题列表的功能实现,主要参考文献:ROS WIKI
在这里插入图片描述

二,核心API

主要就是这么两句:

ros::master::V_TopicInfo topic_list;
ros::master::getTopics(topic_list);

首先创建一个 ros::master::V_TopicInfo去存放topic信息列表,之后通过getTopics方法获取topic并存入V_TopicInfo中。
处理topic:
topicInfo中存放了话题名以及对应的话题类型,可以通过循环遍历去处理(我这里处理后放入QMap中):

 QMap<QString,QString> res;
    for(auto topic:topic_list)
    {

    res.insert(QString::fromStdString(topic.name),QString::fromStdString(topic.datatype));

    }

三,程序中调用

这里在qnode类中创建一个函数gettopic,函数返回值类型为QMap:

QMap<QString,QString> QNode::get_topic_list()
{
    ros::master::V_TopicInfo topic_list;
    ros::master::getTopics(topic_list);
    QMap<QString,QString> res;
    for(auto topic:topic_list)
    {

        res.insert(QString::fromStdString(topic.name),QString::fromStdString(topic.datatype));

    }
    return res;
}

在mainwindow中去调用这个函数(注意函数的调用需要放在master连接成功之后),并遍历map中的每个结果,显示在listWidget上:

void MainWindow::initTopicList()
{
    ui.topic_listWidget->clear();
    ui.topic_listWidget->addItem(QString("%1   (%2)").arg("Name","Type"));
    QMap<QString,QString> topic_list= qnode.get_topic_list();
    for(QMap<QString,QString>::iterator iter=topic_list.begin();iter!=topic_list.end();iter++)
    {
       ui.topic_listWidget->addItem(QString("%1   (%2)").arg(iter.key(),iter.value()));
    }
}
  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值