文章目录
运行环境:
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::String
ros::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