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

一、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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Exception异常处理

1. 两种异常处理机制 1.1 使用 throw 关键字手动抛出异常 使用throw关键字抛出异常&#xff0c;代码会的显得简单明了 如下图所示 1.2 使用 try-catch 捕获异常 使用try-catch进行捕获异常&#xff0c;往往会使代码变得更加笼统&#xff0c;层层包裹 如下图所示 2. 自定义…

从零学算法287

287.给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 [1, n] 范围内&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;返回 这个重复的数 。 你设计的解决方案必须 不修改 数组 nums 且只…

聊聊python中面向对象编程思想

面向对象编程思想 1、什么是面向过程 传统的面向过程的编程思想总结起来就八个字——自顶向下&#xff0c;逐步细化&#xff01; → 将要实现的功能描述为一个从开始到结束按部就班的连续的“步骤” → 依次逐步完成这些步骤&#xff0c;如果某一个步骤的难度较大&#xff…

2024年品牌推广:构建品牌生态圈与注重品牌故事和文化传播

在全球经济深度融合、数字化浪潮汹涌澎湃的2024年&#xff0c;品牌推广的策略与模式正经历着前所未有的变革。在这一背景下&#xff0c;构建品牌生态圈和注重品牌故事与文化传播&#xff0c;成为了企业提升品牌竞争力和市场占有率的重要手段。 一、2024年市场经济分析与现状 …

上门预约按摩系统相比较传统按摩店有哪些优点和特色;

上门按摩系统与传统按摩店的运营对比&#xff1a; 1. 技师自由选择&#xff1a;在上门按摩系统中&#xff0c;技师可以兼职加入&#xff0c;无需固定门店。平台为技师提供订单&#xff0c;技师则携带基础服务用具上门服务。同时&#xff0c;兼职技师也需提交详尽资料和资质证明…

伟骅英才|二月二:龙年龙抬头

二月二龙抬头&#xff0c;是中国民间传统节日&#xff0c;人们期盼通过对龙的祈求来实现降雨的目的&#xff0c;寄托了老百姓对美好生活的向往。这一天&#xff0c;人们通常会去理个发&#xff0c;寓意着“二月二剃龙头&#xff0c;一年都有精神头”。现如今的二月二&#xff0…

软件测试需要学什么?学多久?软件测试技术进阶路线图

很多新手&#xff0c;不知道软件测试学习该如何开始&#xff0c;软件测试需要掌握哪些知识。下面是根据本人的理解&#xff0c;粗略整理的一个学习大纲&#xff0c;基本上涵盖了软件测试工程师需要掌握的全部技能&#xff0c;希望对刚入行或者准备学习测试的朋友提供一点指引。…

Java17 --- SpringCloud初始项目创建

目录 一、cloud项目创建 1.1、项目编码规范 1.2、注解生效激活 1.3、导入父工程maven的pom依赖 二、创建子工程并导入相关pom依赖 2.1、相关配置文件 2.1.1、数据库配置文件内容 2.1.2、自动生成文件配置内容 三、创建微服务8001子工程 3.1、导入相关pom依赖 3.…

基于51单片机超声波测距

目录 摘 要 2 ABSTRACT 3 目 录 4 1 绪论 1 1 概述 12 国内外发展现状 1 2 系统总体方案设计 21 设计要求 2 1&#xff09;可进行距离测量。 2 2&#xff09; 采用数码管显示距离数据。 2 3&#xff09; 可按键设置距离门限值 2 4&#xff09; 具有报警功能 22 方案选择 2 1 …

Vue点击切换组件颜色

例如我有一个这样的组件&#xff0c;我希望在点击组件之后由蓝色变成橙色 先把原来的代码附上(简化掉了叉号&#xff09;&#xff1a; <div v-for"(item, index) in words" :key"index" class"scrollbar-demo-item"><span>{{ item …

PL/SQL学习笔记

介绍 PL/SQL 编程语言是SQL 和 Oracle 关系数据库的过程扩展语言 是Oracle 编程环境中的一个工具 基本语法 S.No Sections & Description 1 Declarations 此部分以关键字 DECLARE 开头。 它是一个可选部分&#xff0c;定义了程序中要使用的所有变量、游标、子程序和其他…

C++虚继承的一些细节

C虚继承的一些细节 何时使用虚继承普通继承的类对象布局虚继承类对象布局虚函数表指针虚函数表内容 何时使用虚继承 看代码&#xff0c;代码主要是菱形继承&#xff0c;base里面的成员变量会存在二义性 #include<iostream> using namespace std;class base { public:in…

客户案例|100M 768 维向量数据,Zilliz Cloud 稳定支持 Shulex VOC 业

日前&#xff0c;国际化 VOC SaaS 公司数里行间&#xff08;Shulex&#xff09;将上亿数据量的核心业务从开源向量数据库 Milvus 迁移至全托管的向量数据库云服务 Zilliz Cloud。 相比于 Milvus&#xff0c;Zilliz Cloud 实现了 Shulex VOC 评论分析洞察报告生成速度 30% 的提升…

第二十天-数据分析

1.介绍 1.什么是数据分析 1.以下4个纬度结合起来的数据科学 2.数据分析的特殊性

物体检测-系列教程23:YOLOV5 源码解析13 (SPP层、Flatten模块、Concat模块、Classify模块)

&#x1f60e;&#x1f60e;&#x1f60e;物体检测-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 17、SPP模块 17.1 SPP类 SPP是一种特殊的池化策略&#xff0c;最初在YOLOv3-SPP中被使用…

Axuer的中继器~增删改查

目录 1. 中继器 2. 增加 3. 全选 4. 删除 5. 修改 6. 排序 7.分页 正文&#xff1a; 1.中继器&#xff1a;拉一个中继器给中继器名称写一个数据 在右边点击样式 写入数据 1.2 双击中继器进入动态页面 在里面放3个框 1.3 退出来 给中继器添加数据 2. 增加&#xff1…

研发效能DevOps: OpenEuler 部署 drone 持续集成平台

目录 一、实验 1.环境 2.OpenEuler 部署 drone 持续集成平台 二、问题 1.drone登录失败 一、实验 1.环境 &#xff08;1&#xff09;主机 表1 主机 系统架构版本IP备注LinuxopenEuler22.03 LTS SP2 192.168.204.145&#xff08;动态&#xff09; 192.168.204.141&…

使用maven打包执行install命令时候一直卡在No proxies configured不动,如何解决?

问题描述&#xff1a; [INFO] [INFO] — frontend-maven-plugin:1.9.1:install-node-and-npm (install node and npm) frontend — [INFO] Installing node version v16.0.0 [INFO] Copying node binary from D:\Maven\maven-repository\com\github\eirslett\node\16.0.0\node…

3.11_C++_day1_作业

作业要求&#xff1a; 程序代码&#xff1a; #include <iostream> #include <string.h>using namespace std;int main() {int a0,b0,c0,d0,e0;//分别记录字符串中的大写&#xff0c;小写&#xff0c;数字&#xff0c;空格&#xff0c;其他字符个数string str;cha…

Docker初体验之安装部署和镜像加速(openeuler版)

安装部署&#xff1a; 本人使用的为openeuler版本&#xff0c;无法使用二进制进行安装&#xff08;使用二进制安装时&#xff0c;无法使用docker中的补全命令&#xff0c;需要重新进行配置&#xff09;在此使用yum直接进行安装。 [rootlocalhost ~]# yum install docker 镜像…