ROS1学习笔记
ROS的基本单元node节点和package包node节点GMapping 管建图Move-base管导航wpb_core控制底盘rplidar_ros驱动雷达package包节点的容器将节点规整起来形成包第一个node节点创建package包按ctrlaltt创建在~/catkin_ws/src文件夹里catkin_create_pkg包名依赖项列表回访依赖项指令roscd在终端中进入指定软件包的文件地址创建Node节点源码编译add_executable(chao_node src/chao_node.cpp)chao_node:可执行文件的名字src/ssr_pkg_node.cpp指定从哪个代码文件进行编译快捷键ctrls:保存 ctrlshiftB:编译ctrlAltT:打开终端;ctrlshiftO:打开新终端运行Node节点1.打开终端启动ROS系统核心在终端里执行指令roscore2.确认ROS核心处于运行状态终端执行rosrun包名节点文件名总结总框架1.使用catkin_create_pkg创建一个软件包2.在软件包的src文件夹下创建一个节点的cpp源码文件3.在节点的源码文件中include包含ROS的头文件4.构建一个main函数并在函数的开头执行ros::init()5.构建while循环循环条件为ros::ok()6.在CMakeLists.txt中设置节点源码的编译规则7.编译运行ROS的只要通讯方式Topic话题与Message消息Topic话题1.话题Topic是节点间进行持续通讯的一种形式2.话题通讯的两个节点通过话题的名称建立起话题通讯连接3.话题通讯的数据叫做消息Message4.消息Message通常会按照一定的频率持续不断的发送以保证消息数据的实时性5.消息的发送方叫做话题的发布者Publisher6.消息的接收方叫做话题的订阅者Subsciber补充1.一个ROS节点网络中可以同时存在多个话题2.一个话题可以有多个发布者也可以有多个订阅者3.一个节点可以对多个话题进行订阅也可以发布多个话题4.不同的传感器消息通常会拥有各自独立话题名称每个话题只有一个发布者5.机器人速度指令话题通常会有多个发布者但同一时间只能有一个发言人Message消息消息的格式有多种用来满足不同的数据传输要求在生成消息包是要指定消息的类型在ROS中使用C编写Publisher发布者节点发布者的代码实现nh.advertisse(话题名称”缓存长度//构建消息发送对象运行新节点先打开终端roscore 再分屏运行节点rosrun ssr_pkg chao_node 再分屏rostopic list(查看名称rostopic echo /话题名称(查看消息内容再分屏 echo -e 复制上面代码控制循环频率的工具总结1.确定话题名称和消息类型2.在代码文件中include消息类型对应的头文件3.在main函数中通过NodeHandler大管家发布一个话题并得到消息发送对象4.生成要发送的信息包并进行发送数据的赋值5.调用消息发送对象的publish函数将消息包发送到话题当中常用工具rostopic list :列出当前系统中所有活跃着的话题rostopic echo 主题名称 显示指定话题中发送的信息包内容rostopic hz 主题名称统计指定话题中信息包发送频率在ROS中使用C编写Subscriber订阅者节点创建订阅者节点编译和运行打开终端第一个窗口roscore; ctrlshiftO:打开新终端rosrun ssr_pkg chao_node;再分屏rosrun atr_pkg ma_node调整和优化小结1.确定话题名称和消息类型2.在代码文件中includeros.h和消息类型对应的头文件3.再main函数中通过NodeHandler大管家订阅一个话题并设置消息接收回调函数4.定义一个回调函数对接收到的信息包进行处理5.main函数中需要执行ros::spinOnce()让回调函数能够响应接收到的信息包常用工具rqt_graph:图形化显示当前系统活跃的节点以及节点间的话题通讯关系在ROS中使用lunch文件依次启动多个节点使用launch文件启动节点XML语法标记名称 属性名1“属性值1” ...内容/标记名称编写运行lunch文件小结1.使用launch文件可以通过roslaunch指令一次启动多个节点2.在launch文件中为节点添加outputscreen属性可以让节点信息输出在终端中。ROS_WARN不受该属性控制.在launch文件中为节点添加launch-prefixgnome-terminal -e属性可以让节点单独运行在一个独立终端中。如若找不到文件就执行这个在ROS中用C实现机器人运动控制运动控制的C实现实现思路1.构建一个新的软件包报名叫做vel_pkg2.在软件包中新创建一个节点节点名叫做vel_node3.在节点中向ROS大管家NodeHandle申请发布话题/cmd_vel,并拿到发布对象vel_pub4.构建一个geometry_msgs/Twist类型的信息包vel_msg用来承载要发送的速度值5.开启一个while循环不停的使用vel_pub对象发送速度信息包vel_msg在ROS中用python实现机器人运动控制运动控制的python实现同上实现思路1.构建一个新的软件包报名叫做vel_pkg2.在软件包中新创建一个节点节点名叫做vel_node.py3.在节点中向ROS大管家rospy申请发布话题/cmd_vel,并拿到发布对象vel_pub4.构建一个geometry_msgs/Twist类型的信息包vel_msg用来承载要发送的速度值5.开启一个while循环不停的使用vel_pub对象发送速度信息包vel_msg还要再终端执行机器人仿真软件进不去就执行这个在ROS中使用RViz观测传感器数据使用RViz观测传感器数据Gazebo是模拟真实机器人发出传感器数据的工具RViz是接收传感器数据并进行显示的工具roslaunch wpr_simulation wpb_rviz.launch用来实时调控ROS系统中的激光雷达消息包格式激光雷达消息包格式rostopic echo /scan --noarr在ROS中用python实现获取激光雷达数据实现步骤1.构建一个新的软件包包名叫做lidar_pkg2.在软件包中新建一个节点节点名叫做lidar_node.py3.在节点中向ROS大管家rospy申请订阅话题/scan并设置回调函数为LidarCallback()4.构建回调函数LidarCallback()用来接收和处理雷达数据5.调用longinfo()显示雷达检测到的前方障碍物距离再打开终端执行在ROS中用python实现激光雷达避障实现步骤1.让大管家rospy发布速度控制话题/cmd_vel2.构建速度控制消息包vel_cmd3.根据激光雷达的测距数值实时调整机器人运动速度避开障碍物在ROS中使用python实现IMU数据获取imu/data_raw(sensor_msgs/lmu):加速度计输出的矢量加速度和陀螺仪输出的旋转角速度imu/data(sesor_msgs/lmu):/imu/data_raw的数据再加上融合后的四元数姿态描述imu/mag(sensor_msgs/MagneticField):磁强计输出磁强数据实现步骤1.构建一个新的软件包包名叫做imu_pkg2.在文件包中新建一个节点节点名叫做imu_node.py3.在节点中向ros大管家rospy申请订阅话题/imu/data并设置回调函数为imu_callback()4.构建回调函数imu_callback(),用来接收和处理IMU数据5.使用TF工具将四元数转换成欧拉角6.调用loginfo显示转化后的欧拉角数值再执行如下代码在ros中用python实现IMU航向锁定实现步骤1.让大管家rospy发布速度控制话题/cmd_vel2.设定一个目标朝向角当姿态信息中的朝向角和目标朝向角不一致时控制机器人转向目标朝向角ROS的标准消息包std_magsROS中的几何包geometry_msgs和传感器包sensor_msgsROS中生成自定义消息类型生成自定义消息的步骤1.构建新软件包依赖项message_generation、message_runtime.2.软件包添加msg目录新建自定义消息文件以.msg结尾3.在CMakeLists.txt中将新建的.msg文件加入add_message_files()4.在CMakeLists.txt中去掉generate_messages()注释符号将依赖的其他消息包名称添加进去5.在CMakeLists.txt中将message_runtime加入catkin_package()的CATKIN_DEPENDS6.在packkage.xml中将message_generation、message_runtime加入build_depend和exec_depend7.编译软件包生成新的自定义消息类型在ROS中使用自定义消息类型C节点新消息类型在C节点的应用1.在节点代码中先include新消息类型的头文件2.在发布或订阅话题的时候将话题中的消息类型设置为新的消息类型3.按照新的消息结构对消息包进行赋值发送或读取解析4.在CMakeList.txt文件的find_package()中添加新消息包名称作为依赖项5.在节点的编译规则中添加一条add_dependencies(),将新消息软件包名称_generate_messages_cpp作为依赖项6.在package.xml中将新消息包添加到build_depend和exec_depend中去7.运行catkin_make重新编译在ros中使用C发布自定义地图实现步骤1.构建一个软件包map_pkg依赖项里加上nav_msgs2.在map_pkg里创建一个节点map_pub_node3.在节点中发布话题/map消息类型为nav_msgs::OccupancyGrid4.构建一个nav_msgs::OccupancyGrid地图消息包并对其进行赋值5.将地图消息包发送到话题/map6.编译并运行节点7.启动RViz订阅话题/map显示地图Hector_Mapping初体验在终端运行这几条代码就可运行roslaunch wpr_simulation wpb_stage_slam.launchrosrun hector_mapping hector_mappingrosrun rviz rvizrosrun rqt_robot_steering rqt_robot_steeringlaunch启动Hector_MappingHector_Mapping的参数设置初识ROS的TF系统TF主要描述的是两个坐标系的空间关系坐标系变换在终端执行rosrun rqt_tf_tree rqt_tf_treelaunch启动Gmapping建图Gmapping的参数设置地图的保存和加载保存先打开终端执行roslaunch slam_pkg gmapping.launch然后再分屏在主目录下执行rosrun map_server map_saver -f map加载在终端先运行roscore再分屏执行rosrun map_server map_server map.yaml打开rviz就可以看到如下Navigation导航系统结构图move_base节点环境准备工作先进入工作空间源码目录然后下载工程源代码git clone https://github.com/6-robot/wpr_simulation.git)进入脚本文件夹cd wpr_simulation/scripts)执行依赖项安装脚本./install_for_noetic.sh)回退到工作空间登录cd ~/catkin_ws)编译catkin_make)进入工作空间源码目录cd catkin_ws/src)下载工程源代码git clone http://github.com/6-robot/wpb_home.git)进入脚本文件夹cd wpb_home/wpb_home_bringup/scripts)回退到工作空间根目录cd ~/catkin_ws/)编译catkin_make)将之前的地图文件复制到下图的文件夹里导航代码编写打开终端进入工作空间源码目录创建新的软件包然后编写编写完之后在终端进行编译catkin_make)运行导航程序运行机器人然后分屏执行roslaunch nav_pkg nav.launch再打开rviz添加如下内容代价地图Costmap代价地图的参数设置DWA规划器在终端中运行roslaunch wpr_simulation wpb_stage_robocup.launch然后再打开一个窗口运行roslaunch nav_pkg nav.launch快捷调参的方法在终端运行rosrun rqt_reconfigure rqt_reconfigureTEB规划器在终端安装sudo apt install ros-noetic-teb-local-planner在终端中运行roslaunch wpr_simulation wpb_stage_robocup.launch然后再打开一个窗口运行roslaunch nav_pkg nav.launch添加path项修改名称local_plan修改Line Style为Billboards添加PoseArray修改名称第一个坐标导航的C编程实现1.编写节点代码2.设置编译规则3.编译节点文件4.运行节点文件坐标导航的python编程实现1.编写节点文件2.添加可执行权限3.运行节点文件航点导航插件介绍开源ros导航插件安装依赖项无报错就是安装成功编译源码工程回到catkin_ws目录然后catkin_make进行编译运行航点导航插件的集成和启动编写代码运行下面三条指令航点导航功能的C实现编写代码配置权限运行下面三条指令相机图像获取的C实现创建一个目录创建节点添加编译规则在17行添加在120行添加在末尾添加运行在终端输入roslaunch wpr_simulation wpb_balls.launch打开仿真软件然后再执行然后开新终端执行rosrun wpr_simulation ball_random_move颜色目标识别与定位的C实现1.颜色空间转换 RGB-HSV2.二值化 分割提取目标物3.计算目标物的质心坐标节点代码添加编译规则进行编译打开终端进入catkin_ws工作空间输入catkin_make进行编译运行代码在终端内输入roslaunch wpr_simulation wpb_balls.launch然后分终端框输入rosrun cv_pkg cv_hsv_nodeROS颜色目标跟随的C实现节点代码添加编译规则进行编译打开终端进入catkin_ws工作空间输入catkin_make进行编译运行代码在终端内输入roslaunch wpr_simulation wpb_balls.launch然后分终端框输入rosrun cv_pkg cv_follow_nodeROS人脸检测的C实现节点代码添加编译规则进行编译打开终端进入catkin_ws工作空间输入catkin_make进行编译运行代码在终端内输入roslaunch wpr_simulation wpb_balls.launch然后分终端框输入rosrun cv_pkg cv_face_detect

相关新闻

Java+SSM+Flask量化积分管理系统开发实践

Java+SSM+Flask量化积分管理系统开发实践

1. 项目概述与需求拆解量化积分管理系统,说白了就是把员工的日常工作表现"换算"成积分,用积分来驱动绩效评估和管理决策的一套系统。你不需要凭感觉打分,不需要领导拍脑袋定绩效,所有考核维度都拆成可量化的积分规则&am…

2026/10/14 7:45:42 阅读更多 →
手写 Tool Use 三方案:从Prompt解析到Agent循环

手写 Tool Use 三方案:从Prompt解析到Agent循环

在不少面试现场,手写代码题往往不是考察背诵,而是考察你在限定时间内,能不能把一个核心机制徒手搭出来。那次面试官给我出的题就是“手写一个 Tool Use”,我当时心里先是一紧,随后快速把思路收拢成三条路线&#xff1a…

2026/10/14 7:45:42 阅读更多 →
C++继承踩坑指南:从内存布局到多继承的实战剖析

C++继承踩坑指南:从内存布局到多继承的实战剖析

C的继承,可能是最容易被"高估"也最容易被"低估"的特性。说它被高估,是因为太多入门教程把继承渲染成面向对象的银弹,仿佛只要学会写class A : public B,就掌握了代码复用的真谛;说它被低估&#x…

2026/10/14 7:45:42 阅读更多 →

最新新闻

编程尚未被解决:从表达、复杂度到验证的工程实践思考

编程尚未被解决:从表达、复杂度到验证的工程实践思考

1. 为什么“编程尚未被解决”不是一句丧气话第一次看到“编程尚未被解决”这个说法,很多人下意识会觉得这是一句吐槽,甚至是一句丧气话。毕竟我们每天写代码、跑测试、上线部署,日子照样过,需求照样交付,怎么就“尚未被…

2026/10/14 15:00:34 阅读更多 →
NHANES数据库中心肾生物标志物分析与R语言实践

NHANES数据库中心肾生物标志物分析与R语言实践

1. 项目背景与核心价值心肾疾病作为全球范围内的高发慢性病,其早期诊断和精准监测一直是临床研究的重点。生物标志物分析作为疾病筛查的重要手段,传统研究往往受限于样本量和数据多样性。美国国家健康与营养调查(NHANES)数据库的公…

2026/10/14 15:00:34 阅读更多 →
SpringBoot+Vue构建景区民宿预约系统实战

SpringBoot+Vue构建景区民宿预约系统实战

1. 项目背景与核心价值景区民宿预约系统是近年来旅游数字化升级的典型需求。随着自由行游客比例持续上升,传统电话预订模式暴露出响应慢、信息不透明、管理低效等问题。去年暑期我在黄山景区调研时,亲眼看到民宿老板同时接听3部电话记录预订,…

2026/10/14 15:00:34 阅读更多 →
鎏金仿古铝瓦覆古刹 守护峰山梵宇千年文脉

鎏金仿古铝瓦覆古刹 守护峰山梵宇千年文脉

坐落于山东济宁邹城峰山风景区的白云宫(兴国寺),依山而建、隐于苍松翠柏之间,是鲁南地区声名远播的千年道教古刹。近期寺院殿堂屋面修缮工程圆满落成,鎏金仿古铝瓦的全面应用,让这座山间古刹在严格恪守道教宫观建筑规制、重现金瓦红墙庄严气韵的同时,彻底破解了山地古建传统屋面…

2026/10/14 15:00:34 阅读更多 →
关系除法与笛卡尔积的工程化实战指南

关系除法与笛卡尔积的工程化实战指南

1. 这不是教科书里的“关系代数”,而是我带三届学生做课程设计时反复打磨出的实操手册你点开这个标题,大概率正被“除运算”卡在作业最后一题,或者在数据库原理考试前夜对着笛卡尔积发呆——别急,这不是又一本照搬教材的讲义。我是…

2026/10/14 15:00:34 阅读更多 →
STM32F103储能逆变器硬件-固件协同设计实战

STM32F103储能逆变器硬件-固件协同设计实战

简介:本资源是一套基于STM32F103微控制器开发的5kW储能逆变器完整工程资料,面向嵌入式电力电子方向的工程师、高校电力系统/自动化专业学生及硬件开发者,解决中小型储能系统中并网充放电控制、离网无缝切换与多重安全保护等核心实现问题。压缩…

2026/10/14 14:59:33 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →