笔记79:ROS入门之前的准备

news2024/12/27 0:20:58

一、ROS是什么

  • ROS其实是一个伪操作系统,是基于Liunx操作系统的一个用于机器人各个节点之间通信的系统;ROS制定了一系列规则使得每个节点之间遵循相同的通信规则,使得每个人都可以有一个守则区遵守开发自己的节点,也能和别人开发的节点完美配合;
  • 不同的Ubuntu系统支持不同的ROS版本;

参考视频:

  1. 机器人操作系统 ROS 快速入门教程_哔哩哔哩_bilibili
  2. 零基础,如何学习机器人操作系统ROS_哔哩哔哩_bilibili

二、Ubuntu系统的安装(双系统安装)

参考视频:

  1. 学习ROS,安装Ubuntu,虚拟机和双系统如何选择_哔哩哔哩_bilibili
  2. Windows 和 Ubuntu 双系统的安装和卸载_哔哩哔哩_bilibili

三、一些基础的Ubuntu命令

基础命令:

  • ls:列出当前目录下的所有文件/文件夹
  • ls -a:仅使用ls是不会列出当前目录下的隐藏文件的,需要加上参数-a

  • mkdir + <文件夹名称>:在当前目录下建立一个新的文件夹
  • cd + 路径:改变当前路径到指定位置
  • cd + ~:直接回到主目录(=根目录-->home-->lkw)
  • cd + ..:回到上一级目录
  • gedit + <文件名>:gedit是一个Ubuntu自带的文本编辑器(Vim也是),使用这个指令可以在当前目录下创建一个新的文件/打开已有文件
  • echo + <任意内容>:执行这行命令,就会在终端上显示指定的<任意内容>
  • source + <文件名.sh>:在Linux中经常把一连串指令写到.sh文件中,通过source指令加载运行整个文件

介绍一个文件:

  • .bashrc:是终端窗口的启动脚本(在主文家夹中,但是一个隐藏文件,需要使用ls -a才能看到);每次打开终端窗口的时候就会先执行这个脚本,完成一些环境变量的赋值工作;

Ubuntu的权限机制:

  • sudo:在Ubuntu中每个用户只能操作自己“主文件夹”中的内容(对我来说就是lkw文件夹),在主文家夹外移动/删除/新建文件都会显示权限不足,这是一种保护机制,避免误删重要文件导致系统崩溃;但是通过在终端输入的指令前加上sudo前缀,可以使我们在执行这条终端命令时可以以管理员权限执行本条指令,使得权限扩大,可以在其他位置上进行修改;

参考视频:

  1. 从没接触过Ubuntu,如何上手ROS开发_哔哩哔哩_bilibili

四、安装ROS

注意:Ubuntu的版本是20.04,所需下载的ROS版本为Noetic

官网教程:noetic/Installation/Ubuntu - ROS Wiki

1. Configure your Ubuntu repositories:

  • 作用:配置Ubuntu的软件仓库(软件源,即对 /etc/apt/sources.list 文件进行修改),这个文件在安装Ubuntu的时候已经自动自动配置好了;我们也可以通过添加阿里云的软件源来加快安装速度;

2. Setup your sources.list

  • 作用:将ROS的安装源添加到这个 .list 文件中,相当于给Ubuntu装了个ROS的应用商店(注意命令里面给出的网站时国外网站,我们也可以使用提供的清华镜像源进行下载);
  • 注意:第二步和第一步中配置的 .list 文件是不一样的;第一步中配置的是 /etc/apt/sources.list 文件;第二步配置的是 /etc/apt/sources.list.d/ros-latest.list 文件;
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

3. Set up your keys

  • 作用:设置安装密钥(从网上的服务器获取安装密钥);
sudo apt install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

4. Installation

  • 作用:更新软件的索引列表 + 从更新后的索引列表中安装ROS(安装ROS主体);
sudo apt update
sudo apt install ros-noetic-desktop-full

5. Environment setup

  • 作用:将ROS的环境设置脚本添加到终端程序的初始化脚本(/.bashrc)里;这样每次打开终端程序都会自动进行ROS系统环境的初始化;
  • 解释:每次我们要使用ROS系统的时候(即在终端中运行 roscore 命令时),都需要预先在终端中输出环境初始化脚本;因为ROS这个操作系统时有很多依赖的功能包的,如果想要启动ROS,那就要先把依赖项启动完成,所以我们需要把这些依赖功能包所在的路径( /opt/ros/noetic/setup.bash )添加到终端启动文件中,使得ROS启动前终端可以找到这些软件包的位置,然后把这些软件包加载进去,这样才能成功启动ROS;
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
使用 gedit 打开 .bashrc 文件后,可以发现已经被添加成功

6. Dependencies for building packages

  • 作用:rosdep初始化;对ROS的依赖包工具进行初始化,方便以后安装第三方的扩展软件包;
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo rosdep init
rosdep update

参考视频:机器人操作系统ROS的安装心得以及rosdep问题的处理_哔哩哔哩_bilibili


五、什么是ROS中的apt源 + 使用apt安装软件包

补充:APT是Ubuntu自带的一套软件包下载工具(包管理器),使用他可以从网上的源服务器下载指定的软件包自动安装;

我的另一篇文章有详细的解释:笔记78:软件包管理工具 apt 详解(包含常用 apt 命令介绍)-CSDN博客

参考视频:APT源,ROS的软件包应用商店_哔哩哔哩_bilibili


六、运行一个ROS示例

  • apt 安装软件包 <ros-noetic-rqt-robot-steering>
  • apt 安装软件包 <ros-noetic-turtlesim>
sudo apt install ros-noectic-rqt-robot-steering
sudo apt install ros-noetic-turtlesim
  • 运行ROS之前需要创建支持环境
  • 解释:因为ROS运行时需要找到自己依赖的软件包的位置,这些软件包都被安装在了 /opt/ros/noetic/share 文件夹中,所以在执行 roscore 之前要在终端中加载 /opt/ros/noetic/setup.bash 脚本,使得ROS知道这些软件包的位置;
source /opt/ros/noetic/setup.bash
  • 运行ROS操作系统(只有ROS运行起来了,后面的节点才能运行,否则他们没有可以依附的操作系统,就无法建立通讯)
roscore
  • 运行节点之前需要创建支持环境
  • 解释2:前面我们令ROS可以找到自己启动时所需的必备软件包了,但是ROS如果找不到我们自己编写的软件包的话,我们不就是仅仅启动了ROS而已吗,而没有任何工作在进行;而我们自己编写的软件包全部存储在了 ~/catkin_ws/devel/share 文件夹中,所以在运行节点之前要先在终端中加载 ~/catkin_ws/devel/setup.bash 脚本,使得ROS在执行 rosrun 命令时可以找到具体的软件包位置;
source ~/catkin_ws/devel/setup.bash
  • 运行软件包 <rqt_robot_steering> 中的节点 <rqt_robot_steering>
  • 运行软件包 <turtlesim> 中的节点 <turtlesim_node>
rosrun rqt_robot_steering rqt_robot_steering
rosrun turtlesim turtlesim_node

  • 我们发现每次运行ROS和目标节点,都需要先打开终端,然后加载 /opt/ros/noetic/setup.bash 和 ~/catkin_ws/devel/setup.bash 这两个脚本来创建环境,而终端的启动文件是 .bashrc,所以为了方便我们直接将这两个命令写入 .bashrc 文件
gedit ~/.bashrc

#在最后写这两句话,保存退出
source /opt/ros/noetic/setup.bash
source ~/catkin_ws/devel/setup.bash

 参考视频:APT源,ROS的软件包应用商店_哔哩哔哩_bilibili


七、使用源码安装软件包

 我的另一篇文章有详细的解释:笔记78:软件包管理工具 apt 详解(包含常用 apt 命令介绍)-CSDN博客

下载源码包,安装好依赖项以后,有一个 catkin_make 的编译操作,这个操作包含:

  • 自动生成 CMakeLists.txt 文件和 package.xml 文件,编译源码,形成可执行文件;
  • 在工作空间 catkin_ws 中创建 build 文件夹和 devel 文件夹(src + build + devel);
  • 将编译的软件包加入软件包库中(/opt/ros/noetic/share 和 ~/catkin_ws/devel/share),使得后续运行程序的时候可以找到这个软件包;

注意:

  • CMakeLists.txt 文件:存放该项目 / 软件包的编译规则(有了这个文件才能进行编译,用来指导编译);
  • package.xml 文件:存放该项目 / 软件包所依赖的是哪些软件包等信息;
  • src 文件夹:存放项目 / 软件包源代码
  • build 文件夹:存放一些编译时产生的中间文件(cmake / catkin 命令产生的缓存或者中间文件)
  • devel 文件夹:存放编译好后生成的可执行文件(如:头文件 / 动态连接库 / 静态连接库 / 可执行文件)

补充:

  • 对于 Noetic 而言,将软件包源代码拷贝到 ~/catkin_ws/src 工作空间后,直接 catkin_make 就可以产生 CMakeists.txt 文件;
  • 但是对于比较旧的ROS版本,不能直接 catkin_make 进行编译,要先使用 catkin_init_workspace 命令初始化工作空间,生成 CMakeLists 文件,才能使用 catkin_make 进行编译;

参考视频:在Github上寻找安装ROS软件包_哔哩哔哩_bilibili


八、安装 Vsode 和 Terminator

安装 Vscode:

  • 从网站页面下载 .deb 文件(是一个安装包)
  • 使用 dpkg 命令安装软件包(本地安装基本都是 dpkg,在线安装都是 apt)
  • 关于 apt 和 dpkg 之间的区别:笔记78:软件包管理工具 apt 详解(包含常用 apt 命令介绍)-CSDN博客
cd ~/下载
sudo dpkg -i code_1.59.0-16288120042_amd64.deb
  • 编译快捷键:Ctrl + Shift + B

安装 Terminator:

sudo apt install terminator
  • 编译快捷键:笔记71:Ubuntu 终端的一些快捷键-CSDN博客

参考视频:

  1. 8.ROS 开发神器 Visual Studio Code 的安装和设置_哔哩哔哩_bilibili
  2. 9.超级终端Terminator ROS开发得力助手_哔哩哔哩_bilibili

参考文献:

  1. 机器人操作系统 ROS 快速入门教程_哔哩哔哩_bilibili
  2. 零基础,如何学习机器人操作系统ROS_哔哩哔哩_bilibili
  3. 学习ROS,安装Ubuntu,虚拟机和双系统如何选择_哔哩哔哩_bilibili
  4. 从没接触过Ubuntu,如何上手ROS开发_哔哩哔哩_bilibili
  5. 机器人操作系统ROS的安装心得以及rosdep问题的处理_哔哩哔哩_bilibili
  6. APT源,ROS的软件包应用商店_哔哩哔哩_bilibili
  7. 在Github上寻找安装ROS软件包_哔哩哔哩_bilibili
  8. 8.ROS 开发神器 Visual Studio Code 的安装和设置_哔哩哔哩_bilibili
  9. 9.超级终端Terminator ROS开发得力助手_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509085.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【组合回溯递归】【树层去重used标记】Leetcode 40. 组合总和 II

【组合回溯递归】【树层去重used标记】Leetcode 40. 组合总和 II 解法 组合问题常用解法 树层去重 ---------------&#x1f388;&#x1f388;40. 组合总和 II 题目链接&#x1f388;&#x1f388;------------------- 解法 组合问题常用解法 树层去重 问题描述&#xff1…

代码随想录 贪心算法-中等题目-序列问题

376.摆动序列 376. 摆动序列 中等 如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为 摆动序列 。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如&#xff0c; [1, 7…

植物病害识别:YOLO水稻病害识别数据集(11000多张,yolo标注)

YOLO水稻病害识别数据集&#xff0c;包含叶斑病&#xff0c;褐斑病&#xff0c;细菌性枯萎病&#xff0c;东格鲁病毒病4个常见病害类别&#xff0c;共11000多张图像&#xff0c;yolo标注完整&#xff0c;可直接训练。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c…

手机怎么剪辑音频?不可错过的6款音频剪辑好物

随着移动设备的普及和功能的日益强大&#xff0c;越来越多的人开始使用手机来创作和处理音频。无论你是音乐爱好者、播客还是视频制作者&#xff0c;一款优秀的音频剪辑应用都是不可或缺的。今天&#xff0c;就为大家推荐六款不可错过的手机音频剪辑好物。 1. 金舟音频大师 金…

STM32——FreeRTOS移植裸机外部中断不能使用原因

今天要在RTOS配置外部中断&#xff0c;为了省事&#xff0c;直接copy的裸机的外部中断例程&#xff0c;结果不能用&#xff0c;把可能出现的问题全部都查了一遍。 首先FreeRTOS可管理优先级是5~15&#xff0c;这个注意到了&#xff0c;但是还是不行。 是因为少了一个重要的参数…

数据库连接池-Durid连接池

数据库连接池是一个存放数据库连接的缓冲池&#xff0c;它能够管理和重用数据库连接&#xff0c;从而提高数据库访问的性能和效率。数据库连接是一种资源&#xff0c;它的创建和销毁是比较耗时的操作&#xff0c;因此使用连接池可以避免频繁地创建和销毁连接&#xff0c;从而减…

C++ 作业 24/3/11

1、提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数&#xff08;要求使用C风格字符串完成&#xff09; #include <iostream>using namespace std;int main() {string str;cout << "please enter str:&…

“离比特币减半还剩40天”!周期论到底是不是“刻舟求剑”?玄学还是现实?

作为周期论标志性重大事件&#xff0c;历史上的比特币减半似乎每每都能在市场上掀起风浪&#xff0c;但有一些人试图拿着放大镜抠细节&#xff0c;找出各种周期论地纰漏来试图打碎“比特币减半周期论”。那么“减半周期论”&#xff0c;到底是不是刻舟求剑&#xff1f; 事实上&…

RK3568驱动指南|第二篇 字符设备基础-第8章 驱动模块编译进内核实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

基于element-plus的Dialog选择控件

翻看之前工程师写的vue2的代码&#xff0c;很多都是复制、粘贴&#xff0c;也真是搞不懂&#xff0c;明明可以写一个控件&#xff0c;不就可以重复使用。很多前端总喜欢element搞一下&#xff0c;ant-design也搞一下&#xff0c;有啥意义&#xff0c;控件也不是自己写的&#x…

嵌入式Qt 标准对话框 - 颜色对话框QColorDialog-输入对话框QInputDialog

一.颜色对话框QColorDialog 颜色对话框使用&#xff1a; //构造颜色对话框对象 并指定父窗口 QColorDialog dlg(this);//设置颜色对话框的相关属性 dlg.setWindowTitle("Color Editor");//设置标题 dlg.setCurrenColor(Qt :: red);// 初始颜色//以模态方式打开颜色对…

自定义sql语句,但复杂的where部分由条件构造器wrapper来完成

我们可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,然后自己定义SQL语句中剩下的部分。 步骤&#xff1a; 实现&#xff1a; Testvoid testCustomSqlUpdate(){//update tb_user set balance balance - #{amount} where id in(?,?,?,?,...)List<Long> ids …

0基础、适合转行学Python吗?

01 对于0基础的人&#xff0c;直接学 Python 编程合适吗&#xff1f; 在目前的编程语言中&#xff0c;Python的抽象程度是最高的&#xff0c;是最接近自然语言的&#xff0c;非常容易上手&#xff0c;Python 可以让你更好的理解编程这件事情。 所以&#xff0c;我只能说非常…

OpenHarmony教程—语言基础类库

介绍 本示例集合语言基础类库的各个子模块&#xff0c;展示了各个模块的基础功能&#xff0c;包含&#xff1a; ohos.buffer (Buffer)ohos.convertxml (xml转换JavaScript)ohos.process (获取进程相关的信息)ohos.taskpool (启动任务池)ohos.uri (URI字符串解析)ohos.url (UR…

高项--价值驱动的项目管理知识体系

说要参加软考已经过去两周了&#xff0c;到现在也没啥成果&#xff0c;今天决定还是动手记录小一些东西吧&#xff0c;也方便下次打开手机的时候可以查看记忆。总体上看可以分为三个部分&#xff1a;信息技术、项目管理、法律法规&#xff0c;而项目管理里面最终要的就是这个项…

R语言扩展包与MaxEnt模型的集成:实现高效的物种分布模拟

在生态学研究中&#xff0c;物种分布模拟是一项至关重要的任务。它有助于我们理解物种与环境之间的复杂关系&#xff0c;预测物种在气候变化或人类活动影响下的潜在分布变化。近年来&#xff0c;随着计算机技术的不断发展&#xff0c;基于机器学习的物种分布模拟方法逐渐成为研…

EasyExcel导出自定义表格

谈到新技术&#xff0c;每个人都会有点恐惧&#xff0c;怕处理不好。确实&#xff0c;第一次使用新技术会遇到很多坑&#xff0c;这次使用 EasyExcel 这个新技术去做 excel 导出&#xff0c;还要给表格加样式&#xff0c;遇到不同的版本问题&#xff0c;遇到颜色加错了地方&…

【Echarts】柱状图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息

欢迎来到《小5讲堂》 大家好&#xff0c;我是全栈小5。 这是《前端》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对知识点的理解和掌握…

四川宏博蓬达法律咨询有限公司:专业可靠,您身边的法律守护者

在现代社会&#xff0c;法律咨询服务的需求日益增长&#xff0c;选择一家专业可靠的法律咨询公司成为了许多企业和个人的当务之急。四川宏博蓬达法律咨询有限公司便是这样一个值得信赖的法律服务提供者&#xff0c;以其专业、高效、贴心的服务&#xff0c;赢得了广大客户的信赖…

什么是Redis的数据分片?

Redis的数据分片(sharding)是一种将一个Redis数据集分割成多个部分&#xff0c;分别存诸在不同的Redis节点上的技术。它可以用于将一个单独的Redis数据库扩展到多个物理机器上&#xff0c;从而提高Redis集群的性能和可扩展性 Redis数据分片的实现方式通常是将数据按照某种规则(…