ROS实践03 订阅方实现C++
文章目录
运行环境:
ubuntu20.04 noetic
宏基暗影骑士笔记本
思路:
创建功能包
在功能包src下新建cpp
修改CMakLists,
运行节点
1.1 vscode 环境配置:
1)ctrl+shift+X 添加扩展插件:
C/C++、Python 、ROS、CMake Tools
2)ctrl+shift+B 配置中更换为以下代码
{// 有关 tasks.json 格式的文档,请参见// https://go.microsoft.com/fwlink/?LinkId=733558"version": "2.0.0","tasks": [{"label": "catkin_make:debug", //代表提示的描述性信息"type": "shell", //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行"command": "catkin_make",//这个是我们需要运行的命令"args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”"group": {"kind":"build","isDefault":true},"presentation": {"reveal": "always"//可选always或者silence,代表是否输出信息},"problemMatcher": "$msCompile"}]}
1.2 C++代码实现
详细部分可参考博客:ROS实践 C++ Python
1)工作空间创建和编译
mkdir -p demo01_ws/src
cd demo01_ws
catkin_make
code .
2)功能包创建和添加依赖
在工作空间src目录下创建功能包
demo02_sub
roscpp rospy std_msgs
3)新建.cpp文件
在功能包src目录下新建.cpp文件
#include <ros/ros.h>
#include <std_msgs/String.h>void messageCallback(const std_msgs::String::ConstPtr& msg)
{// 输出接收到的消息内容ROS_INFO("Received message: %s", msg->data.c_str());
}int main(int argc, char** argv)
{// 初始化 ROS 节点ros::init(argc, argv, "subscriber_node");// 创建节点句柄ros::NodeHandle nh;// 创建一个名为“message”的话题,消息类型为 std_msgs::Stringros::Subscriber sub = nh.subscribe("message", 10, messageCallback);// 循环等待回调函数ros::spin();return 0;
}
subscriber_node是节点名
message是话题名
std_msgs::String::ConstPtr& msg,表示一个指向 std_msgs::String 类型消息的 智能指针, 名为msg
msg->data.c_str() 指针通过箭头->来访问订阅的消息
4)修改CMakeList
# 将源文件 src/demo01_sub.cpp 编译成可执行文件 demo01_sub.cpp
add_executable(demo01_sub.cpp src/demo01_sub.cpp)target_link_libraries(demo01_sub.cpp${catkin_LIBRARIES}
)
5)运行节点
ctrl+shift+B
source ./devel/setup.bash# rosrun 包名 + 可执行文件名
rosrun demo01_sub demo01_sub.cpp
6)启动发布者发布命令
具体实现可参考博客:ROS实践 发布者publish C++
source ./devel/setup.bash
rosrun demo01_pub demo01_pub.cpp
# 显示节点和话题关系
rqt_graph
💐💐撒花 💐💐 ⭐⭐⭐祝你成功 ⭐⭐⭐