利用QT在ROS1 Noetic 环境下进行开发,蒋程扬老师的系列课程讲解得很详细,这里仅给出笔者在学习过程中踩过的坑,以及一些使用经验。
目录
课程链接
优快云博客(免费)
ROS Qt5 librviz人机交互界面开发一(配置QT环境)-优快云博客
https://blog.youkuaiyun.com/qq_38441692/category_9863968.html
古月居课程(付费)
https://class.guyuehome.com/p/t_pc/course_pc_detail/column/p_5eba414d58533_Uh4XTbPi
https://class.guyuehome.com/p/t_pc/course_pc_detail/column/p_5ec490a8d7bd7_b7ucPqUs
https://class.guyuehome.com/p/t_pc/course_pc_detail/column/p_5edf2d27a1942_foy4nqci
上述为ROS1 C++开发,以下为Python开发。
https://class.guyuehome.com/p/t_pc/goods_pc_detail/goods_detail/p_649e9a60e4b0b0bc2bfa365c?古月居里也有ROS2开发的版本,笔者没有找到。
Noetic环境下的配置
蒋师的教程使用的是ROS Melodic,环境配置阶段不适合Noetic。
Noetic在安装时就已包含QT相关组件,笔者并未进行相关环境的配置,而是直接导入蒋师提供的模板包进行开发。
根据前述提供的第一篇教程,下载如下ROS功能包,并放入工作空间。
https://github.com/chengyangkj/ros_qt_demo
可以根据里面的说明进行包名的修改。
导入后,进行编译,如果出错,可以查看教程,里面给出了一些解决办法,笔者成功编译通过。
启动roscore,打开qtcreator,上述操作可直接在命令行进行,执行前可以先source一下。
roscore
source ./devel/setup.bash
qtcreator
文件->打开项目->选择工作空间下的CMakeLists.txt,注意是工作空间下src文件夹下的,与功能包同级。
左栏,项目,Imoprted Kit 和 桌面 下的 build 页,将构建目录改为工作空间中的build文件夹。
如果出现Imported Kit与桌面CMake配置冲突的情况,如下,按照Imported Kit的来,在Imported Kit下选择Apply Changes...。
构建->执行CMake,成功通过。
注意,如果出现以下问题,也即找不到catkin包
16:59:17: 为项目Project执行步骤 ...
16:59:17: 正在启动 "/usr/bin/cmake" --build . --target all
CMake Error at CMakeLists.txt:65 (message):
find_package(catkin) failed. catkin was neither found in the workspace nor
in the CMAKE_PREFIX_PATH. One reason may be that no ROS setup.sh was
sourced before.
-- Configuring incomplete, errors occurred!
See also "/home/zhongren/ROS_Learning/build/CMakeFiles/CMakeOutput.log".
make: *** [Makefile:558: cmake_check_build_system] Error 1
16:59:17: 进程"/usr/bin/cmake"退出,退出代码 2 。
也是因为前述的Imported Kit与桌面CMake配置冲突,需要手动设置 CMAKE_PREFIX_PATH 。
打开终端,输入:
echo $CMAKE_PREFIX_PATH
复制这个路径,在build中手动添加,注意在Imported Kit与桌面下都需要添加。
key填 CMAKE_PREFIX_PATH , value填 上面的路径。
然后点击下方的Apply...,再次执行CMake即可。
Noetic版本到此结束,无需进行后续配置,点击左下角三角标即可成功运行。
运行前需要先打开roscore,建议将右下角两行勾上,免得手动输入。
初步配置结束。
后续再根据自己的需要,对这个包进行修改即可,具体可参照蒋师教程。
按钮 功能实现
双击main_window.ui,打开图形化设计界面。
拖动左侧栏组件,添加按钮到合适位置,并在右侧属性中修改名称。也可添加水平弹簧,美化布局。
右侧栏有很多属性参数,可直接修改按钮上显示的文字。
ctrl+r,编译运行,可以看到新加的按钮。
ctrl+q,退出,编辑main_window.cpp文件,需要在此函数中添加内容。
QT中采用事件-信号-响应机制。点击按钮事件会发出信号,利用槽函数来响应这个信号,并执行所需操作。
所以我们需要将事件、信号、响应函数联系起来,用到 connect 函数。
按F1可以查看函数说明,需要传入 发送者,信号,接收者,槽函数。
这里的发送者就是按钮,信号是点击,接收者是主窗体本身,槽函数自定义为 mybutton_clicked()。
connect(ui.mybutton,SIGNAL(clicked(bool)),this,SLOT(mybutton_clicked(bool)));
F4跳至头文件,补充对槽函数的声明。
F4,跳回,在源文件中补充槽函数的具体实现,这里简单将其文字改为clicked,作为响应。
void MainWindow::mybutton_clicked(bool)
{
ui.mybutton->setText("clicked");
}
编译运行,成功实现对按钮按下事件的响应。
这里仅实现了简单的功能,按钮的事件还有很多,可自行尝试实现。
祝科研有进,前程似锦。