QT配置ROS一些小问题(2)

QT配置ROS一些小问题(1)中我发现!!!

如果你是用的ros2做开发,我建议你还是用colcon吧

但是我会有个问题:一旦使用QT自己的package去创建包的话大概率会创建失败(我没找到解决办法)

我的解决思路:

我不使用QT自带的包创建工具去创建,还是使用原本的ROS2的创建包工具在该工作空间的src目录下自己创建。(QT只不过是个载体,无所谓用什么方法去创建包,大家不要纠结用什么办法去创建包)

ros2 pkg create village_wang --build-type ament_cmake --dependencies rclcpp

然后我们的包就创建完毕了!!!

接着我们在village_wang/src下创建一个wang2.cpp文件,创建完成后的目录结构如下:

红框里面是下面的步骤加进去的。

写一下wang2.cpp文件(细心的大家已经发现了我看的教程是鱼香ROS的哈哈哈)

#include "rclcpp/rclcpp.hpp"
/*
    创建一个类节点,名字叫做SingleDogNode,继承自Node.
*/
class SingleDogNode : public rclcpp::Node
{

public:
    // 构造函数,有一个参数为节点名称
    SingleDogNode(std::string name) : Node(name)
    {
        // 打印一句自我介绍
        RCLCPP_INFO(this->get_logger(), "大家好,我是单身狗%s.",name.c_str());
    }
private:
};

我们在这里只写的是一个类并把打印信息写到了构造函数里面。(为了演示我只写了cpp文件,如果是自己项目的话,建议大家还是吧.h和.cpp分开写)

下一步我们就需要对界面进行设置了:

加入这个之后出现三个文件。

但是我们不要以为这就完事了!!还有main没写!在自己创一个main.cpp函数

至此各个文件创好了。然后我们看下代码是咋样的

首先是Cmake文件:在原有基础上我们增加了

main.cpp文件

#include <QApplication>
#include <rclcpp/rclcpp.hpp>
#include <src/wang2.cpp>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
    //FDILink::ahrsBringup bp;
    QApplication a(argc,argv);
    rclcpp::init(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <rclcpp/rclcpp.hpp>
#include <src/wang2.cpp>
#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);    
    /*产生一个Wang2的节点*/
    auto node = std::make_shared<SingleDogNode>("wang2");
    /* 运行节点,并检测退出信号*/
    connect(ui->pushButton, &QPushButton::clicked, this, [=]() {rclcpp::spin(node);;});
    connect(ui->pushButton, &QPushButton::clicked, this, [=]() {rclcpp::shutdown();;});
}

MainWindow::~MainWindow()
{
    delete ui;
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:

    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();



private slots:

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

好啦!我们先用colcon编译一下:

编译成功!but,大部分小伙伴会问了:我点这里为啥不行嘞?

我们需要在项目构建里面选择王二节点运行:

分别用两种方式测试一下首先是Terminal方法:

source install/setup.bash
ros2 run village_wang wang2_node

第二种方法点击也会成功:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值