Ubuntu 20中在LXD容器内安装ROS
快速构建并销毁一个完整的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: []
说明:
- 查看现有id可以用如下命令
~$ id
uid=1001(xh) gid=1001(xh) groups=1001(xh),27(sudo)
- repositories的地址,参照ROS官方安装手册中增加ROS 2和ROS 1的repositories
- 使用X0设备用作XWindow显示,若有多张显卡,也可以使用其他显卡
~$ ls /tmp/.X11-unix/
X1024 X1025
- 查看现有网络设置可以用如下命令
~$ 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相关推荐
- Ubuntu 20中安装SNAP
Ubuntu 20中安装SNAP 0 前言 1 下载SNAP安装包 2 安装SNAP详细步骤 0 前言 姊妹篇<Ubuntu 20中安装snaphu> SNAP是欧空局领导开发的开源的遥感 ...
- 解决Docker容器内安装chrome浏览器无法启动bug
前言 之前有写过一个基于Ubuntu20.04 的Docker容器的可视化Dockerfile,当时默认火狐浏览器,今天要测试一个项目就run了一个可视化容器,但是我需要用到chrome浏览器,于是乎 ...
- Ubuntu 20.04向日葵远程下载及安装记录
Ubuntu 20.04向日葵远程下载及安装记录 下载向日葵 下载向日葵用来远程,去向日葵官网,选择图形版本(命令行版本不支持发起远控) 安装向日葵 进入到下载目录,进行安装 sudo dpkg -i ...
- Ubuntu 20.04.4 LTS下载、安装、部分配置
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Ubuntu 20.04.4 LTS下载链接 二.安装过程 三.部分配置 1.更新源服务器为国内地址 2.安装中文 ...
- Ubuntu 20.04增加Deepin源以安装应用商城内最新版的微信、钉钉
文章目录 前言 添加i386架构 添加Deepin软件源 设置源优先级 添加XDG_DATA_DIRS配置 更新源 应用安装 解决小图标变wine system tray悬浮窗问题 解决安装后无法启动 ...
- VMWare中Ubuntu 20.04.3 LTS编译、安装FFmpeg
记:准备入坑FFmpeg了,之前在Windows平台尝试编译FFmpeg源码,屡次失败,准备先在Ubuntu环境编译进行学习,之后再尝试在Windows环境下编译源码. 一.准备 Ubuntu 20. ...
- docker 容器内安装ps命令
docker exec -it 793d8 /bin/sh 进入容器内, 使用 ps -ef | grep java 报了错: 问题出在docker 容器linux没有安装procps工具 在命令行 ...
- 在docker 容器内安装网易云音乐要点记录
我笔记本上现在装了Gentoo Linux, 担心不兼容,就把网易云音乐,WPS等装到Docker容器里面了,初始基于 ubuntu 镜像, docker daemon 配置成rootless con ...
- 联想拯救者 Ubuntu 20.04 Nvidia GTX1650 显卡驱动安装问题解决
本文解决关于联想拯救者安装 Ubuntu 20.04 过程中,由于 Nvidia GTX1650 显卡而导致的问题. 重要提示:本文仅限于搭载 Nvidia GTX1650 显卡的联想拯救者系列笔记本 ...
最新文章
- Castle IOC容器内幕故事(上)
- 「BZOJ 2342」「SHOI 2011」双倍回文「Manacher」
- python进阶书籍推荐-豆瓣评分9.4!年度最值得推荐的Python进阶书
- 淘宝旺铺基础版装修出专业版效果(不花钱也一样做到)
- MobaXterm通过SSH连接centOS7
- (转) iPhone UI 开发的几点建议
- mysql存储过程语法 if_mysql存储过程语法 if
- linux系统中如何安装qwt,linux下Qt开发环境中qwt库的安装与使用
- 集群没有leader_ZooKeeper 集群中 Leader 与 Follower 的4种数据同步策略
- phpstudy apache无法启动_phpstudy和wamp哪个好
- 如何在SQL Server中检查日期是否为假期
- 《Python Cookbook(第3版)中文版》——1.5 实现优先级队列
- 使用HttpClient 发送 GET、POST、PUT、Delete请求及文件上传
- linux网络适配器驱动程序怎么安装,英特尔?服务器适配器 — Linuxixgbe* 基础驱动程序概述和安装...
- 坦克世界无法连接服务器未响应,打开坦克世界提示网络异常或者连接不上
- BNS100数码人像采集系统产品说明书
- CTOD安悦系统目录转移软件
- 大白菜无法打开计算机硬盘,大白菜pe系统检测不到硬盘怎么办?
- sqlserver如何快速生成不重复的随机数据
- STM32MP157C-DK2->Develop on Arm® Cortex®-A7之 开启UART7串口功能
热门文章
- matlab 倒数第二个位置_MATLAB中运行以下程序后倒数第二部分画图程序要怎么改??、、、...
- python按列输出字符_如何根据条件在Pandas中构建新列(新列应输出字符串)
- python读取上一级文件夹下的图片
- 整数划分问题的递归算法-c语言,简单的整数划分问题(递归)
- 小程序获取用户信息_App自评估指南:小程序也可参考,第三方获取信息需获用户授权...
- anacondapythonyolo3配置_Windows anaconda 运行yolov3
- 【BUG记录】百度人脸识别采集黑屏
- Android开发之android4.4沉浸式状态栏后toolbar和状态栏重复(重叠,覆盖)的bug
- 史上最完整的iOS DIY framework 详细教程(一)
- 菜单自定义图标_操作系统任务栏了解多少,Windows server 2008 R2自定义通知区域...