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

ROS2 入门实战 —— 从环境搭建到第一次控制小乌龟(一)

第1天:ROS2入门实战——从环境搭建到第一次控制小乌龟

作为一名搞了多年开发的工程师,ROS环境搭建时的各种“玄学报错”。刚接触ROS2就卡在第一步,要么虚拟机配置不对,要么依赖装不全,最后硬生生把兴趣磨没了。今天这篇就带大家从零开始,用最稳的流程搭好ROS2开发环境,再通过控制小乌龟的实战,直观感受ROS2的核心逻辑——全程避开我踩过的坑。
在这里插入图片描述

文章目录

  • 第1天:ROS2入门实战——从环境搭建到第一次控制小乌龟
    • 上午:把基础环境搭“稳”——Ubuntu+ROS2
      • 一、先装Ubuntu 22.04:选对工具少走弯路
        • 1. 准备工具:免费且稳定的组合
        • 2. 装虚拟机:这几个设置别错
        • 3. 装完先优化:解决“看着难受”的问题
      • 二、装ROS2 Humble:用“一键脚本”避开90%的坑
        • 1. 一键安装:复制粘贴就行
        • 2. 验证安装:别等报错了才发现问题
      • 三、必学的Linux命令:ROS开发的“基本功”
        • 1. 文件操作:管理你的代码
        • 2. 系统管理:装软件、更依赖
        • 3. rosdep配置:解决依赖的“神器”
    • 下午:从“理论”到“动手”——理解ROS2核心逻辑
      • 一、先搞懂ROS2的“三大件”:节点、功能包、工作空间
        • 1. 节点(Node):最小的“功能单元”
        • 2. 功能包(Package):装节点代码的“文件夹”
        • 3. 工作空间(Workspace):放多个功能包的“大仓库”
      • 二、ROS2比ROS1好在哪?新手不用深学,但要知道
      • 三、实战:控制小乌龟——感受ROS2的“通信”
        • 1. 启动节点,看节点列表
        • 2. 看节点详情,知道它在和谁通信
        • 3. 启动键盘控制节点,让小乌龟动起来
        • 4. 用rqt_graph看通信关系:直观理解“发布-订阅”
        • 5. 停止节点,清理环境

上午:把基础环境搭“稳”——Ubuntu+ROS2

一、先装Ubuntu 22.04:选对工具少走弯路

ROS2 Humble官方推荐的系统是Ubuntu 22.04 LTS(长期支持版),这是经过无数开发者验证的“黄金搭配”,别贪新用更高版本,也别用旧版本,否则后续装依赖时会遇到各种兼容性问题。

1. 准备工具:免费且稳定的组合
  • 虚拟机软件:优先选VMware Workstation Player(非商业用途免费),官网直接下Windows版就行。别用VirtualBox,不是说它不好,而是ROS2里有些硬件仿真功能(比如Gazebo)在VMware里更稳定,我当年用VirtualBox跑仿真时总卡闪退。
  • Ubuntu镜像:一定要下桌面版(desktop),别下服务器版(server)——新手没图形界面根本玩不转。国内直接用中科大镜像源(速度比官网快10倍),找ubuntu-22.04-desktop-amd64.iso这个文件,名字里带“amd64”的才是64位,现在没人用32位系统了。
  • 可选但建议做:校验镜像完整性。下载页面里有个SHA256SUMS文件,下下来后在Windows命令行里执行sha256sum 你的镜像路径,对比输出的哈希值和文件里的一致,说明镜像没损坏——我当年就是下了个损坏的镜像,装到一半卡死,排查了两小时才发现问题。
2. 装虚拟机:这几个设置别错

很多新手装Ubuntu时,要么磁盘给太小,要么分区选错,后续编译大项目时直接报错。按我这个步骤来:

  1. 打开VMware,点“创建新虚拟机”,选“安装程序光盘映像文件”,找到你下的Ubuntu镜像,系统会自动识别“Ubuntu 64位”——如果没识别出来,说明你下的镜像不对,别硬装。
  2. 填用户信息时,“用户名”建议设成ros2(简单好记,后续输命令少出错),密码设个简单的(比如123456),虚拟机里不用搞太复杂的密码,不然每次sudo都要输半天。
  3. 关键设置:虚拟机名称叫Ubuntu22.04-ROS2(一眼知道是干啥的),安装位置选非系统盘(比如D盘),磁盘大小给80GB以上,再选“将虚拟磁盘拆分成多个文件”——这样后续想把虚拟机拷贝到其他电脑也方便。
  4. 启动后按提示安装,“安装类型”直接选“清除整个磁盘并安装Ubuntu”(虚拟机里这么选很安全,不会影响你电脑本身的系统),时区选“上海”,等着就行,大概20分钟装完。
3. 装完先优化:解决“看着难受”的问题
  • 调分辨率:刚装完的Ubuntu可能分辨率很低,字体模糊。在桌面空白处右击,选“显示设置”,把分辨率调到1920×1080(根据你电脑屏幕来),应用后瞬间清爽。
  • 装VMware Tools:这步能实现“主机和虚拟机之间拖文件”“共享文件夹”,太实用了。点虚拟机菜单栏的“Player”→“管理”→“安装VMware Tools”,Ubuntu里会弹出一个CD驱动器,把里面的VMwareTools-xxx.tar.gz复制到桌面,解压后打开终端,cd到解压目录,执行sudo ./vmware-install.pl,一路按回车就行——中间问“是否接受”就输“yes”,别犹豫。

二、装ROS2 Humble:用“一键脚本”避开90%的坑

手动装ROS2要配源、装依赖、初始化rosdep,步骤多且容易错(比如rosdep更新超时)。我现在装环境都用小鱼的一键脚本,这是国内ROS社区最火的工具,把复杂步骤全自动化了,新手闭眼用就行。

1. 一键安装:复制粘贴就行

打开终端(快捷键Ctrl+Alt+T,记熟这个!后续天天用),粘贴这条命令:

wget http://fishros.com/install -O fishros && . fishros

输完按回车,会提示你输密码(就是你装Ubuntu时设的密码),输的时候终端不会显示字符,正常输完回车就行。

接下来按提示选:

  • 先输“1”,选“一键安装ROS”;
  • 脚本会问“是否更换系统源”,直接输“y”——国内源比国外源快10倍,不然装依赖能卡一小时;
  • 选ROS2版本时,找“Humble”对应的编号(脚本会列出来,通常是2或3),再选“桌面版”(包含RVIZ2、Gazebo这些可视化工具,新手必须装)。

然后就等着,网络好的话15分钟搞定,期间不用管——我当年手动装时,光rosdep更新就卡了三次,用脚本一次过。

2. 验证安装:别等报错了才发现问题

装完先别急着关终端,执行这条命令:

source /opt/ros/humble/setup.bash

这行命令的作用是“加载ROS2的环境变量”——ROS2的命令(比如ros2)只有加载了环境变量才能用。然后输ros2,如果显示一堆命令提示(比如ros2 noderos2 topic),说明装成功了。

关键一步:把环境变量设为自动加载。不然每次打开新终端都要输一遍source,太麻烦。执行:

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
source ~/.bashrc

这样下次打开终端,ROS2环境就自动加载了——我当年忘了这步,第二天打开终端输ros2没反应,还以为环境坏了,白慌了半小时。

三、必学的Linux命令:ROS开发的“基本功”

ROS2的所有操作都要在Linux终端里做,这几个命令是每天都要用的,记熟了比啥都强。

1. 文件操作:管理你的代码
  • ls:看当前目录下有啥文件/文件夹。ls -l能看详细信息(比如文件大小、权限),ls -a能看到隐藏文件(比如.bashrc);
  • cd:切换目录。cd ~直接回到你的主目录(比如/home/ros2),cd ..回到上一级目录,cd 文件夹名进指定文件夹——比如你要进src目录,就输cd src
  • mkdir:创建文件夹。mkdir test建一个叫test的文件夹,mkdir -p a/b/c能一次性建多层文件夹(比如a里面有b,b里面有c),不用一层一层建;
  • rm:删除。rm 文件名删文件,rm -rf 文件夹名删文件夹(注意!这个命令删了就找不回来,别乱输,我当年误删过整个工作空间,哭了)。
2. 系统管理:装软件、更依赖
  • sudo:获取管理员权限。比如sudo apt update是更新软件源列表,sudo apt install 软件名是装软件(比如装git就输sudo apt install git);
  • pwd:看当前在哪个目录。有时候cd来cd去忘了位置,输pwd就清楚了;
  • mv/cp:移动和复制。mv 旧文件名 新文件名是重命名,cp 文件名 目标目录是复制文件。
3. rosdep配置:解决依赖的“神器”

ROS2里每个功能包都有依赖(比如A包要用到B包的函数),rosdep能自动装这些依赖。小鱼脚本里自带了rosdepc(国内版rosdep,更新快),配置很简单:
再执行一次小鱼脚本(wget http://fishros.com/install -O fishros && . fishros),选“3”(一键配置rosdep),等着脚本跑完,输rosdepc update,显示“update successful”就成了。后续你自己写功能包时,用rosdepc install --from-paths src --ignore-src -r -y就能自动装所有依赖,不用手动一个个找。

下午:从“理论”到“动手”——理解ROS2核心逻辑

上午搭好了环境,下午咱们直接动手——通过控制小乌龟的实战,把“节点”“功能包”这些抽象概念变具体。ROS2的核心不是记命令,而是理解“怎么让不同模块通信”,小乌龟例子就是最直观的入门案例。

一、先搞懂ROS2的“三大件”:节点、功能包、工作空间

很多新手一上来就记命令,却不知道这些命令是在操作啥。其实ROS2的代码组织逻辑很简单,就三个核心概念:

1. 节点(Node):最小的“功能单元”

你可以把节点理解成“一个专门干一件事的小程序”。比如控制小乌龟时,有两个节点:

  • turtlesim_node:负责显示小乌龟和仿真环境(相当于“显示屏”);
  • turtle_teleop_key:负责把你按的键盘方向键,转换成控制小乌龟的指令(相当于“遥控器”)。

为啥要分节点?比如你做一个扫地机器人,总不能把“激光雷达处理”“路径规划”“电机控制”全写在一个程序里——万一电机控制模块出问题,整个机器人都得停。分节点后,某个节点坏了,其他节点还能正常工作,排查问题也方便。

2. 功能包(Package):装节点代码的“文件夹”

节点的代码不能乱存,得放在功能包里。一个功能包就像一个“工具箱”,里面除了节点源码,还有编译配置(CMakeLists.txt)、依赖声明(package.xml)这些文件。比如你写一个“激光雷达数据处理”节点,就把相关代码都放进一个叫lidar_process的功能包里。

功能包分两种:ament_cmake(装C++代码)和ament_python(装Python代码),新手先记着这个区别就行,后续写代码时会用到。

3. 工作空间(Workspace):放多个功能包的“大仓库”

一个机器人项目可能有十几个功能包(比如“底盘控制”“导航”“语音交互”),这些功能包要放在一个统一的目录里,这个目录就是工作空间。标准的工作空间结构有四个文件夹:

  • src:放所有功能包的源码(核心目录,你写的代码都在这);
  • build:编译时生成的中间文件(不用管,编译完可以删);
  • install:编译后的可执行文件(比如节点的运行程序就在这);
  • log:运行日志(出问题时查日志找原因)。

创建工作空间的命令很固定:mkdir -p 工作空间名/src,比如mkdir -p my_ws/src,后面加-p是为了一次性创建my_ws和里面的src,不用分两次建。

二、ROS2比ROS1好在哪?新手不用深学,但要知道

我当年从ROS1转到ROS2时,最直观的感受就是“稳了”。ROS2解决了ROS1的几个致命问题,新手不用深究技术细节,但要知道这些优势,后续遇到问题才不慌:

  • 没有“主节点”了:ROS1有个“主节点(Master)”,所有节点通信都要经过它,一旦Master挂了,整个机器人就瘫了——我当年做室外测试时,就因为Master突然崩溃,机器人在原地打转,差点撞墙。ROS2取消了Master,节点之间直接通信(基于DDS中间件),就算某个节点坏了,其他节点该干啥干啥。
  • 跨平台了:ROS1只能在Linux上跑,ROS2能在Windows、macOS甚至嵌入式系统(比如机器人的单片机)上跑。我去年给一个客户做的项目,就是在Windows上跑ROS2节点,对接他们的视觉软件,要是搁ROS1根本做不了。
  • 编译工具更灵活:ROS1用catkin_make,ROS2用colcon build。比如你工作空间里既有C++功能包又有Python功能包,colcon build能一次编译完,不用分开处理。

三、实战:控制小乌龟——感受ROS2的“通信”

光说不练假把式,咱们现在就启动两个节点,让它们通信起来,控制小乌龟动起来。

1. 启动节点,看节点列表
  • 打开第一个终端,输ros2 run turtlesim turtlesim_node——这会启动小乌龟的仿真节点,弹出一个蓝色窗口,里面有只小乌龟。别关这个终端,一关节点就停了。
  • 再打开第二个终端,输ros2 node list——这命令能列出当前运行的所有节点,你会看到输出/turtlesim,这就是刚才启动的仿真节点的名字。
2. 看节点详情,知道它在和谁通信

ros2 node info /turtlesim,会看到一堆信息,比如“订阅的话题”“发布的话题”“提供的服务”。简单说:

  • 这个节点订阅了/turtle1/cmd_vel话题——相当于它在“听”这个话题的消息,只要有消息发过来,就按消息内容控制小乌龟动;
  • 它还发布了/turtle1/pose话题——相当于它在“说”小乌龟的位置信息(比如x坐标、y坐标),其他节点想知道小乌龟在哪,就“听”这个话题。
3. 启动键盘控制节点,让小乌龟动起来
  • 打开第三个终端,输ros2 run turtlesim turtle_teleop_key——这是键盘控制节点,终端里会提示“Use arrow keys to move the turtle”。
  • 现在把光标聚焦到这个终端(一定要聚焦,不然按键盘没反应),按方向键:上键前进,下键后退,左右键转弯——你会看到蓝色窗口里的小乌龟跟着动!
4. 用rqt_graph看通信关系:直观理解“发布-订阅”

这步是关键,能让你看清两个节点是怎么通信的。

  • 打开第四个终端,输rqt_graph——如果提示“命令不存在”,就先装一下:sudo apt install ros-humble-rqt
  • 弹出的窗口里,你会看到两个节点:/teleop_turtle(键盘控制节点)和/turtlesim(仿真节点),它们之间连了一条线,线的名字是/turtle1/cmd_vel
  • 这就是ROS2最核心的“发布-订阅”模式:键盘节点是“发布者”,往/turtle1/cmd_vel话题上发控制指令;仿真节点是“订阅者”,从这个话题上收指令,然后执行——就像两个人用对讲机聊天,“话题”就是对讲机的频道。
5. 停止节点,清理环境

想停节点时,在对应的终端里按Ctrl+C就行。比如停仿真节点,就回到第一个终端按Ctrl+C;停键盘节点,就回到第三个终端按Ctrl+C。最后输ros2 node list,确认没有节点在运行了(没输出就是停干净了)。

看展示:
在这里插入图片描述

http://www.dtcms.com/a/356124.html

相关文章:

  • 【电子设计自动化(EDA)】Altium Designer25——电子设计自动化(EDA)软件版保姆级下载安装详细图文教程(附安装包)
  • linux网络编程-----TCP服务端并发模型(epoll)
  • [数组]27.移除元素
  • SQLServer日志文件损坏恢复办法
  • day13(练习题)
  • 卷积核尺寸如何计算?
  • Containerd卸载指南
  • shell脚本编程规范与变量
  • Shell 入门
  • LeetCode刷题记录----35.搜索插入位置(Easy)
  • 117、【OS】【Nuttx】【周边】效果呈现方案解析:while 循环处理(下)
  • 虚拟机逃逸攻防演练技术文章大纲
  • 八个按键一一对应八个输出
  • C语言————斐波那契数列(例题1)
  • BoardSim仿真
  • DoIP路由激活报文
  • Shell脚本(2)
  • 洛谷p1028数的计算 详解
  • 【智能体】零代码学习 Coze 智能体(1)
  • 人工智能基础概念
  • java通过redis简单实现分布式锁
  • 【MySQL数据库】存储引擎 学习记录
  • 深度学习进阶
  • B站 XMCVE Pwn入门课程学习笔记(8)
  • Mybatis中缓存机制的理解以及优缺点
  • 详解 外部负载均衡器 → Ingress Controller Pod 这个过程
  • LCEDA电气规则
  • HTTPS的底层是怎么做的,使得数据更安全
  • 【python】python进阶——with关键字
  • 一个格式化方法一个打印语句完成一个基本日历展示,完成完美『终端呈现』(迭代升级)(彩色·Python)