ROS+qt入门(一):发布器的编写
ROS+QT的使用
环境报错
/opt/ros/kinetic/share/catkin/cmake/catkinConfig.cmake:83: error: Could not find a package configuration file provided by “qt_build” with any of the following names: qt_buildConfig.cmake qt_build-config.cmake Add the installation prefix of “qt_build” to CMAKE_PREFIX_PATH or set “qt_build_DIR” to a directory containing one of the above files. If “qt_build” provides a separate development package or SDK, be sure it has been installed.
把这个参数的路径改成ros的路径就可以解决了;
用ros+qt写一个发布器
用qt官方创建的包里面,Qnode类就是专门用来写ros节点的,我们先把他
while(ros::ok())
里面的东西注释掉 发布器在官方历程里面已经写好了 ,叫
chatter_publish
我们暂时用这个就好
// Add your ros communications here. chatter_publisher = n.advertise<std_msgs::String>("chatter", 1000);
具体操作如下:
1. 首先我们唤醒ros_master
roscore
2. 用创造的模板包 把右面的connect上面两个对号点开即可 3. 在ui里面添加一个按钮,暂命名test_1; 4. 把按钮和槽连接起来 回到main_windows.cpp,写一个连接函数,把按钮和将要用于发布器的函数写出来:
void move_left(); bool ret =QObject::connect(ui.test_1,SIGNAL(clicked(bool)),this,SLOT(moveLeft())); if (ret) { qDebug()<< "ok"; } else { qDebug() <<"23333"; }
5. 在mian_window写槽函数 处理按按钮之后的信号,用于发布器的功能的实现,要现在main_window里面定义一个
public slot: ... void moveLeft();
然后在源码里写这个槽
void MainWindow::moveLeft(){ qDebug()<< "happy new year"; ui.test_1->setText("happy_new_year"); qnode.move_left(); }
注意:,mainwindow里面一定要包含QNode.hpp这个头文件 并且在这个在这个头文件里定义一个接口用的函数:
Public: ... void move_left();
因为ros::publish 那个都是private定义的,所以需要转到Qnode这个类里面去调用ros。
6. 在Qnode.cpp里面调用ros
void QNode::move_left() { std_msgs::String msg; std::stringstream ss; ss << "hello world ";//<< count; msg.data = ss.str(); chatter_publisher.publish(msg); }
然后你打开
rostopic echo chatter
就可以看见了