当前位置: 首页 > news >正文

ROS建立工作空间-功能包-ROS节点-发布者-订阅者

源教程来自https://www.yahboom.com/build.html?id=9523&cid=529

本着以学习记录为目的

启用之前创建好的docker镜像:

sudo docker start ros_noetic_env

转换到这个终端:

sudo docker exec -it ros_noetic_env /bin/bash

ROS里建立工作空间

cd /root/catkin_ws mkdir -p src cd src catkin_init_workspace

出现CMakeLists.txt就是成功创建了

ROS功能包:

功能包是存在放工作空间文件夹下的src文件夹下,输入以下命令进行创建,以创建learn_topic功能包为例。终端输入,

cd ~/ros_ws/src catkin_create_pkg learn_topic std_msgs rospy roscpp geometry_msgs turtlesim

解释一下命令行的组成:

  • catkin_create_pkg:创建命令
  • learn_topic:功能包的名称
  • roscpp、rospy、geometry_msgs turtlesim:这个是功能包的一下依赖库,也可以后边需要的时候补充到功能包目录下的CMakeLists.txt文件中

  • include:存放需要编译程序的头文件
  • src:存放编译节点程序的源码文件
  • CMakeLists.txt:编译所需要的文件,其中包括声明需要连接哪些库,需要哪些依赖以及生成哪些程序等等
  • package.xml:声明了编译需要的一些依赖以功能包的一些信息,包括功能包版本、功能包创建的作者等等

在后边,我们会学习到如何编写一个节点程序,会有C++版本和Python版本,一般的,C++版本的程序源码是存放在src,而Python版本的源码存放在scripts文件夹,这个文件夹是自己在功能包路径下创建的,可以输入以下命令进行创建,

cd ~/ros_ws/src/learn_topic mkdir scripts

包括后边会提及到到的launch文件和自定义的消息文件,都是需要在功能包的目录下创建相对应的launch文件和msg文件夹进行存放

ROS节点

rosnode

在启用了roscore之后,这里使用rosnode list的命令查询当前正在运行的节点:

rosnode list

可以通过rosnode info node_name查看该节点信息

rosnode info /rosout
  • 发布的话题以及相关的数据类型

    Publications:

    • /rosout_agg [rosgraph_msgs/Log]
  • 订阅的话题以及相关的数据类型

    Subscriptions:

    • /rosout [unknown type]
  • 提供的服务以及相关的数据类型

    Services:

    • /rosout/get_loggers
    • /rosout/set_logger_level

rosrun

输入:

rosrun turtlesim turtlesim_node

然后吧,我们需要在开一个终端,然后输入:

sudo docker exec -it ros_noetic_env /bin/bash

然后嘛,这里再次输入rosnode list,就可以看到/turtlesim这个节点了

ros话题发布者

这里嘛,因为我们下载的是base最精简版的,nano需要提前下好,然后在root@ubuntu-desktop串口里执行

apt-get update apt-get install -y nano

在创建一个文件夹:

nano turtle_velocity_publisher.cpp
/*创建一个小海龟的速度发布者*/ #include <ros/ros.h> #include <geometry_msgs/Twist.h> int main(int argc, char **argv) { ros::init(argc, argv, "turtle_velocity_publisher");//ROS节点初始化 ros::NodeHandle n;//这里是创建句柄 //创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10 ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist> ("/turtle1/cmd_vel", 10); ros::Rate loop_rate(10);//设置循环的频率 while (ros::ok()) { //初始化需要发布的消息,类型需与Publisher一致 geometry_msgs::Twist turtle_vel_msg; turtle_vel_msg.linear.x = 0.8; turtle_vel_msg.angular.z = 0.6; turtle_vel_pub.publish(turtle_vel_msg);// 发布速度消息 //打印发布的速度内容 ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]", turtle_vel_msg.linear.x, turtle_vel_msg.angular.z); loop_rate.sleep();//按照循环频率延时 } return 0; }
修改CMakelist.txt文件

在CMakelist.txt中配置,build区域下,添加如下内容,直接打卡这个.txt文件,然后在最下面加进去

add_executable(turtle_velocity_publisher src/turtle_velocity_publisher.cpp) target_link_libraries(turtle_velocity_publisher ${catkin_LIBRARIES})

add_executable说明了生成的可执行程序的文件是turtle_velocity_publisher,编译的源码是src目录下的turtle_velocity_publisher.cpp。

target_link_libraries说明了编译生成可执行文件是需要链接的库。

然后输入:

cd /root/catkin_ws catkin_make

如果这个编译有错误的话,说没有找到这个turtle...的源文件,确保这个文件在learn_topic/src目录下,

ls /root/catkin_ws/src/learn_topic/src/

那就这样:

mv /root/catkin_ws/src/learn_topic/src/turtle_velocity_publisher /root/catkin_ws/src/learn_topic/src/turtle_velocity_publisher.cpp

然后删掉之前报错的残余文件:

cd /root/catkin_ws rm -rf build/ devel/ catkin_make

然后就开始运行rosrun turtlesim turtlesim_node

再重新开一个终端,记得切换到root@ubuntu-desktop:/# 运行 rosrun learn_topic turtle_velocity_publisher

ROS话题订阅者

进入:cd /root/catkin_ws/src/learn_topic/src

先创建一个文件:turtle_pose_subscriber.cpp

然后把这些代码贴进去:

/*创建一个小海龟的当前位姿信息接收*/ #include <ros/ros.h> #include "turtlesim/Pose.h" // 接收消息后,会进入消息回调函数,回调函数里边会对接收到的数据进行处理 void turtle_poseCallback(const turtlesim::Pose::ConstPtr& msg) { // 打印接收到的消息 ROS_INFO("Turtle pose: x:%0.3f, y:%0.3f", msg->x, msg->y); } int main(int argc, char **argv) { ros::init(argc, argv, "turtle_pose_subscriber");// 初始化ROS节点 ros::NodeHandle n;//这里是创建句柄 // 创建一个订阅者,订阅的话题是/turtle1/pose的topic,poseCallback是回调函数 ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10,turtle_poseCallback); ros::spin(); // 循环等待回调函数 return 0; }

添加CMakelist.txt里面的配置:

add_executable(turtle_pose_subscriber src/turtle_pose_subscriber.cpp) target_link_libraries(turtle_pose_subscriber ${catkin_LIBRARIES})

然后编译:

cd ~/ros_ws catkin_make

然后这个终端需要刷新一下:

cd ~/ros_ws source devel/setup.bash

运行程序:

roscore

重开一个终端 记得切换到root@ubuntu-desktop:/# 运行小海龟节点

rosrun turtlesim turtlesim_node

重开一个终端....运行小海龟速度控制节点

rosrun turtlesim turtle_teleop_key

重开一个终端....运行订阅者节点,持续接收小海龟发送的位姿数据

rosrun learn_topic turtle_pose_subscriber
http://www.jsqmd.com/news/523747/

相关文章:

  • 【VIVADO调试手记】从[Opt 31-430]错误看FDCE未驱动信号的定位与修复
  • ClawdBot国产化适配:支持麒麟V10+昇腾910B,vLLM华为插件实测可用
  • 介绍6个专业AI论文工具,提供智能降重及文本重构服务,有效控制重复率
  • 攀山的人
  • 混凝土细观单轴受压与受拉模拟论文复现
  • ArcMap新手教程:如何用南京地铁shp数据制作专业交通地图(WGS84坐标系)
  • AWS Rekognition 人脸识别批量照片匹配实战指南
  • 5分钟搞定!用GPT-SoVITS把你的文字变成专属AI语音(Windows11+RTX显卡实测)
  • 2026南京初中升学冲刺辅导优质机构推荐榜 - 资讯焦点
  • 2026南京初中辅导优质机构推荐指南 针对性提分 - 资讯焦点
  • Qwen-Image定制镜像实操:RTX4090D上Qwen-VL与Gradio结合构建Web可视化图文问答界面
  • 杰理之ansmitter 对讲与 HFP_AT 通信 DEMO【篇】
  • 从名称修饰到虚表恢复:C++ 逆向工程核心指南(含 x64/x86 差异与 STL 识别)
  • 解析‘爬取预算(Crawl Budget)’在 GEO 时代的分配逻辑:AI 更想看哪些页?
  • Jimeng AI Studio开源镜像部署教程:PyTorch+Diffusers免配置环境搭建
  • 金字塔池化模块(PPM)
  • 2026广州化妆品代工企业评估报告:中高端品牌首选服务商推荐 - 博客湾
  • 面试题· 学习笔记
  • 2026年全国楼层板厂家哪家优质?聚焦防火承重适配 多场景工程参考 - 深度智识库
  • VS1053 DREQ信号量同步机制设计与RTOS集成
  • GriddyCode高效使用实战指南:从零开始掌握视觉化编码工具
  • 操作系统面试必考:银行家算法10大高频问题解析
  • 2026年天津发电机出租厂家推荐:发电机租赁、大型发电机出租、静音发电机出租、柴油发电机出租、ups应急电源出租厂家选择指南 - 海棠依旧大
  • 靠谱的品牌营销战略营销咨询公司推荐:奇正沐古如何助力城市文旅? - 资讯焦点
  • 2026 安徽美丽乡村铺装:地铺石、石英砖、陶瓷 PC 砖选 - 资讯焦点
  • 酪氨酸羟化酶重组兔单抗如何助力酪氨酸羟化酶缺乏症的诊疗研究?
  • 微信登录验证码背后的协议故事:从iPhone到iPad,为什么v859成了研究者的‘香饽饽’?
  • NumPy统计函数全解析:从基础聚合到高级分位数计算
  • 2026年找靠谱环氧地坪漆厂家:从资质到场景的深度测评,这3家值得重点关注 - 小白条111
  • 2026年橡塑板生产厂家核心指标深度评测 - 资讯焦点