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创建地图进行验证
参考资料
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号