快速构建并销毁一个完整的ROS套件。
关于容器的更多细节可以参考linuxcontainer.org

配置容器

基础lxd创建工作

安装lxd

~$ sudo snap install lxd

安装后用

~$ sudo lxc info

查看信息如下:

If this is your first time running LXD on this machine, you should also run: lxd init
To start your first instance, try: lxc launch ubuntu:18.04
……
……
……

初始化lxd
根据提示运行

~$ sudo lxd init

按照默认一路回车

Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (btrfs, dir, lvm, zfs, ceph) [default=zfs]:
Create a new ZFS pool? (yes/no) [default=yes]:
Would you like to use an existing empty block device (e.g. a disk or partition)? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=30GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like the LXD server to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

查看lxc的profile

~$ sudo lxc profile list
+---------+---------------------+---------+
|  NAME   |     DESCRIPTION     | USED BY |
+---------+---------------------+---------+
| default | Default LXD profile | 0       |
+---------+---------------------+---------+

创建ROS lxc配置

创建lxc的ros profile

~$ sudo lxc profile create rosp
Profile ros created

修改lxc的ros profile

~$ sudo lxc profile edit ros

修改文件至如下:

### This is a YAML representation of the profile.
### Any line starting with a '# will be ignored.
###
### A profile consists of a set of configuration items followed by a set of
### devices.
###
### An example would look like:
### name: onenic
### config:
###   raw.lxc: lxc.aa_profile=unconfined
### devices:
###   eth0:
###     nictype: bridged
###     parent: lxdbr0
###     type: nic
###
### Note that the name is shown but cannot be changedconfig:
### X Window显示environment.DISPLAY: :0
### 从宿主机映射userid至容器raw.idmap: both 1001 1000
### 增加ros repositoriesuser.user-data: |#cloud-configruncmd:- "apt-key adv --fetch-keys https://raw.githubusercontent.com/ros/rosdistro/master/ros.key"- "apt-add-repository http://packages.ros.org/ros2/ubuntu"- "apt-add-repository http://packages.ros.org/ros/ubuntu"
description: ROSX0:path: /tmp/.X11-unix/X0source: /tmp/.X11-unix/X0type: disk
### 网络设置为桥接eth0:name: eth0nictype: bridgedparent: lxdbr0type: nicroot:path: /pool: defaulttype: disk
name: ros
used_by: []

说明

  1. 查看现有id可以用如下命令
~$ id
uid=1001(xh) gid=1001(xh) groups=1001(xh),27(sudo)
  1. repositories的地址,参照ROS官方安装手册中增加ROS 2和ROS 1的repositories
  2. 使用X0设备用作XWindow显示,若有多张显卡,也可以使用其他显卡
~$ ls /tmp/.X11-unix/
X1024  X1025
  1. 查看现有网络设置可以用如下命令
~$ ifconfig
eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.46.29  netmask 255.255.255.0  broadcast 192.168.46.255inet6 fe80::bb30:ed6a:6ec:6bbd  prefixlen 64  scopeid 0x20<link>ether 48:0f:cf:37:a8:a4  txqueuelen 1000  (Ethernet)RX packets 26905  bytes 4373082 (4.3 MB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 15366  bytes 1836647 (1.8 MB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0device interrupt 20  memory 0xf7800000-f7820000lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::1  prefixlen 128  scopeid 0x10<host>loop  txqueuelen 1000  (Local Loopback)RX packets 195  bytes 16883 (16.8 KB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 195  bytes 16883 (16.8 KB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

取可连接外网的网卡名

确认ros profile创建成功

~$ sudo lxc profile list
+---------+---------------------+---------+
|  NAME   |     DESCRIPTION     | USED BY |
+---------+---------------------+---------+
| default | Default LXD profile | 0       |
+---------+---------------------+---------+
| ros     | ROS                 | 0       |
+---------+---------------------+---------+

启动容器

使用lxc launch创建相关的ros容器
我们这里使用ubuntu 20.04的镜像

~$ sudo lxc launch -p ros ubuntu:20.04 rosgalactic
Creating rosgalactic
Starting rosgalactic

用lxc exec来启动容器内的bash shell

~$ sudo lxc exec rosgalactic -- bash
root@rosgalactic:~#

在默认情况下,shell是以root账户启动的
用exit命令可以退出该shell。

指定用户启动
我们可以用–login来指定启动的账户

~$ sudo lxc exec rosgalactic -- su --login ubuntu
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.ubuntu@rosgalactic:~$ id
uid=1000(ubuntu) gid=1000(ubuntu) groups=1000(ubuntu),4(adm),20(dialout),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),117(netdev),118(lxd)
ubuntu@rosgalactic:~$

安装ROS

ubuntu@rosgalactic:~$ sudo apt install ros-galactic-desktop

关于ROS本身安装中的问题请参照ROS2学习(一).Ubuntu 20.04安装ROS2 Galactic 。

启动确认

ubuntu@rosgalactic:~$ rqt

添加快速启动参数

~$ sudo lxc alias add ubuntu 'exec @ARGS@ --user 1000 --group 1000 --env HOME=/home/ubuntu -- /bin/bash --login'
~$ sudo lxc alias list
+--------+-----------------------------------------------------------------------------------+
| ALIAS  |                                      TARGET                                       |
+--------+-----------------------------------------------------------------------------------+
| ubuntu | exec @ARGS@ --user 1000 --group 1000 --env HOME=/home/ubuntu -- /bin/bash --login |
+--------+-----------------------------------------------------------------------------------+
~$ sudo lxc ubuntu rosgalactic
ubuntu@rosgalactic:~$ source /opt/ros/galactic/setup.bash
ubuntu@rosgalactic:~$ ros2 run demo_nodes_cpp talker

至此,大功告成!

Ubuntu 20中在LXD容器内安装ROS相关推荐

  1. Ubuntu 20中安装SNAP

    Ubuntu 20中安装SNAP 0 前言 1 下载SNAP安装包 2 安装SNAP详细步骤 0 前言 姊妹篇<Ubuntu 20中安装snaphu> SNAP是欧空局领导开发的开源的遥感 ...

  2. 解决Docker容器内安装chrome浏览器无法启动bug

    前言 之前有写过一个基于Ubuntu20.04 的Docker容器的可视化Dockerfile,当时默认火狐浏览器,今天要测试一个项目就run了一个可视化容器,但是我需要用到chrome浏览器,于是乎 ...

  3. Ubuntu 20.04向日葵远程下载及安装记录

    Ubuntu 20.04向日葵远程下载及安装记录 下载向日葵 下载向日葵用来远程,去向日葵官网,选择图形版本(命令行版本不支持发起远控) 安装向日葵 进入到下载目录,进行安装 sudo dpkg -i ...

  4. Ubuntu 20.04.4 LTS下载、安装、部分配置

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Ubuntu 20.04.4 LTS下载链接 二.安装过程 三.部分配置 1.更新源服务器为国内地址 2.安装中文 ...

  5. Ubuntu 20.04增加Deepin源以安装应用商城内最新版的微信、钉钉

    文章目录 前言 添加i386架构 添加Deepin软件源 设置源优先级 添加XDG_DATA_DIRS配置 更新源 应用安装 解决小图标变wine system tray悬浮窗问题 解决安装后无法启动 ...

  6. VMWare中Ubuntu 20.04.3 LTS编译、安装FFmpeg

    记:准备入坑FFmpeg了,之前在Windows平台尝试编译FFmpeg源码,屡次失败,准备先在Ubuntu环境编译进行学习,之后再尝试在Windows环境下编译源码. 一.准备 Ubuntu 20. ...

  7. docker 容器内安装ps命令

    docker exec -it 793d8 /bin/sh 进入容器内, 使用 ps -ef | grep java  报了错: 问题出在docker 容器linux没有安装procps工具 在命令行 ...

  8. 在docker 容器内安装网易云音乐要点记录

    我笔记本上现在装了Gentoo Linux, 担心不兼容,就把网易云音乐,WPS等装到Docker容器里面了,初始基于 ubuntu 镜像, docker daemon 配置成rootless con ...

  9. 联想拯救者 Ubuntu 20.04 Nvidia GTX1650 显卡驱动安装问题解决

    本文解决关于联想拯救者安装 Ubuntu 20.04 过程中,由于 Nvidia GTX1650 显卡而导致的问题. 重要提示:本文仅限于搭载 Nvidia GTX1650 显卡的联想拯救者系列笔记本 ...

最新文章

  1. Castle IOC容器内幕故事(上)
  2. 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」
  3. python进阶书籍推荐-豆瓣评分9.4!年度最值得推荐的Python进阶书
  4. 淘宝旺铺基础版装修出专业版效果(不花钱也一样做到)
  5. MobaXterm通过SSH连接centOS7
  6. (转) iPhone UI 开发的几点建议
  7. mysql存储过程语法 if_mysql存储过程语法 if
  8. linux系统中如何安装qwt,linux下Qt开发环境中qwt库的安装与使用
  9. 集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略
  10. phpstudy apache无法启动_phpstudy和wamp哪个好
  11. 如何在SQL Server中检查日期是否为假期
  12. 《Python Cookbook(第3版)中文版》——1.5 实现优先级队列
  13. 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
  14. linux网络适配器驱动程序怎么安装,英特尔?服务器适配器 — Linuxixgbe* 基础驱动程序概述和安装...
  15. 坦克世界无法连接服务器未响应,打开坦克世界提示网络异常或者连接不上
  16. BNS100数码人像采集系统产品说明书
  17. CTOD安悦系统目录转移软件
  18. 大白菜无法打开计算机硬盘,大白菜pe系统检测不到硬盘怎么办?
  19. sqlserver如何快速生成不重复的随机数据
  20. STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 开启UART7串口功能

热门文章

  1. matlab 倒数第二个位置_MATLAB中运行以下程序后倒数第二部分画图程序要怎么改??、、、...
  2. python按列输出字符_如何根据条件在Pandas中构建新列(新列应输出字符串)
  3. python读取上一级文件夹下的图片
  4. 整数划分问题的递归算法-c语言,简单的整数划分问题(递归)
  5. 小程序获取用户信息_App自评估指南:小程序也可参考,第三方获取信息需获用户授权...
  6. anacondapythonyolo3配置_Windows anaconda 运行yolov3
  7. 【BUG记录】百度人脸识别采集黑屏
  8. Android开发之android4.4沉浸式状态栏后toolbar和状态栏重复(重叠,覆盖)的bug
  9. 史上最完整的iOS DIY framework 详细教程(一)
  10. 菜单自定义图标_操作系统任务栏了解多少,Windows server 2008 R2自定义通知区域...