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

【ROS2】MOMO的鱼香ROS2(二)Ubuntu系统精讲——从命令行操作到软件管理实战

1. 从“黑框框”到“老朋友”为什么命令行是ROS2开发的基石大家好我是MOMO。上一期我们聊了聊ROS2的入门算是开了个头。今天咱们得沉下心来好好打磨一下我们最重要的“兵器”——Ubuntu系统特别是那个让很多新手朋友望而生畏的“黑框框”终端命令行。我刚开始接触Linux和机器人开发的时候也觉得这命令行太不友好了满屏幕的字母没有图标没有按钮感觉像在演黑客电影。但用久了你会发现它才是最高效、最强大的工具尤其是在ROS2开发里。你想啊机器人系统动不动就要编译代码、安装依赖、启动节点、查看日志如果全靠鼠标点来点去那效率可就太低了。命令行就像给你的电脑下“圣旨”一句话它就得乖乖执行精准又快速。所以这一篇咱们的目标不是死记硬背命令而是把命令行变成你的“老朋友”。我会结合我这些年踩过的坑、总结的经验带你从最基础的“走路”开始到能“小跑”着管理软件、处理文件最终为后续畅快地进行ROS2开发铺平道路。别担心咱们一步步来我保证等你跟着操作完你会爱上这种指哪打哪的控制感。2. 命令行生存指南从“迷路”到“认路”刚开始用命令行最容易遇到的问题就是“我在哪”和“我要的东西在哪”。这种感觉就像被蒙上眼睛扔进了一个巨大的图书馆。别慌几个核心命令就能帮你重建方向感。2.1 认路与导航pwd,ls,cd打开终端快捷键CtrlAltT你首先会看到一行类似momoubuntu:~$的提示符。这里的~符号代表你的家目录也就是你的个人地盘相当于Windows里的“用户”文件夹。pwd想知道自己此刻的精确坐标输入pwdPrint Working Directory它会告诉你绝对路径比如/home/momo。这个命令我每次进入一个陌生目录都会先用一下确认位置避免操作失误。ls认清了位置下一步就是看看周围有什么。lsList就是你的眼睛。直接输入ls会列出当前目录下所有可见的文件和文件夹。但这样看信息太少了我们得加点儿“参数”让它看得更清楚。ls -l以长列表格式显示能看到文件权限、所有者、大小、修改时间等详细信息。这是最常用的组合之一。ls -a显示所有文件包括那些以点.开头的隐藏文件比如.bashrc这种配置文件。在Linux里隐藏文件通常很重要。ls -la我个人的最爱把上面两个合起来既看详情又看全部。试试在终端里分别输入这几个命令感受一下输出的不同。cd现在我们要移动了。cdChange Directory是导航命令。cd 文件夹名就能进入那个文件夹。有几个特殊符号需要记住cd ..返回上一级目录两个点。cd ~或直接cd立刻回到你的家目录。cd -在两个最近切换过的目录之间快速跳转非常方便。举个例子假设我想看看系统根目录下有什么我会依次输入pwd # 先确认我在家目录 /home/momo cd / # 跳转到根目录 ls -l # 详细查看根目录内容 cd - # 嗖的一下又回到刚才的 /home/momo多练习几次这种在目录间穿梭的感觉就来了。2.2 创建、搬家与清理mkdir,cp,mv,rm熟悉了环境我们就要开始改造它了。这些命令让你能创建结构、复制备份、移动整理和删除废弃文件。mkdir创建新文件夹。mkdir ros2_workspace就在当前目录创建了一个名为ros2_workspace的文件夹。如果想创建一串嵌套的目录比如src/my_pkg而src目录不存在直接mkdir src/my_pkg会报错。这时就需要-p参数mkdir -p src/my_pkg它会自动创建所有不存在的父目录。cp复制文件或目录。最基本的用法是cp 源文件 目标位置。比如cp important.txt ~/backup/就把文件备份到家目录的backup文件夹里。复制目录需要加-r递归参数cp -r my_project/ backup/。强烈建议在重要操作前先ls确认一下目标位置复制错了很麻烦。mv这个命令有两个功能一是移动二是重命名。Linux里“重命名”其实就是“移动”到同一个目录下的新名字。移动mv hello.txt ~/Documents/把文件移到文档文件夹。重命名mv old_name.txt new_name.txt原地改名。 它同样可以搭配-i参数交互模式在覆盖已有文件前询问你是个安全好习惯。rm最需要谨慎的命令删除。它默认不会进回收站删了就很难找回。rm file.txt删除文件。rm -r directory/删除目录及其内部所有内容-r代表递归。rm -rf directory/在-r基础上加-f强制不进行任何确认提示直接删除。这个命令威力巨大请务必在确认路径无误后使用。一个经典的危险操作是sudo rm -rf /千万别试这会尝试删除根目录下的所有文件导致系统崩溃。我的经验是删除前先用ls或cd到目标目录看一眼或者先rm -ri交互式递归删除一个个确认。3. 软件管理三大法宝apt,dpkg与源码编译玩转Ubuntu或者说玩转ROS2核心技能之一就是装软件。ROS2本身、它的各种功能包、开发工具全都要通过软件管理来安装。主流方法就三种各有各的适用场景。3.1 首选利器apt包管理器这是Ubuntu上最常用、最省心的安装方式。你可以把它想象成一个高度智能的“应用商店后台”。apt会从Ubuntu官方和添加的软件源仓库里自动解决软件依赖关系比如装A需要B和C它会一起给你装上。基础操作流程更新软件源列表这步很重要相当于刷新应用商店的货架获取最新的软件信息。命令是sudo apt update。sudo是获取管理员权限因为安装软件涉及系统目录。搜索软件不确定软件包确切名字用apt search 关键词。比如apt search ros-humble会列出所有Humble版本ROS2相关的包。安装软件sudo apt install 软件包名。例如安装一个经典的终端多路复用器tmuxsudo apt install tmux。加上-y参数可以自动确认安装提示适合写在脚本里sudo apt install tmux -y。升级软件sudo apt upgrade升级所有可升级的软件包。如果只想升级某一个用sudo apt upgrade 软件包名。卸载软件sudo apt remove 软件包名移除软件包但保留配置文件。sudo apt purge 软件包名移除软件包并删除配置文件清理更彻底。sudo apt autoremove自动删除那些当初作为依赖被安装但现在已不被任何程序需要的“孤儿”包定期运行一下可以保持系统清爽。实战场景安装ROS2。通常ROS2的安装就是通过添加官方软件源然后用apt来完成的。例如设置好源和密钥后安装ROS2基础版可能就是一行命令sudo apt install ros-humble-desktop。apt会处理好所有复杂的依赖这正是它的强大之处。3.2 处理离线包dpkg有时候你会从网上下载到.deb格式的软件包尤其是某些商业软件或特定版本的驱动这时apt就无能为力了需要用到dpkg。dpkg是一个底层的包管理工具apt其实是在它的基础上增加了依赖解决和远程仓库功能。使用方法很简单sudo dpkg -i 下载的包名.deb。比如sudo dpkg -i google-chrome-stable_current_amd64.deb。但是要注意dpkg不解决依赖。如果这个.deb包需要一些你系统里没有的库安装就会报错。通常的解决方法是先运行sudo dpkg -i xxx.deb如果报依赖错误再运行sudo apt install -f或sudo apt --fix-broken install让apt来尝试自动修复和安装缺失的依赖。这是一个dpkg和apt联合作战的经典流程。3.3 高手之路源码编译安装当你需要最新版的软件软件源里的版本太旧或者需要自定义软件的编译选项时就需要从源代码编译安装。ROS2的很多高级功能包或你自己写的包最终也是要走编译这一步的。通用三部曲配置configure-编译make-安装make install。准备编译环境首先得安装基本的编译工具链sudo apt install build-essential。这个包包含了gcc,g,make等核心工具。获取源码通常是下载一个压缩包.tar.gz或.zip用tar -xzf 文件名.tar.gz解压然后cd进入解压后的目录。配置运行./configure脚本。这个脚本会检查你的系统环境比如库是否齐全并生成适合你系统的编译规则Makefile。你可以通过参数定制比如./configure --prefix/usr/local/mysoftware来指定软件安装路径默认是/usr/local。编译运行make。这是最耗时的一步电脑会开始把源代码变成可执行文件。你可以用make -j4来启用4个线程并行编译加快速度数字根据你的CPU核心数调整。安装运行sudo make install。这会把编译好的文件复制到系统目录比如你configure时指定的prefix路径。因为要写入/usr/local这类系统目录所以需要sudo权限。一个ROS2相关的例子假设你要安装一个ROS2功能包但它不在官方源里只提供了源码。你克隆代码到你的ROS2工作空间的src目录后回到工作空间根目录执行的colcon build命令其本质就是自动化地执行了类似make的编译过程。理解了这个手动过程你对ROS2的编译系统会有更深的认识。4. 权限管理理解“sudo”与文件权限在命令行里你可能会经常遇到“Permission denied”权限被拒绝的报错。这是因为Linux是一个多用户系统严格区分文件的所有者和权限以保证系统安全。4.1 临时获取超级权限sudo普通用户不能修改系统关键文件或安装软件。sudoSuper User DO命令允许被授权的用户临时以超级管理员root的身份执行命令。输入sudo 某个命令后系统会提示你输入当前用户自己的密码注意不是root密码验证通过后这条命令就会以最高权限运行。使用习惯只在必要时使用sudo。不要图省事一直待在root用户下操作误操作的风险很大。安装软件sudo apt install、修改系统配置等操作才需要它。4.2 理解文件权限ls -l与chmod用ls -l看一个文件你会看到类似这样的信息-rw-r--r-- 1 momo momo 1234 Sep 1 10:00 myfile.txt。我们关注前面那串字符-rw-r--r--。这串字符可以分为四部分第一个字符-表示是普通文件d表示目录l表示链接文件。后面九位每三位一组分别代表文件所有者u、所属用户组g、其他用户o的权限。每组的三位依次是读r、写w、执行x权限。有该权限则显示字母没有则显示-。所以-rw-r--r--的意思是这是一个文件所有者momo可以读r写w但不能执行x因为没有x同组用户和其他用户都只能读r。修改权限chmod如果你想让自己写的脚本可以运行就需要给它加上执行权限。命令是chmodChange Mode。数字法常用chmod 755 script.sh。这里的755是八进制数分别对应 u/g/o 的权限。7二进制111代表rwx5二进制101代表r-x。所以755就是 urwx, grx, orx。符号法chmod ux script.sh给所有者增加执行权限。chmod go-w file.txt去掉组用户和其他用户的写权限。在ROS2开发中你写的Python节点或Shell脚本在运行前通常都需要chmod x 文件名来赋予执行权限否则系统会拒绝运行它。5. 效率提升技巧与ROS2环境下的实战掌握了基本生存技能我们来点能提升效率的“魔法”。5.1 终端技巧补全、历史与通配符Tab键补全这是命令行最好的朋友。输入命令或路径的前几个字母按一下Tab系统会自动补全。如果按一下没反应说明有多个选项连按两下Tab会列出所有可能的选项。这能极大减少打字和拼写错误。历史命令按键盘的上箭头可以调出刚才执行过的命令下箭头回来。用history命令可以查看所有历史命令列表可以用!编号来快速执行历史中的某条命令。通配符*代表任意多个字符?代表一个字符。比如rm *.log删除所有日志文件cp project_2024???.txt backup/复制特定模式的文件。5.2 ROS2开发中的典型命令行工作流假设我们现在要开始一个新的ROS2项目结合今天学的命令流程可能是这样的创建工作空间结构mkdir -p ~/ros2_ws/src # 一次性创建嵌套目录 cd ~/ros2_ws # 进入工作空间根目录 pwd # 确认一下路径在src里创建功能包这里用ROS2命令但本质是创建文件夹和文件cd src ros2 pkg create my_robot --build-type ament_cmake # 这会生成一个包目录 ls -la # 查看创建好的包目录结构安装项目依赖编辑了包的配置文件后需要安装缺失的依赖。cd ~/ros2_ws # 回到工作空间根目录 rosdep install -i --from-path src --rosdistro humble -y # rosdep会调用apt来安装系统依赖编译工作空间colcon build # 开始编译这本质上是一个复杂的make过程 # 编译后会在工作空间生成install目录里面就是安装好的可执行文件和库运行与调试source install/setup.bash # “激活”当前工作空间的环境 ros2 run my_robot my_node # 运行你的节点 # 如果想查看节点打印的信息你可能需要打开另一个终端用ros2 topic echo等命令看整个ROS2的开发流程都离不开这些基础的Ubuntu命令行操作。文件操作、权限管理、软件安装通过apt或源码编译贯穿始终。当你对这些命令烂熟于心ROS2的学习曲线就会平坦很多。命令行不是洪水猛兽它是你控制机器人系统的缰绳。多练多试遇到错误别怕仔细读终端给出的提示信息那里面通常就藏着解决方案。

相关文章:

【ROS2】MOMO的鱼香ROS2(二)Ubuntu系统精讲——从命令行操作到软件管理实战

1. 从“黑框框”到“老朋友”:为什么命令行是ROS2开发的基石 大家好,我是MOMO。上一期我们聊了聊ROS2的入门,算是开了个头。今天,咱们得沉下心来,好好打磨一下我们最重要的“兵器”——Ubuntu系统,特别是那…...

Qwen3.5-35B-AWQ-4bit图片问答效果对比:单图多问 vs 换图重问的上下文管理实测

Qwen3.5-35B-AWQ-4bit图片问答效果对比:单图多问 vs 换图重问的上下文管理实测 你是不是也遇到过这样的困惑:用AI模型分析图片时,上传一张图,问了几个问题,然后换一张新图再问,结果AI的回答好像还停留在上…...

Llama-3.2V-11B-cot效果对比:11B参数量下推理深度 vs 7B/13B同类模型

Llama-3.2V-11B-cot效果对比:11B参数量下推理深度 vs 7B/13B同类模型 在视觉语言模型(VLM)的赛道上,参数量常常被看作是衡量模型能力的首要指标。但真的是参数越大,效果就越好吗?今天,我们就来…...

衡山派开发板MPU6050六轴传感器驱动移植与数据读取实战

衡山派开发板MPU6050六轴传感器驱动移植与数据读取实战 最近在衡山派开发板上做一个小型姿态检测项目,用到了MPU6050这个六轴传感器。很多刚开始接触嵌入式开发的朋友,一看到I2C通信、寄存器配置这些概念就有点发怵。其实,只要跟着步骤一步步…...

700W双相交错同步Buck电源设计实战

1. 项目概述本项目是一款面向中功率应用场景的12V桌面电源模块,设计目标为在宽输入电压范围内提供高稳定性、高效率、大电流的12V直流输出。系统标称输入电压范围为15V–60V(实际验证至48V稳定工作,60V上电后失效),额定…...

立创开源LED风扇改造:基于qinzr 3D裸眼风扇的PCB转动导电与FPC扇叶集成方案

立创开源LED风扇改造:用PCB转动导电与FPC扇叶,打造一体化显示风扇 最近在立创开源平台上看到了qinzr大佬的3D裸眼风扇项目,觉得特别酷。但我在想,能不能让这个风扇在显示酷炫图案的同时,还能真的扇风呢?或…...

Dataset - DeepFashion:从数据构建到时尚AI应用实战

1. 从零开始:认识DeepFashion,你的时尚AI“弹药库” 如果你对用AI做点跟时尚相关的事情感兴趣,比如让机器自动识别一件衣服是“圆领T恤”还是“高腰阔腿裤”,或者想做一个能根据用户上传的图片推荐相似款式的购物助手,…...

VS2022与Intel oneAPI Fortran编译器(ifx)的CMake项目实战指南

1. 环境准备:搭建你的Fortran开发基石 想在Windows上用Visual Studio 2022写Fortran,听起来是不是有点“跨界”?别担心,我刚开始也觉得这事儿挺玄乎,毕竟VS是C的“主场”。但实测下来,用Intel oneAPI的ifx编…...

基于树莓派与Home Assistant的跨平台智能家居系统搭建指南

1. 为什么你需要一个跨平台的智能家居大脑? 你是不是也和我一样,手机里装满了各种智能家居的APP?米家、涂鸦、易微联、HomeKit……每次想开个灯、看下温度,都得先想想这个设备在哪个APP里。更别提那些自己动手用树莓派、ESP8266做…...

【实战指南】8D报告全流程解析:从问题识别到标准化落地

1. 8D报告:不只是“填表”,而是解决问题的“作战地图” 如果你在制造业或者涉及产品研发、质量管理的领域工作,大概率听说过“8D报告”。很多朋友一听到这个词,第一反应可能就是:“哦,就是客户投诉了要填的…...

Phi-3 Forest Lab作品分享:教育者用森林终端生成分层习题(基础→拓展→挑战)及评分标准

Phi-3 Forest Lab作品分享:教育者用森林终端生成分层习题(基础→拓展→挑战)及评分标准 1. 引言:当教育遇见森林智慧 想象一下,你是一位老师,明天要讲“勾股定理”。你需要准备三种难度的练习题&#xff…...

(三)Arcpy 空间插值实战:从点数据到人口分布图

1. 从零开始:为什么我们需要空间插值? 大家好,我是老张,一个在GIS圈子里摸爬滚打了十来年的老家伙。今天咱们不聊那些虚头巴脑的理论,直接上手干点实在的。想象一下这个场景:你手头有一份江苏省各个县区的质…...

IQVIA医药数据库购买指南:从产品构成到实际应用全解析

1. IQVIA数据库到底是什么?别再叫它IMS了! 如果你在医药行业待过几年,肯定听过“IMS数据”这个说法。直到今天,我还能在不少行业交流群里看到有人问:“IMS数据库怎么买?价格多少?”每次看到这种…...

Transformer在图像超分中的革新:从全局建模到纹理迁移

1. 从“近视眼”到“千里眼”:为什么图像超分需要Transformer? 如果你玩过手机拍照,肯定遇到过这种情况:一张特别有纪念意义的照片,因为当时光线不好或者离得太远,拍出来又小又模糊。你想把它放大、修清晰&…...

PyFluent启航指南:环境配置与核心模块初探

1. 为什么你需要PyFluent?从手动点击到自动化脚本 如果你是一名CFD工程师,或者正在学习使用Fluent,下面这个场景你一定不陌生:为了研究某个设计参数(比如机翼的攻角、散热器的翅片间距)对结果的影响&#x…...

Ubuntu18.04国内软件源优化指南

1. 为什么你的Ubuntu 18.04需要更换软件源? 如果你刚装好Ubuntu 18.04,或者已经用了一段时间,感觉每次更新软件、安装新包都慢得像蜗牛爬,甚至动不动就卡住、报错“无法连接”,那问题大概率就出在软件源上。软件源&…...

YOLO26保姆级教程:从环境搭建到模型训练,小白也能轻松上手

YOLO26保姆级教程:从环境搭建到模型训练,小白也能轻松上手 1. 引言:为什么选择YOLO26? 如果你对计算机视觉感兴趣,或者工作中需要处理图片、视频里的物体识别,那你一定听说过YOLO这个名字。它就像一个视力…...

Jimeng LoRA在跨模态实验中的延伸:LoRA热切换+ControlNet联合调用案例

Jimeng LoRA在跨模态实验中的延伸:LoRA热切换ControlNet联合调用案例 1. 项目简介:一个专为LoRA模型测试而生的轻量系统 如果你玩过Stable Diffusion,肯定对LoRA不陌生。LoRA就像给大模型穿上的“风格外衣”,能让它快速学会画特…...

轻量级实战:利用 K3s 和 Kubeflow 构建高效 AI 开发环境

1. 为什么你需要一个轻量级的本地AI开发环境? 如果你正在学习机器学习,或者在一个小团队里捣鼓AI模型,我猜你肯定遇到过这样的烦恼:每次想跑个实验,要么得去申请云上的GPU实例,流程繁琐不说,成本…...

树莓派4B系统源优化指南:从清华源到pip源的全面配置(Raspbian-buster系统)

1. 为什么你的树莓派4B需要优化软件源? 刚拿到树莓派4B,刷好Raspbian-buster系统,是不是感觉一切都挺美好?但当你第一次尝试用 sudo apt-get update 更新软件包列表,或者用 pip install 安装一个Python库时&#xff0c…...

【STM32】stm32G030 BLDC电机驱动:PWM中心对齐模式与刹车功能实战解析

1. 从零开始:为什么STM32G030的TIM1是BLDC驱动的“王牌” 如果你刚开始玩无刷直流电机(BLDC),可能会被一堆术语搞晕:FOC、六步换相、霍尔传感器、PWM……别急,咱们今天不谈那些复杂的算法,就从最…...

DAnet实战:基于PyTorch的双注意力机制语义分割模型解析与实现

1. 从“看局部”到“看全局”:为什么语义分割需要双注意力机制? 如果你玩过“大家来找茬”或者“找不同”的游戏,你肯定有过这样的体验:有时候两个地方的差异非常细微,你盯着一个局部看了半天也发现不了,但…...

基于Verilog与Quartus II的模型机设计实战:从模块构建到Cyclone II FPGA部署

1. 从零开始:为什么我们要亲手设计一台模型机? 如果你是一名电子工程或计算机相关专业的学生,或者是对计算机底层原理充满好奇的爱好者,你可能不止一次地想过:我面前的这台电脑,它到底是怎么工作的&#xf…...

Cesium 实现动态轨迹回放与时间控制

1. 从零开始:理解Cesium动态轨迹回放的核心 想象一下,你手头有一架无人机的飞行数据,或者一艘货轮的航行日志,你想在一个逼真的三维地球上,像看电影一样,把这段旅程重新播放出来。模型不仅要沿着预定的路线…...

【微知】Linux下5种高效查询NUMA节点的方法及适用场景解析(lscpu、numactl、/sys、/proc实战)

1. 从“一视同仁”到“远近亲疏”:聊聊NUMA到底是个啥 如果你用过那种老式的多CPU服务器,或者现在的高性能工作站,可能会觉得CPU访问内存嘛,不就是“读”和“写”两件事,所有内存条对CPU来说应该都一样快。我以前也是这…...

nlp_structbert_sentence-similarity_chinese-large与Dify集成:快速构建智能文本比对应用

nlp_structbert_sentence-similarity_chinese-large与Dify集成:快速构建智能文本比对应用 你是不是也遇到过这样的场景?面对海量的用户咨询,需要快速判断哪些问题是相似的,好进行归类处理;或者,在审核用户…...

C语言实战:从零实现高效重采样算法

1. 重采样到底是什么?从生活场景到代码实现 如果你玩过音乐,或者处理过图片,那你其实已经接触过重采样了。比如,你把一首高音质的无损音乐转换成体积更小的MP3,或者把一张高清大图缩略成手机上的小图标,这背…...

SAP PP实战解析:从订单下达、状态流转到物料检查与移动的闭环管理

1. 订单下达:生产执行的“发令枪” 在SAP PP模块里,生产订单的“下达”(Release)动作,就像是车间主任吹响了开工的哨子。很多刚接触PP模块的朋友可能会觉得,订单创建完不就可以直接干活了吗?其实…...

Mac 告别Xshell焦虑,FinalShell的SSH与跳板机实战指南

1. 为什么Mac用户需要告别Xshell焦虑? 如果你是刚从Windows阵营转到Mac的程序员、运维或者开发者,我猜你肯定经历过一段“终端工具阵痛期”。在Windows上,Xshell几乎是SSH客户端的代名词,界面友好、功能强大,特别是那个…...

【GmSSL】如何在Linux系统中实现GmSSL与OpenSSL的无冲突共存部署

1. 为什么我们需要让GmSSL和OpenSSL共存? 如果你是一个在国内做企业级应用开发的工程师,最近几年肯定没少听到“国密算法”这个词。从金融、政务到物联网,支持国密算法(SM2/SM3/SM4)已经从一个加分项变成了很多场景下的…...