【QT】QT的学习:在QT中如何调用ROS库

6 篇文章 0 订阅

背景:

目前正在使用QT creator 开发界面等,因为需要用到ROS的订阅发布机制,订阅别的ROS模块的topic,但是本人的工程是qt的工程(.pro),使用的是qmake编译,是一个单独的应用程序,只能通过调用ros的库的形式调用ros函数。自己没有找到其他的方法把已经写好的大量代码直接加入到别的模块的ros工程中。

步骤:

(1)安装配置好QT: https://blog.csdn.net/ipfpm/article/details/80698659

(2)安装配置好ROS:https://blog.csdn.net/ipfpm/article/details/83504391

(3)特别重要,否则编译不过:

配置qt的启动文件。需要在qt启动时加载ros的环境变量

sudo gedit ~/.local/share/applications/DigiaQt-qtcreator-community.desktop 

[Desktop Entry]
Type=Application
Exec=bash -i -c /home/ubuntu/Qt5.10.1/Tools/QtCreator/bin/qtcreator
Name=Qt Creator (Community)
GenericName=The IDE of choice for Qt development.
Icon=QtProject-qtcreator
StartupWMClass=qtcreator
Terminal=false
Categories=Development;IDE;Qt;
MimeType=text/x-c++src;text/x-c++hdr;text/x-xsrc;application/x-designer;application/vnd.qt.qmakeprofile;application/vnd.qt.xml.resource;text/x-qml;text/x-qt.qml;text/x-qt.qbs;

中加上:

bash -i -c

(4)在写的QT工程中加入:即在.pro文件中添加ros头文件路径和动态链接库。

INCLUDEPATH += /opt/ros/kinetic/include
DEPENDPATH += /opt/ros/kinetic/include
LIBS += -L/opt/ros/kinetic/lib -lroscpp -lroslib -lrosconsole -lroscpp_serialization -lrostime

(5)尝试例子:

(5.1)可以现在本地建立一个简单的订阅\发布的ros例子,网上很多.

见:

https://www.cnblogs.com/xuanxiaochen/p/6013886.html

这样就可以实现ros的订阅或者发布.

(4.2)在QT的程序上加上ROS函数:这是一个订阅的程序,但是该程序还是有问题的,因为在ros::spin();处于死循环,导致不能执行a.exec();界面没有显示.

#include "widget.h"
#include <QApplication>
#include "ros/ros.h"
#include "std_msgs/String.h"

//话题回调函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("node_b is receiving [%s]", msg->data.c_str());
    qDebug("node_b is receiving [%s]", msg->data.c_str());
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();

    ros::init(argc, argv, "listener");
    ros::NodeHandle node;
    ros::Subscriber sub = node.subscribe("message", 1000, chatterCallback);
    ros::spin();

    return a.exec();
}

在终端运行roscore;

新开终端运行发布程序:

rosrun test1_tutorials test1_a
运行QT,得到:Qt上可以收到发布的信息.

代码实例:

https://download.csdn.net/download/ipfpm/10751251

借鉴自:

https://blog.csdn.net/qianniu_/article/details/79014262

https://blog.csdn.net/qq_19473923/article/details/53399833

Qt工程调用ROS可以通过以下步骤实现: 1. 首先,在Qt项目的.pro文件添加ROS相关的依赖及头文件路径。ROS通常存放在/opt/ros/<distro>/lib目录下,头文件存放在/opt/ros/<distro>/include目录下。可以在.pro文件添加类似如下语句: ``` LIBS += -L/opt/ros/<distro>/lib -lroscpp -lrosconsole -lrostime INCLUDEPATH += /opt/ros/<distro>/include ``` 2. 确定Qt工程需要使用ROS的地方,例如,在特定的按钮点击事件执行ROS相关操作。 3. 通过Qt的信号槽机制,将按钮点击事件连接到ROS操作的槽函数。首先在头文件添加槽函数的声明,然后在.cpp文件实现槽函数。槽函数可以直接调用ROS的相关接口进行操作,例如发布消息、订阅话题等。 4. 在Qt工程,需要启动ROS的核心节点(如rosmaster)才能正常使用ROS。可以在程序的入口函数添加启动ROS节点的代码,例如: ``` int main(int argc, char *argv[]) { ros::init(argc, argv, "qt_ros_node"); ros::NodeHandle nh; // ROS相关操作 return a.exec(); } ``` 注意,需要在CMakeLists.txt添加Qt相关的依赖项,以使Qt工程正常编译链接ROS。可以在CMakeLists.txt添加类似如下语句: ``` find_package(catkin REQUIRED COMPONENTS roscpp ) include_directories( ${catkin_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ) target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${Qt5Widgets_LIBRARIES} ) ``` 通过以上步骤,Qt工程就可以成功调用ROS,并实现与ROS系统的交互。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值