ROS Qt5 librviz人机交互界面开发二(实现机器人速度仪表盘)

本系列教程文章专栏:

ROS机器人GUI程序开发

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

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

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

文章目录

    • 一,实现效果:
    • 二,制作仪表盘控件
    • 三,向ui中添加仪表盘控件:
    • 四,关联仪表盘显示与机器人速度
    • 五,完整开源项目
    • (转载请注明作者和出处:https://blog.csdn.net/qq_38441692 未经允许请勿用于商业用途)

一,实现效果:

ROS Qt5 librviz人机交互界面开发二(实现机器人速度仪表盘)_第1张图片
原理主要就是订阅机器人的odom话题,然后利用信号与槽更新ui仪表盘控件的信息

二,制作仪表盘控件

由于qt标准控件没有仪表盘,因此我们需要自己手动绘制,可以直接使用这个绘制文件:
CCtrlDashBoard.h
CCtrlDashBoard.cpp

之后将.h文件放在/include/功能包名称/ 目录下
.cpp文件放在src目录下

三,向ui中添加仪表盘控件:

需要在ui中添加一个widget(需要固定size),我这里为widget_speed_x,widget_speed_y
添加代码:

	m_DashBoard_x =new CCtrlDashBoard(ui.widget_speed_x);
    m_DashBoard_x->setGeometry(ui.widget_speed_x->rect());
    m_DashBoard_x->setValue(0);
    m_DashBoard_y =new CCtrlDashBoard(ui.widget_speed_y);
    m_DashBoard_y->setGeometry(ui.widget_speed_y->rect());
    m_DashBoard_y->setValue(0);

添加效果:
ROS Qt5 librviz人机交互界面开发二(实现机器人速度仪表盘)_第2张图片

四,关联仪表盘显示与机器人速度

主要就是订阅odom话题:
在qnode.h文件中声明订阅者,回调函数,以及自定义信号:

private:
 ros::Subscriber cmdVel_sub;
 void speedCallback(const nav_msgs::Odometry::ConstPtr& msg);
 Q_SIGNALS:
    void speed_x(double x);
    void speed_y(double y);

qnode.cpp文件中实例化订阅者:

  cmdVel_sub =n.subscribe<nav_msgs::Odometry>("raw_odom",1000,&QNode::speedCallback,this);

在回调函数中处理里程计话题信息并发送自定义信号:

//速度回调函数
void QNode::speedCallback(const nav_msgs::Odometry::ConstPtr& msg)
{
     
    emit speed_x(msg->twist.twist.linear.x);
    emit speed_y(msg->twist.twist.linear.y);
}

之后在mainwindow链接信号:

    connect(&qnode,SIGNAL(speed_x(double)),this,SLOT(slot_speed_x(double)));
    connect(&qnode,SIGNAL(speed_y(double)),this,SLOT(slot_speed_y(double)));

槽函数进行设定value:

void MainWindow::slot_speed_x(double x)
{
     
    if(x>=0) ui.label_dir_x->setText("正向");
    else ui.label_dir_x->setText("反向");

    m_DashBoard_x->setValue(abs(x*100));
}
void MainWindow::slot_speed_y(double x)
{
     
    if(x>=0) ui.label_dir_y->setText("正向");
    else ui.label_dir_y->setText("反向");
    m_DashBoard_y->setValue(abs(x*100));
}

五,完整开源项目

在我自己学习的过程中目前发现没有相关类似完整开源项目,为了帮助其他人少走弯路,我决定将自己的完整项目开源:
github
创作不易,如果本教程对你有帮助,关注或点个赞吧,或者github标个星哦~~
您的支持就是我最大的动力~

(转载请注明作者和出处:https://blog.csdn.net/qq_38441692 未经允许请勿用于商业用途)

你可能感兴趣的:(ROS机器人GUI程序开发,ROS机器人)