第2天 ROS 《ROS文件系统+常用命令实战(小乌龟案例)零基础吃透》

📌 博客前言

✅ 配套实验环境:ROS Noetic(Ubuntu20.04) | Melodic、Kinetic版本命令、逻辑完全通用

一、本节课教学目标

  1. 理解ROS工作空间(Workspace)概念、目录结构与实际开发用途

  2. 掌握ROS功能包(Package)创建规则、标准目录组织方式

  3. 熟记ROS系统高频命令,熟练查看节点、话题、服务、参数信息

  4. 完成小乌龟综合实验,闭环:工作空间→功能包→代码→编译→运行全套开发流程

二、核心概念精讲(课堂原话)

2.1 ROS工作空间(Workspace)

1. 核心概念

工作空间是ROS项目的顶层根目录,统一托管全部功能包、编译缓存、环境变量、项目依赖;所有ROS自定义代码、驱动、URDF模型都必须放在工作空间内,才能正常编译运行。

2. 标准目录结构(catkin_ws标准架构)
catkin_ws/
├─ src/        # 【核心目录】存放所有自定义功能包、源码文件
├─ build/      # 编译临时目录,存放编译中间文件、cmake缓存
├─ devel/      # 开发运行目录,存放可执行程序、环境配置脚本
└─ install/    # 可选安装目录,初学开发全程无需使用
3. 工作空间基础操作命令
(1)从零创建工作空间
# 递归创建工作空间+src源码目录
mkdir -p ~/catkin_ws/src
# 切换至工作空间根目录
cd ~/catkin_ws
# 初始化编译环境,自动生成build、devel文件夹
catkin_make

(2)激活工作空间环境
# 激活当前终端工作空间环境
source devel/setup.bash

🔥 课堂高频考点:source devel/setup.bash 作用

让当前终端识别当前工作空间内:自定义功能包、Python节点、launch文件、自定义消息/服务。

不执行该命令:执行rosrun直接报错 —— package not found

✅ 永久配置环境(一劳永逸):

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc

2.2 ROS功能包(Package)

功能包是ROS开发最小功能单元,节点代码、URDF模型、启动文件、自定义消息、依赖配置全部封装在功能包内部,是ROS开发最小载体。

1. 功能包创建语法+实操

语法:catkin_create_pkg 包名 依赖1 依赖2 ...

# 必须进入src源码目录创建!!
cd ~/catkin_ws/src
# 创建turtle_test功能包,绑定三大核心依赖
catkin_create_pkg turtle_test rospy std_msgs geometry_msgs

2. 功能包标准目录结构

my_package/
├─ CMakeLists.txt      # 编译配置文件(C++必改,Python零基础无需修改)
├─ package.xml         # 包描述文件、依赖声明核心文件
├─ scripts/            # 规范存放Python脚本节点
├─ src/                # 存放C++源码文件
├─ msg/                # 自定义消息文件目录
└─ srv/                # 自定义服务文件目录

3. 开发硬性注意事项
  1. CMakeLists.txt + package.xml 功能包生死文件,禁止删除、重命名

  2. Python脚本放入scripts文件夹后,必须授权:chmod +x 脚本名.py

  3. 功能包名称:禁止大写字母、中文、特殊符号、空格

2.3 核心编译命令:catkin_make

1. 一句话作用

编译整个ROS工作空间,批量解析所有功能包依赖、编译源代码、生成可执行程序与环境脚本;等同于C语言gcc编译代码。

2. 底层执行流程
  1. 扫描src目录下全部自定义功能包

  2. 读取package.xml,解析全部依赖关系

  3. 读取CMakeLists.txt,匹配编译规则

  4. 编译源码,生成可运行节点程序

  5. 自动生成build、devel两大编译目录

3. ROS开发黄金三连命令(必背)
cd ~/catkin_ws       # 切入工作空间根目录
catkin_make          # 全局编译工作空间
source devel/setup.bash  # 激活环境变量

🥳 课堂趣味比喻(方便学生记忆)
  • src文件夹 = 厨房(源代码 = 食材)

  • catkin_make = 开火做饭(编译源码)

  • devel文件夹 = 成品饭菜(编译完成程序)

  • source激活命令 = 饭菜上桌(终端识别程序)

  • rosrun运行节点 = 开饭执行程序

三、ROS全套常用命令汇总(期末速查表)

ROS所有命令围绕五大核心:节点Node、话题Topic、服务Service、参数Param、功能包Package

命令

功能说明

roscore

启动ROS核心、主节点、参数服务器、日志服务,运行所有程序前提

rosrun 包名 节点名

运行指定功能包内部单个节点

roslaunch 包名 xxx.launch

批量启动节点、加载参数、一键启动项目

rosnode list

查看当前系统全部运行节点

rosnode info /节点名

查看节点发布/订阅话题、绑定服务详情

rostopic list

查看系统全部通信话题

rostopic info /话题名

查看话题消息类型、发布者、订阅者

rostopic echo /话题名

实时打印话题传输数据

rostopic pub

终端手动发布话题消息

rostopic hz /话题名

检测话题数据发布频率

rosmsg show 消息类型

查看消息内部字段结构

rosservice list

查看系统全部服务

rosservice call /服务名

终端手动调用服务接口

rosparam list/get/set

查看/读取/修改参数服务器全局参数

roscd / rospack find

快速跳转、查询功能包路径

rqt_graph

图形化可视化节点、话题通信关系

✅ 零基础记忆口诀

roscore 启系统,rosrun 跑节点

rosnode 看节点,rostopic 看通信

rosmsg 看格式,rosservice 调功能

rosparam 改参数,rqt_graph 看关系

四、综合实战:让小乌龟转起来(课堂完整版实验)

实验目标

  1. 闭环工作空间+功能包完整开发流程

  2. 实操全部ROS命令,吃透节点/话题/服务/参数四大通信逻辑

实验前置准备

一次性打开4个终端,所有终端统一加载基础环境

source /opt/ros/noetic/setup.bash
# 配置永久环境后下方命令可省略
source ~/catkin_ws/devel/setup.bash

步骤1:搭建项目环境

# 1. 创建并初始化工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make
source devel/setup.bash

# 2. 创建实验功能包
cd ~/catkin_ws/src
catkin_create_pkg turtle_test rospy std_msgs geometry_msgs

步骤2:编写Python小乌龟控制节点

# 切入功能包、创建脚本文件夹
cd ~/catkin_ws/src/turtle_test
mkdir scripts && cd scripts
vim move_turtle.py

Python源码直接复制:

#!/usr/bin/env python3
import rospy
from geometry_msgs.msg import Twist

# 初始化ROS节点
rospy.init_node('move_turtle')
# 绑定小乌龟速度话题
pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)
# 设置程序运行频率
rate = rospy.Rate(10)

# 配置运动速度:前进+旋转画圆
msg = Twist()
msg.linear.x = 1.0    # X轴线速度 前进
msg.angular.z = 0.5   # Z轴角速度 旋转

# 循环发布速度指令
while not rospy.is_shutdown():
    pub.publish(msg)
    rate.sleep()

⚠️ 必执行:添加脚本执行权限

chmod +x move_turtle.py

步骤3:全局编译+激活环境

cd ~/catkin_ws
catkin_make
source devel/setup.bash

步骤4:四终端分工启动项目

终端1:启动ROS核心服务
roscore
终端2:启动小乌龟仿真窗口
rosrun turtlesim turtlesim_node
终端3:运行自定义控制脚本
rosrun turtle_test move_turtle.py

✅ 现象:小乌龟自动持续画圆运动

终端4:全部命令实操训练
1、节点查看命令
rosnode list
rosnode info /turtlesim
2、话题查看命令
rostopic list
rostopic info /turtle1/cmd_vel
rosmsg show geometry_msgs/Twist
3、终端手动控龟(不用代码)
# 匀速直行
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: {x: 2.0}, angular: {z: 0.0}"
# 原地旋转
rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear: {x: 0.0}, angular: {z: 1.0}"

4、获取乌龟实时坐标姿态
rostopic echo /turtle1/pose
rostopic hz /turtle1/pose

5、服务调用:新增/删除乌龟
# 生成第二只乌龟
rosservice call /spawn "x: 2.0,y: 2.0,theta: 0.0,name: 'turtle2'"
# 清空运动轨迹
rosservice call /clear
# 重置仿真窗口
rosservice call /reset

6、参数修改:更改画布背景色
rosparam set /turtlesim/background_r 255
rosparam set /turtlesim/background_g 255
rosparam set /turtlesim/background_b 255
rosservice call /clear

7、可视化通信拓扑图
rqt_graph

五、课堂标准演示流程(授课直接照搬)

  1. roscore 启动ROS核心

  2. rosrun turtlesim turtlesim_node 启动小乌龟仿真

  3. rosnode list / rosnode info 排查节点信息

  4. rostopic系列 查看话题通信机制

  5. rostopic pub 手动下发运动指令

  6. rosservice 调用服务新增乌龟、清屏

  7. rosparam 修改全局画布参数

  8. rqt_graph 图形化复盘通信逻辑

六、课程核心总结

  1. 工作空间:项目顶层目录,src存包、catkin_make编译、source激活环境

  2. 功能包:ROS最小功能模块,双配置文件缺一不可,Python脚本必须授权

  3. 四大核心通信:节点=程序、话题=持续通信、服务=单次交互、参数=全局配置

  4. 固定开发流水线:建工作空间→建功能包→写代码→编译→激活环境→启动节点

七、新手高频报错解决方案

  1. 报错:package not found:执行source devel/setup.bash激活环境

  2. 报错:Python脚本无法启动:执行chmod +x 授权脚本权限

  3. 报错:roscore端口占用:重启终端、关闭残留ROS进程即可


CSDN博客标签:

#ROS入门 #ROS零基础 #ROS命令 #turtlesim仿真 #机器人开发 #Ubuntu运维 #ROS教案

专栏更新:持续更新ROS全套课堂教案、小车URDF建模、底盘驱动、SLAM建图全套课程,一键订阅不迷路✅

代码转载自:https://pan.quark.cn/s/a4b39357ea24 在本项研究中,我们研究了如何运用8155微处理器扩展单元与74LS164串行到并行转换电路来操控八段数码管的显示。74LS164被视为一个核心部件,它使得串行数据能够转化为并行输出,这对于驱动数码管极为关键,因为数码管普遍需要并行数据输入来点亮不同的段。74LS164的功能机制在于接收串行输入的数据,并在每个时钟脉冲之后将其转化为并行输出。在该配置中,8155的PB0引脚被用来管理数据位的输入,而PB1则承担时钟信号的角色。这表明我们可以通过调控8155的这两个引脚来决定何时将数据传输至74LS164,以及何时执行位移操作。 在编程层面,我们需要开发一段代码来处理上述流程。在提供的代码示例中,`DAT164`标识数据位地址,`CLK164`指代时钟位地址。`LEDBuf`是一个用于存放待显示数字的缓冲存储区,而`Num`则用于保存待显示的数值。`DisplayLED`子程序负责将数据从缓冲区`LEDBuf`搬运到74LS164,并通过8155的PB0和PB1引脚来调控74LS164的输入与时钟。 在`DisplayLED`子程序的操作中,首先会关闭所有的八段数码管,然后逐位从缓冲区`LEDBuf`中读取数据,通过循环右移指令(`rlc`)进行数据位移,并将最低位送入74LS164。在每次数据传输完成后,会通过变换PB1的电平(交替高低电平)来生成时钟脉冲,使74LS164能够接收新的数据。这一过程会重复8次,确保所有8段数码管的段码都被精确设置。通过调整`OUTBIT`的值来选择特定的数码管进行显示。 另外,实验还包含了8155 I/O/RAM扩展单元的应用。8155芯片提供...
内容概要:本文系统研究了计及电动汽车充电站接入的配电网承载能力评估与优化问题,提出了一套完整的基于Matlab代码实现的双层评价模型。通过构建涵盖系统安全性、经济性、电能质量及设备利用率等多维度的指标体系,采用熵权法进行客观权重计算,并结合模糊综合评价法实现承载能力的量化评分,全面评估不同渗透率下电动汽车接入对配电网的影响。研究通过算例仿真深入分析了各项指标的变化规律与灵敏度特性,验证了所提模型在承载能力动态评估中的科学性与实用性,为高比例电动汽车接入背景下的配电网规划、扩容改造与运行调度提供了有力的决策支持和技术路径。; 适合人群:具备电力系统分析基础、熟悉Matlab编程工具,从事新能源并网、智能配电网、电动汽车与电网互动(V2G)、电网承载力评估等相关领域的科研人员、工程技术人员及研究生。; 使用场景及目标:①科学评估大规模电动汽车充电负荷对配电网安全稳定运行的冲击及其承载极限;②优化充电站选址与接入策略以提升电网接纳能力;③为配电网的扩容规划、无功优化与调度运行提供量化的分析依据;④支撑相关科研项目、学位论文的建模、仿真与实证分析工作。; 阅读建议:建议结合文中提供的Matlab代码与详细的仿真算例进行复现,重点掌握熵权法确定权重与模糊综合评价的实现逻辑,深入理解各评估指标的物理含义及其在不同场景下的灵敏度表现,并可尝试将其拓展应用于其他类型的分布式电源接入评估或采用不同的优化算法进行模型改进。
打开链接下载源码: https://pan.quark.cn/s/a4b39357ea24 UDP(用户数据报协议)与TCP(传输控制协议)构成了互联网协议体系中的两大核心传输机制,它们在计算机网络通信过程中发挥着核心作用。本文将系统阐述这两种协议的特性以及相关的端口检测手段。 UDP是一种非连接型且不可信赖的传输协议。该协议无需建立连接即可传输数据,因此具备低时延与高效率的优势,常应用于视频会议、在线游戏等即时性应用场景。然而,由于缺乏可靠性保障,UDP无法确保数据包的顺序性、完整性及无重复性,可能引发数据遗失或错乱的情况。 另一方面,TCP是一种基于连接且可靠的传输协议。该协议在数据传输前必须先建立连接,从而确保数据能够准确且有序地抵达接收端,适用于文件传输、网页浏览等对稳定性要求较高的应用场景。尽管如此,这种可靠性也导致了较高的时延和资源消耗。 端口在网络通信领域中占据着关键地位,每个端口号均与特定的服务或应用程序相对应。端口号的取值范围介于0至65535之间,其中0-1023为知名端口,一般由系统进行预留使用;1024-49151为注册端口,可供应用程序选用;49152-65535为动态或私有端口。实施端口检测的主要目的是确认特定端口是否处于开放状态、是否已被占用,或是网络服务是否正常运作。 “UDP&TCP测试程序.exe”或许是一款用于检测UDP和TCP端口状态的实用工具,它能够协助用户评估网络连接的性能状况及潜在问题。此类工具通常具备以下几项功能: 1. 扫描:对指定的IP地址或IP地址段执行端口扫描,识别已开启的服务及其对应的端口。 2. 发送/接收数据:向特定端口发送UDP或TCP数据包,并记录接收到的响应,以此来验证端口的可用程度。 3. 连接测...
源码链接: https://pan.quark.cn/s/a4b39357ea24 在信息技术行业中,特别是在企业信息管理系统的应用中,常常需要应对多种数据整合与字段提取的挑战。本案例的核心在于利用Groovy脚本语言来达成一个具体目标:从明细数据表中提取相关字段值,并将其更新至主数据表对应的字段位置。此类操作在数据同步、报表制作以及业务流程自动化的多个场景中十分普遍。Groovy作为一种动态且适应性强的Java平台语言,具备精简的语法和卓越的元编程功能。在企业级应用系统如“致远”中,Groovy通常被用于开发满足特定业务需求的定制化逻辑。在此情境下,可能会涉及以下关键知识点: 1. **Groovy脚本编写**:Groovy使开发者能够以更贴近日常语言的方式编写代码,从而减少不必要的语法复杂性。在自定义函数中,我们可以借助Groovy的面向对象特性,设立类和函数来处理明细表与主表的数据交换。 2. **数据访问**:Groovy能够便捷地与数据库建立连接,通过JDBC API或ORM框架(例如Hibernate)来查询明细表和主表。这可能包含SQL查询语句的编写,以及结果集的解析。 3. **字段映射**:为了将明细表中的字段值与主表对应,必须明确字段间的关联关系。这通常通过配置或编程实现,比如构建一个映射列表,以字段名称作为索引,随后依据索引值执行赋值操作。 4. **业务逻辑**:在描述中提及了依据表单字段进行计算,这可能包含条件筛选、循环处理、数学运算等复杂逻辑。Groovy提供了多样的控制流语句,可以方便地实现这些计算需求。 5. **动态更新主表**:计算所得的结果需要展示在主表的字段上,这涉及到对数据库的修改操作。Groovy能够调用更新指令,...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值