< >
Home » ROS与QT语言入门教程 » ROS与QT语言入门教程-显示ROS发布的地图消息

ROS与QT语言入门教程-显示ROS发布的地图消息

ROS与QT语言入门教程-显示ROS发布的地图消息

说明:

  • 在ROS QT GUI模板,实现显示ROS发布的地图消息

点击查看完整代码

编辑ui文件:
main_window.ui文件:
拖入两个按钮控件,分别命名为romap和mapping
请输入图片描述

mapp.ui文件:
拖入五个按钮分别对应前后左右停止,并拖入按钮mapping用来显示地图,按钮quit退出
请输入图片描述

romap.ui文件:
拖入按钮display用来显示地图,按钮quit退出
请输入图片描述

编辑主窗口:

main_window.hpp头文件:

private slots:
    void on_pushButton_clicked();
    void on_btn_mapping_clicked();

main_window.cpp源码:

void robomap::MainWindow::on_pushButton_clicked()
{
    RoMap *map = new RoMap;
    map->show();
}

void robomap::MainWindow::on_btn_mapping_clicked()
{
    MAPP *mapp=new MAPP;
    mapp->show();
}

代码解释:

  • 定义并实现了两个槽函数

编辑地图:

mapp.h头文件:

private slots:
    void on_btn_map_clicked();
    void on_btn_quit_clicked();
    void on_btn_back_pressed();
    void on_btn_back_released();
    void on_btn_left_pressed();
    void on_btn_right_pressed();
    void on_btn_forward_pressed();
    void on_btn_stop_clicked();
private:
    Ui::MAPP *ui;
    rviz::VisualizationManager *manager_;
    rviz::RenderPanel *render_panel_;
    rviz::Display *map_;
    QTimer *m_timer;

代码解释:

  • 声明了对应的槽函数

  • 声明可视化管理类VisualizationManager,并初始化,就可以不断更新

  • 声明rviz的RenderPanel,这个面板类最终继承QWidget

mapp.cpp源文件:

void MAPP::on_btn_map_clicked()
{
    manager_->removeAllDisplays();

    rviz::Display *map_=manager_->createDisplay("rviz/Map","adjustable map",true);
    ROS_ASSERT(map_!=NULL);
    map_->subProp("Topic")->setValue("/map");
    rviz::Display *robot_=manager_->createDisplay("rviz/RobotModel","adjustable robot",true);
    ROS_ASSERT(robot_!=NULL);
    robot_->subProp("Robot Description")->setValue("robot_description");
    rviz::Display *laser_=manager_->createDisplay("rviz/LaserScan","adjustable scan",true);
    ROS_ASSERT(laser_!=NULL);
    laser_->subProp("Topic")->setValue("/scan");
    laser_->subProp("Size (m)")->setValue("0.1");
}

代码解释:

  • 创建了显示createDisplay(),然后添加topic值,加载地图
void MAPP::on_btn_left_pressed()
{
    ros::NodeHandle node;
    cmdVelPub = node.advertise<geometry_msgs::Twist>("/cmd_vel", 1);
    ROS_INFO("move_turtle_goforward cpp start...");
    geometry_msgs::Twist speed;
    speed.linear.x = 0;
    speed.angular.z = 0.05;
    cmdVelPub.publish(speed);
}

代码解释:

  • 向前、向后、向左、向右、停止的函数大同小异,主要修改speed.linear.x和speed.angular.z
  • 为这个进程的节点创建一个句柄node
  • 在/cmd_vel 话题发布一个geometry_msgs/Twist的消息
  • 控制信号载体Twist message
  • 设置线速度为0m/s,正为前进,负为后退 (0)
  • 设置角速度为0.05rad/s,正为左转,负为右转 (0.5)
  • 将刚才设置的指令发送给机器人cmdVelPub.publish()

运行效果:
请输入图片描述

使用Turtlebot3-burger键盘控制进行验证
使用turtlebot-burger创建地图进行验证

参考资料

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros与qt语言入门教程, ros qt