ubuntu18.04命令安装ros2

2023-11-20

ROS2官方文档
本教程为apt-get命令安装方式,官网教程有点问题,借鉴一下大佬的安装方式

1 安装ROS2

1.1 安装秘钥相关指令

  • 命令
sudo apt update && sudo apt install curl gnupg2 lsb-release
  • 成功
Reading package lists... Done
Building dependency tree       
Reading state information... Done
lsb-release is already the newest version (9.20170808ubuntu1).
curl is already the newest version (7.58.0-2ubuntu3.16).
The following NEW packages will be installed:
  gnupg2
0 upgraded, 1 newly installed, 0 to remove and 6 not upgraded.
Need to get 5,292 B of archives.
After this operation, 52.2 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://mirrors.aliyun.com/ubuntu bionic-updates/universe amd64 gnupg2 all 2.2.4-1ubuntu1.4 [5,292 B]
Fetched 5,292 B in 0s (37.9 kB/s)  
Selecting previously unselected package gnupg2.
(Reading database ... 269610 files and directories currently installed.)
Preparing to unpack .../gnupg2_2.2.4-1ubuntu1.4_all.deb ...
Unpacking gnupg2 (2.2.4-1ubuntu1.4) ...
Setting up gnupg2 (2.2.4-1ubuntu1.4) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

1.2 授权秘钥

  • 命令
curl http://repo.ros2.org/repos.key | sudo apt-key add -
  • 成功
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1678  100  1678    0     0   2829      0 --:--:-- --:--:-- --:--:--  2824
OK

1.3 添加ROS2软件源

  • 命令
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
sudo apt-get update
  • 成功
Hit:1 http://mirrors.aliyun.com/ubuntu bionic InRelease
Hit:2 http://mirrors.aliyun.com/ubuntu bionic-security InRelease                             
Hit:3 http://mirrors.aliyun.com/ubuntu bionic-updates InRelease                              
Hit:4 http://mirrors.aliyun.com/ubuntu bionic-proposed InRelease                             
Get:5 http://packages.ros.org/ros2/ubuntu bionic InRelease [4,680 B]                         
Hit:6 http://mirrors.aliyun.com/ubuntu bionic-backports InRelease                            
Hit:7 https://download.docker.com/linux/ubuntu bionic InRelease                              
Get:8 http://packages.ros.org/ros2/ubuntu bionic/main amd64 Packages [686 kB]                
Ign:9 http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu bionic InRelease                        
Hit:10 http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu bionic Release
Get:12 http://packages.ros.org/ros2/ubuntu bionic/main arm64 Packages [658 kB]
Fetched 1,349 kB in 5s (288 kB/s)  
Reading package lists... Done

1.4 安装

  • 命令
sudo apt install ros-dashing-desktop
  • 补充:
    本次安装直接安装了大礼包,ROS提供了两种默认搭配,如下:
#桌面版 : 包含ROS, RViz, demos, tutorials [推荐]
sudo apt install ros-dashing-desktop

#基础版:(包含通讯库、消息包、命令行工具,没有GUI工具)
sudo apt install ros-dashing-ros-base
  • 成功
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  cppcheck libxaw7-dev libxpm-dev pydocstyle pyflakes pyflakes3 python-funcsigs python-mock
  python-pbr python-pyflakes python3-attr python3-bs4 python3-catkin-pkg-modules
.
.
.
Setting up ros-dashing-desktop (0.7.4-1bionic.20210521.235100) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1.4) ...

ROS2到这里就安装完了,安装目录为/opt/ros/dashing

2 设置环境(可选但是推荐)

  • 说明:不想设置的话,就每次启动终端手动运行一下source /opt/ros/dashing/setup.bash

2.1 未安装ROS1 / 默认使用ROS2

  • 命令
echo "source /opt/ros/dashing/setup.bash" >> ~/.bashrc
source ~/.bashrc

2.2 装了ROS1,每次启动终端都手动选择版本

  • 把下面的脚本添加到~/.bashrc,然后执行source ~/.bashrc
#source /opt/ros/melodic/setup.bash
#source /opt/ros/dashing/setup.bash
# ROS 1.0 melodic or ROS 2.0 Dashing
echo ROS 1.0 or ROS 2.0? 1=Melodic 2=Dashing 
read ROS
if (($ROS==1));then
source /opt/ros/melodic/setup.bash
echo "Melodic"
elif (($ROS==2));then
source /opt/ros/dashing/setup.bash
echo "Dashing"
fi

3 命令行自动补全键入(可选但是推荐)

  • 说明:ROS2按Tab键不会自动补全命令,如果希望有自动补全功能,需要安装一下
  • 命令
sudo apt install python3-argcomplete
source /opt/ros/dashing/setup.sh
  • 成功
$ sudo apt install python3-argcomplete
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  python3-argcomplete
0 upgraded, 1 newly installed, 0 to remove and 6 not upgraded.
Need to get 26.9 kB of archives.
After this operation, 122 kB of additional disk space will be used.
Get:1 http://mirrors.aliyun.com/ubuntu bionic/universe amd64 python3-argcomplete all 1.8.1-1ubuntu1 [26.9 kB]
Fetched 26.9 kB in 0s (70.1 kB/s)              
Selecting previously unselected package python3-argcomplete.
(Reading database ... 287952 files and directories currently installed.)
Preparing to unpack .../python3-argcomplete_1.8.1-1ubuntu1_all.deb ...
Unpacking python3-argcomplete (1.8.1-1ubuntu1) ...
Setting up python3-argcomplete (1.8.1-1ubuntu1) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...

4 运行demo

跟ROS1一样,ROS2也提供了demo。

  • 运行listener
ros2 run demo_nodes_cpp listener
  • 另起终端,运行talker
ros2 run demo_nodes_cpp talker
  • 补充:
    错误1:ros2: command not found
    执行一下 2 设置环境变量
  • 成功
    listener终端:
$ ros2 run demo_nodes_cpp listener
[INFO] [listener]: I heard: [Hello World: 1]
[INFO] [listener]: I heard: [Hello World: 2]
[INFO] [listener]: I heard: [Hello World: 3]
[INFO] [listener]: I heard: [Hello World: 4]
[INFO] [listener]: I heard: [Hello World: 5]

talker终端:

$ ros2 run demo_nodes_cpp talker
[INFO] [talker]: Publishing: 'Hello World: 1'
[INFO] [talker]: Publishing: 'Hello World: 2'
[INFO] [talker]: Publishing: 'Hello World: 3'
[INFO] [talker]: Publishing: 'Hello World: 4'
[INFO] [talker]: Publishing: 'Hello World: 5'

5 安装ROS1 bridge(可选)

  • 说明:ROS1 bridge提供了一个网桥,可以在 ROS 1 和 ROS 2 之间交换消息, 详情见官网
  • 命令
sudo apt-get install ros-dashing-ros1-bridge
  • demo:使用ROS1的方式运行talker,然后使用ROS2的方式运行listener

1 新开终端,启动roscore

source /opt/ros/melodic/setup.sh
roscore

2 新开终端,启动ROS1的talker

source /opt/ros/melodic/setup.sh
rosrun rospy_tutorials talker

3 新开终端,启动ROS2的listener

source /opt/ros/dashing/setup.sh
ros2 run demo_nodes_cpp listener

4 新开终端,启动ROS1 bridge

source /opt/ros/melodic/setup.sh
source /opt/ros/dashing/setup.sh
#设置默认地址,这一句可以不要
export ROS_MASTER_URI=http://localhost:11311
ros2 run ros1_bridge dynamic_bridge

6 附加RMW实现(可选)

  • 说明:
    1 ROS2相比ROS1,引入了DDS,DDS是一个国际标准,使用发布/订阅机制进行消息通讯
    2 ROS2使用的默认中间件(RMW – ROS 2 middleware)是Cyclone DDS,RMW可以更换,DDS和RM官网文档
    3 如果安装了多个RMW,可以通过设置环境变量来选择不同的RMW,如:RMW_IMPLEMENTATION=rmw_connext_cpp
  • 命令
sudo apt install ros-dashing-rmw-opensplice-cpp # for OpenSplice
sudo apt install ros-dashing-rmw-connext-cpp # for RTI Connext (requires license agreement)

7 安装colcon编译工具(推荐)

  • 说明:ROS的编译工具经历了catkin、ament、colcon三个阶段,ROS2使用colcon,如果需要编译还是装一下
  • 命令
sudo apt install python3-colcon-common-extensions

8 编译小乌龟demo

  • 创建ROS2工作空间
mkdir -p ~/dev_ws/src
cd ~/dev_ws/src
  • 克隆小乌龟源码
//克隆到刚刚创建的src目录下
git clone https://github.com/ros/ros_tutorials.git -b dashing-devel
  • 检查依赖项,如果所有的依赖项都正确,则控制台显示如下
$ rosdep install -i --from-path src --rosdistro dashing -y
#All required rosdeps installed successfully
  • 编译
$ colcon build
Starting >>> turtlesim
[Processing: turtlesim]                               
Finished <<< turtlesim [30.7s]                         

Summary: 1 package finished [30.8s]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu18.04命令安装ros2 的相关文章

  • 双线性序列给出奇数结果

    我试图让我的表现技能 不存在 达到标准 但在将公式写入代码时遇到了问题 这是我试图将其引用为 转换 为代码的公式 考虑一个序列 u 其中 u 定义如下 号码u 0 1是第一个u 对于每个x in u then y 2 x 1 and z 3
  • C语言中的递归是如何工作的?

    我试图了解 C 中递归的工作原理 任何人都可以给我解释控制流吗 include
  • 使用 JSON 格式正确配置 NLog 到 IHostBuilder

    我有以下代码 应该接受 NLog 的 JSON appsettings 配置 然后使用它来创建 NLog LogFactory 这个 NLog 工厂应该被传递到 MyService 类中 以便在那里创建一个记录器 class Program
  • C++:将模板参数的模板类型成员添加为好友的正确语法?

    我有一个带有模板类型参数 tTRAIT 的类 我想加一个模板为好友type member aliastTRAIT 但我无法弄清楚语法 这可能吗 template
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • 无缝滚动瓷砖地图

    我正在开发一个自上而下的角色扮演游戏 并且想要实现无缝滚动地图 也就是说 当玩家探索世界时 地图之间没有加载屏幕 也没有通往下一个区域的 门 我有两种方法可以打破世界 在顶层 我有 区域 它只是 9 个 地图 的集合 这些区域仅由目录表示
  • 求一个数的因数。无法得到准确的结果

    有人可以帮助纠正我的算法吗 我已经对几个数字进行了测试 但它没有输出完整的因式分解 对于具有大量因子的数字 它完全失败 int num 20 for int i 2 i lt num i if num i 0 cout lt lt i lt
  • 读取STM32 MCU SPI数据寄存器的值

    有很多类似的问题 但似乎没有一个问题完全相同 我正在将 STML4 MCU 连接到 6 轴传感器 LSM6DS3 我已经成功地在 I2C 中实现了所有内容 但想要 SPI 的额外速度 和 DMA 如果我能让这些第一步工作起来的话 因此 第一
  • WinForms - 表单大小错误

    我们有以下代码 private void MainForm Shown object sender EventArgs e RepositionForm private void RepositionForm Rectangle rect
  • 使用 INotifyPropertyChanged

    有人可以解释一下为什么在 wpf 中使用绑定时需要使用 INotifyPropertyChanged 的 实现吗 我可以在不实现此接口的情况下绑定属性吗 例如我有代码 public class StudentData INotifyProp
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • ASP.NET MVC 中 ModelState.AddModelError 中的关键参数有什么意义?

    我在我的控制器中添加了验证检查来修改ModelState如果验证失败 例如 private bool ValidateMoney string raw string name decimal min decimal max try var
  • 该组件没有由 uri 标识的资源

    我想创建一个通用数据网格以在我的所有视图 用户控件上使用 这是我的结构 Class Library called Core Class called ViewBase public class ViewBase UserControl pu
  • char* argv[] 在 c/c++ 中如何工作? [复制]

    这个问题在这里已经有答案了 我知道它用于使用命令行中的参数 但我没有得到声明 字符 argv 它是否意味着指向 char 数组的指针 如果是的话为什么没有大小 如果不是动态数组 就不需要有大小吗 我做了一些研究 发现有人说它会衰减为 cha
  • 从 exit() 和 fork() 返回的结果奇怪地发生了位移

    我有一个 C 代码 有时会自行分叉 每个分叉都会执行一些操作 然后返回一个错误代码 目前 每个子进程返回其 ID 0 n void other int numero exit numero int main for int i 0 i lt
  • 字符串 c 的二叉树

    我正在尝试实现一个能够在 c 中保存字符串的二叉树 在让代码适用于整数之后 我尝试稍微修改它以处理字符数组 现在我似乎完全破解了代码 但不知道如何破解 任何帮助表示赞赏 include
  • 修改代码以从 Windows 中的 PE 可执行文件检索双重签名信息?

    我已经挣扎了一段时间想要修改这段代码示例 https support microsoft com en us help 323809 how to get information from authenticode signed execu
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方
  • 获取会议组织者邮件地址 EWS API

    我想使用 EWS API 获取会议组织者的邮件地址 目前 我刚刚获得约会项目的一些属性 我听说你可以设置你想要获取哪些属性 我的代码看起来像这样 CalendarView cview new CalendarView start end c
  • 扔掉挥发物安全吗?

    大多数时候 我都是这样做的 class a public a i 100 OK delete int j Compiler happy But is it safe The following code will lead compilat

随机推荐

  • 正弦函数的频谱图(FFT)

    从理论上讲 正弦函数的傅里叶变换是冲击函数 它的幅值为原正弦信号幅值的1 2倍 即 若x t Acos t 则其频谱幅值最大值为A 2 如左图 但是 我们用matlab求出来的频谱图却不是左边这样的 而是右图 原因是 1 理论中的正弦信号是
  • 分布式时序相似查询初探

    时序数据 即随时间变化的数据 在人们的日常生活中无处不在 过去的近十年来 随着电子监控和智能穿戴等设备的普及 更是产生了海量的时序数据 例如 经过多年的发展 火力发电行业的数字化程度已经达到了很高的水平 以一台60万千瓦的中型火电机组为例
  • c#复习题(简答题:基础+面向对象)

    1 简答题 填写程序 要求如下 输入三角形三条边 先判断是否可以构成三角形 如果可以 则求三角形的周长和面积 否则报错 提示 输入的三个数构成三角形三边的条件 每条边长均大于0 并且任意两边之和大于第三边 代码编写 static void
  • 从zookeeper官方文档系统学习zookeeper

    从zookeeper官方文档系统学习zookeeper 1 zookeeper 2 zookeeper 文档 3 zookeeper 单机版 3 1 配置 3 2 启动 3 3 验证 4 zookeeper 集群版 4 1 配置 4 2 启
  • centos7 Jumpserver堡垒机部署以及使用详情

    一 跳板机 堡垒机的概念 1 跳板机 跳板机就是一台服务器 运维人员在使用管理服务器的时候 必须先连接上跳板机 然后才能去操控内网中的服务器 才能登录到目标设备上进行维护和操作 跳板机的缺点 仅仅实现服务器登录安全 但是没有实现对于运维人员
  • ChatGPT-Sorry, you have been blocked 解决办法

    使用无痕模式登录 已谷歌浏览器举例 右上点打开性的无痕模式 再访问地址 如下 可以继续登录了
  • Hadoop生态概述及常见报错

    Hadoop Hadoop是一个开源框架来存储和处理大型数据在分布式环境中 它包含两个模块 一个是MapReduce 另外一个是Hadoop分布式文件系统 HDFS MapReduce 它是一种并行编程模型在大型集群普通硬件可用于处理大型结
  • 亲测有效win10系统QQ音乐无法安装

    本人使用win10专业版时 因为一些原因 多次下载qq音乐都无法进入安装界面 找了很多原因都无法解决 最后在网上找到好像是因为火绒的原因 于是关闭火绒 再次尝试安装 遂成功 实在不行可以卸载火绒安全后重启电脑 再从官网重新下载QQ音乐安装包
  • 数据预处理-独热编码(One-Hot)

    1 部分特征如人的性别有男女 国家有中国 美国 法国等 并不是连续的 而是离散的 无序的 通常我们需要对其进行特征数字化 2 假如某个样本 某个人 他的特征是这样的 男 中国 乒乓球 我们可以用 0 0 4 来表示 但是这样的特征处理并不能
  • BeautifulSoup基本用法总结

    BeautifulSoup是Python的一个库 最主要的功能就是从网页爬取我们需要的数据 BeautifulSoup将html解析为对象进行处理 全部页面转变为字典或者数组 相对于正则表达式的方式 可以大大简化处理过程 0x01 安装 建
  • Leetcode 106. 从中序与后序遍历序列构造二叉树

    文章目录 题目 代码 9 18 首刷自解 题目 Leetcode 106 从中序与后序遍历序列构造二叉树 代码 9 18 首刷自解 class Solution public unordered map
  • UE4文字显示乱码“字字字字字字字字”的解决办法

    键盘win R 搜索fonts 2 滑到最底下右键复制 宋体常规简体字 3 复制到ue4项目的字体文件夹中 如下 注意在外部文件处复制 4 回到项目界面 此时右下角会有个弹窗提示是否确认导入 点击导入 然后会弹一个 字体样式导入选项 弹框
  • openGauss学习笔记-63 openGauss 数据库管理-资源池化架构

    文章目录 openGauss学习笔记 63 openGauss 数据库管理 资源池化架构 openGauss学习笔记 63 openGauss 数据库管理 资源池化架构 本文档主要介绍资源池化架构下的一些最佳实践和使用注意事项 用于支撑对相
  • go Cobra命令行工具入门

    简介 Github https github com spf13 cobra Star 26 5K Cobra是一个用Go语言实现的命令行工具 并且现在正在被很多项目使用 例如 Kubernetes Hugo和Github CLI等 通过使
  • Failed to set locale, defaulting to C.UTF-8解决方法

    CentOS 8Linux系统提示 Failed to set locale defaulting to C UTF 8 这是由于没有配置正确的语言环境导致的 Linux百科 使用root账户登录你的CentOS操作系统 然后执行两条命令
  • 现阶段计算机网络技术专业人才培养的发展对策

    确立具有高职特色的人才培养目标 在市场经济的条件下 人才培养首先要适应市场需求 以市场行业的需求为导 向制定人才培养目标 学校人才培养是否能满足社会需求 可以通过学生在对口行 业及相关领域的就业情况来衡量 高职教育培养高技能应用型人才 与研
  • Objective-C中的封装、继承、多态、分类

    封装 封装最好理解了 封装是面向对象的特征之一 是对象和类概念的主要特性 封装 也就是把客观事物封装成抽象的类 并且类可以把自己的数据和方法只让可信的类或者对象操作 对不可信的进行信息隐藏 继承 面向对象编程 OOP 语言的一个主要功能就是
  • 测试工具73款

    我们将本文的软件测试工具分为4类 1 Web应用测试工具 2 网站安全测试工具 3 跨浏览器测试工具 4 移动应用测试工具 注 工具排名没有任何意义 1 Web应用测试工具 我们列出了一些在Web应用程序上执行性能 负载和压力测试的关键工具
  • 开源项目MiniWord .NET Word 操作由Word模板和数据简单、快速生成文件

    MiniWord NET Word 介绍 MiniWord NET Word模板引擎 藉由Word模板和数据简单 快速生成文件 image Getting Started 安装 nuget link https www nuget org
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2