学习目标:
①改写CMakeLists.txt文件
②实现ROS发布订阅通信
③了解Qt IDE使用
④ROS程序运行
总目标:
选择一款机械臂集成 ROS2通讯
预计2024年2月10日前完成
首先ROS是有官网教程的:http://wiki.ros.org/cn/ROS/Tutorials
写该系列文章一是记录学习过程,二是希望对自学ROS的初学者有一点儿帮助。
使用ROS1作为学习起点,最终的课程作业是使用ROS2集成auboi5功能。
需要对linux有一定的基础知识。
系统虚拟机搭建参见遨博学院:https://blog.csdn.net/aubo_academy/article/details/123181287
对Qt使用几乎无要求,之所以选择Qt加载CMakeLists.txt,是因为之前使用Qt比较多,而且Qt还可以对ros函数跳转。
环境平台:ubuntu 18.04
ROS版本:melodic (rosversion -d查看)
Qt版本:qt-opensource-linux-x64-5.12.9
cmake version 3.10.2
1、创建ros包
新建一个工作文件夹,在文件夹内再创建一个src文件夹,之后
代码语言:javascript复制catkin_create_pkg talker std_msgs roscpp
2、Copy发布订阅程序
将listener.cpp和talker.cpp复制到talker/src下
talker.cpp:
代码语言:javascript复制#include <ros/ros.h>
#include "std_msgs/String.h"
#include <sstream>
//This tutorial demonstrates simple sending of messages over the ROS system.
int main(int argc, char **argv)
{
ros::init(argc, argv, "talker");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(10);
int count = 0;
while (ros::ok())
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
count;
}
return 0;
}
listener.cpp:
代码语言:javascript复制#include "ros/ros.h"
#include "std_msgs/String.h"
/**
* This tutorial demonstrates simple receipt of messages over the ROS system.
*/
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
ros::spin();
return 0;
}
3、修改CMakeLists.txt文件
在src/talker下的CMakeLists.txt project(talker)后添加:
代码语言:javascript复制#设置find_package的.cmake搜索路径
set(CMAKE_PREFIX_PATH /opt/ros/melodic/)
#编译后文件识别为可执行程序而不是库
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")
在CMakeLists.txt最后添加:
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
4、使用Qt 打开CMakeLists.txt
配置完成后的效果:
美中不足的是,还没找到Qt打开CMakeLists.txt的多核编译设置。
5、运行listener和talker
①可执行程序位置:
代码语言:javascript复制/home/auboros/my_workspace/test/article/first/src/build-talker-Desktop_Qt_5_12_9_GCC_64bit-Release/devel/lib/talker
②打开一个终端设置ros环境并运行roscore
③再打开一个终端运行可执行程序listener
④再打开一个终端运行talker
代码含义不进行解释,可以自行百度。
可能是全网最简洁的ros发布订阅程序。