导航

CV学习日志:系统安装与环境配置

Posted on 2016-10-15 20:49  dzyBK  阅读(2760)  评论(2编辑  收藏  举报

1.系统安装与配置

1.1 常用链接汇总

0.重要链接

Windows10 ver: BuildXXX.YYYYVersionYearMonthYearH1YearH2H=HalfYear

Windows10 pre: https://www.microsoft.com/en-us/software-download/windowsinsiderpreviewiso

Windows10 vm: https://developer.microsoft.com/en-us/windows/downloads/virtual-machines

VCRedist links: https://docs.microsoft.com/en-US/cpp/windows/latest-supported-vc-redist

WSL release: https://docs.microsoft.com/en-us/windows/wsl/release-notes

WSL2 kernel: https://github.com/microsoft/WSL2-Linux-Kernel

Grub2 document: https://www.gnu.org/software/grub/manual/grub

ROS2 guidance: https://github.com/ros2/ros2

VPNProxy: https://github.com/getfotiaoqiang

HitHead: https://github.com/doocs/leetcode

KickHead: https://github.com/youngyangyang04/leetcode-master

MagicEaser: https://www.magiceraser.io

1.Win11配置

(1)安装驱动:IT天空万能驱动或驱动某某、安装WSL2GPU驱动、安装CUDA

(2)安装VS:仅选择桌面C++LinuxC++VS扩展

(3)启用功能SMB*NFS*Telnet*OpenSSH*FTP服务器、虚拟机平台、WSL

2.WinPE镜像

(1)优启通:延续性很明朗、IT天空推出、文件较大且多数工具外置、www.itsk.com

(2)电脑店:延续性较明朗、国内优秀备选、文件适中但半数工具外置、diannaodian.com

(3)WEPE:延续性较明朗、无忧启动推出、文件适中且所有工具内置、www.wepe.com.cn

3.Ubuntu启动修复

(1)ubuntu-live-or-custom.iso:延续性很明朗、需安装boot-repair、官方下载或自制镜像

(2)boot-repair-disk-64bit.iso:延续性很明朗、已安装boot-repair、官方社区支持并提供镜像

4.Ubuntu系统备份

(1)Systemback:延续性不明朗、配置可实时验证、https://github.com/BluewhaleRobot/systemback

(2)CUBIC:延续性不确定、配置需启动验证、https://launchpad.net/cubic

(3)Timeshift:延续性很明朗、不能生成启动镜像、https://github.com/teejee2008/timeshift

(4)Clonezilla:延续性很明朗、不能生成启动镜像、https://clonezilla.org/livehd.php

(5)Grub2ISO:使用persistent启动镜像(https://help.ubuntu.com/community/Grub2/ISOBoot/Examples)

5.USB启动盘制作

(0)A1ive:延续性较明朗、Grub2ExtGrub2FM创建者、https://a1ive.github.io

(1)Ventoy:延续性很明朗、启动新纪元革命者、https://github.com/ventoy

(2)Easy2Boot:延续性不确定、基于Grub4DOS/Grub2FM/Ventoryhttps://easy2boot.xyz

(4)YUMI:延续性较明朗、基于GNUGrub2、各种自制教程、https://www.pendrivelinux.com

(3)AIOBoot:延续性较明朗、基于Grub4DOS/Grub2FMhttps://www.aioboot.com/en/newgen

(5)Grub2Win:延续性较明朗、基于GNUGrub2https://sourceforge.net/projects/grub2win

(6)Clonezilla:延续性很明朗、下载ZIP包解压到ESP分区、https://clonezilla.org/livehd.php

(7)GNUGrub2:延续性极明朗、下载Grub2或基于Ubuntu安装、https://ftp.gnu.org/gnu/grub

:可通过VentoyYUMI的支持列表查看盛行的系统备份/启动修复/启动制作工具

1.2 Grub2启动盘制作

1.优盘或硬盘分区:数据分区DAT(NTFS)、启动分区ESP(FAT32)

2.安装Grub2WinC:/Grub2(启动原理见帮助文档):复制C:/Grub2(此为Grub2Win所有文件)ESP分区、复制/ESP/Grub2/g2bootmgr/ESP/efi/grub2win/g2bootmgr

3.下载AIOBoot提取启动文件(解压密码aioboot)解压/AIO_Boot_NewGen_Setup.exe/files/*ESP分区、可新建/ESP/AIO/Menu/custom.cfg添加期望的启动。

4.自定义启动:复制/ESP/efi/grub2win/g2bootmgr/gnugrub.kernel64.efi/ESP/efi/boot/bootx64.efi、编辑/ESP/Grub2/grub.cfg为期望的启动。

5.得到WinPE下载WEPE提取ISO可得WinPE下载优启通提取ISO可得WinPE(可选解压PETOOLSESP分区以增强功能)、下载电脑店解压可得WinPE,全部放于/ESP/lives目录。

6.启用WinPEAIOBoot可直接启动WinWIMWinISOLinuxISOBootableVHD,或将WinPE.Wim通过bootice添加到BCD

7.恢复多系统AIOBoot进入WinPE恢复WindowsAIOBootGrub2Win自定义菜单进入UbuntuLive恢复系统,可进入Win10PE.wim修复Windows启动,可进入UbuntuLive.isoBootRepairDisk.iso通过BootRepair修复Ubuntu启动。

Grub2自定义菜单

set default=1

set timeout=10

menuentry 'Windows' {

set mnfile=/efi/microsoft/boot/bootmgfw.efi

search --file --set $mnfile

chainloader ($root)$mnfile

}

menuentry 'Ubuntu' {

set mnfile=/boot/vmlinuz

search --file --set $mnfile

chainloader ($root)/boot/grub/x86_64-efi/grub.efi #or configfile ($root)/boot/grub/grub.cfg

}

menuentry 'ubuntu-20.04.6-desktop-amd64.iso' {

set mnfile=/lives/ubuntu-20.04.6-desktop-amd64.iso

search --file --set $mnfile ###https://help.ubuntu.com/community/Grub2/ISOBoot/Examples

loopback loop ($root)$mnfile ###https://manpages.ubuntu.com/manpages/focal/en/man7/bootparam.7.html

linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$mnfile noprompt noeject

initrd (loop)/casper/initrd ###use initrd.gz for systemback’s ubuntu

}

menuentry 'clonezilla-live-2.8.0-27-amd64.iso' {

set mnfile=/lives/clonezilla-live-2.8.0-27-amd64.iso

search --file --set $mnfile

loopback loop $mnfile ###https://clonezilla.org/livehd.php->For hard drive

linux (loop)/live/vmlinuz boot=live union=overlay username=user config components quiet noswap edd=on nomodeset locales= keyboard-layouts= ocs_live_run="ocs-live-general" ocs_live_extra_param="" ocs_live_batch="no" vga=791 ip= net.ifnames=0 splash i915.blacklist=yes radeonhd.blacklist=yes nouveau.blacklist=yes vmwgfx.enable_fbdev=1 findiso=$mnfile

initrd (loop)/live/initrd.img

}

menuentry 'AIOBoot.EFI' { chainloader /EFI/aioboot/shimx64.efi }

menuentry 'Grub2Win.EFI' { chainloader /EFI/grub2win/g2bootmgr/gnugrub.kernel64.efi }

7.EFI/GUID启动概要

(1)主干启动流程:主板固件加载EFI文件EFI文件加载配置文件配置文件加载内核文件

(2)加载EFI文件

1)默认加载EFI/esp/efi/boot/bootx64.efi、可由任何系统的efi或自定义的efi重命名得到

2)其它路径EFI:由第三方工具(bootice)添加其它路径的efiUEFI启动管理器、或先加载能启动efiefi(uefishell.efi)再由此efi启动其它路径的efi

3)WindowsEFI/esp/efi/microsoft/boot/bootmgrfw.efi、此文件可复制到其它地方(因为其指向的启动配置文件使用的是绝对路径)且为方便管理可复制到/esp/efi/boot

4)UbuntuEFI/esp/efi/ubuntu/shimx64.efi&&grubx64.efi、此两文件可复制到其它地方(因为其指向的启动配置文件使用的是绝对路径)且为方便管理可复制到/esp/efi/boot

(3)加载配置文件

Win10OS/esp/efi/microsoft/boot/bootmgrfw.efi/esp/efi/microsoft/boot/bcd&&others

UbuntuOS/esp/efi/ubuntu/grubx64.efi/esp/efi/ubuntu/grub.cfg/boot/grub/grub.cfg&&x86_x64-efi&&others

Win10ISO/iso/efi/boot/bootx64.efi/iso/boot/bcd&&&boot.sdi&&others

UbuntuISO/iso/efi/boot/bootx64.efi /iso/boot/grub/grub.cfg&&x86_x64-efi&&others

(4)加载内核文件:不同的启动配置文件,其指向的系统核心文件不同

1.3 Ubuntu开发库汇总

1.库汇总与归类

(0)baseXXX+bootrepair+timeshift+cubic+systemback+docker+nomachine

(1)git+cmake+bcompare+vscode+qtcreator+cuda+tbb

(2)python3+ros2+gazebo+webots+plotjuggler

ros-foxy-gazeboXXX

ros-foxy-webotsXXX

ros-foxy-plotjugglerXXX

(3)qt+qglviewer+sdl2+boost

(4)magicenum+asio+rpclib+spdlog+CLI11+cereal+nlohmann+tinyxml2+yamlcpp

ros-foxy-spdlog-vendor

ros-foxy-tinyxml2-vendor

ros-foxy-yaml-cpp-vendor

(5)suitesparse+eigen+sophus+ceres+g2o+gtsam+nlopt+armadillo

ros-foxy-eigen3-cmake-module

ros-foxy-eigen-stl-containers

ros-foxy-sophus

ros-foxy-libg2o

#ros-noetic-nlopt

(6)rtklib+geographiclib+robot-localization

ros-foxy-robot-localization

ros-foxy-geodesy

ros-foxy-geographicXXX

(7)opencv+openvino+pcl(vtk+flann+qhull)+opengv+visp+ompl+mrpt

ros-foxy-cv-bridge

ros-foxy-vision-opencv

ros-foxy-pclXXX

#ros-noetic-visp

#ros-noetic-vision-visp(inst error currently)

ros-foxy-ompl

ros-foxy-mrpt2

(10)octomap+rtabmap+openvslam

ros-foxy-octomapXX

ros-foxy-octovis

ros-foxy-rtabmapXXX

ros-foxy-openvslamXXX

(11)cartographer+navigation2

ros-foxy-cartographerXXX

ros-foxy-navigation2

ros-foxy-navXXX

(12)mavsdk(mavlink)+mavros+PX4+APM

ros-foxy-mavrosXXX

(13)未规范包pangolin+msckf+rgbdslam-v2+orb-slam3+basalt

(14)ROS专包ros-foxy-rosbridge-suite

ros-foxy-ros1-bridge

ros-foxy-move-base-msgs

ros-foxy-control-msgs

ros-foxy-vision-msgs

ros-foxy-image-common

ros-foxy-joint-state-publisherXXX

ros-foxy-ros2-controlXXX

ros-foxy-joy/key/mouse-teleop

ros-foxy-teleop-joy/keyboard

ros-foxy-turtlebot3XXX

删除线表示官源无、绿色表示已有Win包、#表示仅ROS1

GCC编译链接失败:ln -sf /usr/bin/x86_64-linux-gnu-ld.gold /usr/bin/ld

2.关于python

(1)搜索位置分析

查看所有位置:python3 -m site

/usr/lib/python38.zip

/usr/lib/python3.8:随PythonX.Y安装

/usr/lib/python3.8/lib-dynload:随PythonX.Y安装

/usr/lib/python3/dist-packagesapt安装

/usr/local/lib/python3.8/dist-packagespip安装

/usrdir/.local

(2)查看安装版本

查看CV版本:import cv2 cv2.__version__

查看QT版本:import PyQt5.Qt as Qt Qt.PYQT_VERSION_STR

查看所有或指定版本:pip list -v pip show PyQT5

(3)手动安装版本

先试官源安装:当无时再用pip install安装

线上可用版本:pip install opencv-contrib-python==

安装指定版本:pip install opencv-contrib-python==xxx #opencv-python完全独立

1.4 Ubuntu安装与预配置

1.安装库

(1)预操作

WSL更新LinuxKernelwsl --update

WSL下载UbuntuXXXMSStore下载并创建用户和设置root密码(原下载是install.tar.gz)

WSL安装UbuntuXXX:运行EXE正规安装(命令导入install.tar.gz将不会创建普通账户)

PC启动官方ISO后执行:sudo umount -l /isodevice

(2)修改源

gedit /etc/apt/sources.list

deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse

(3)标准包

apt update && apt upgrade && apt install

openbsd-inetd telnetd net-tools

openssh-server openssh-client

samba samba-common smbclient cifs-utils

nfs-kernel-server nfs-common rpcbind vsftpd ftp

git apache2 apache2-utils cmake cmake-qt-gui python3 python3-pip python-is-python3 gedit

synaptic bleachbit terminator htop barrier fcitx fcitx-table-wbpy ubuntu-restricted-extras qtcreator

kazam guvcview ffmpeg libssh-dev ubuntustudio-default-settings gdm3 lightdm

grub-efi-amd64 grub-imageboot initramfs-tools squashfs-tools-ng gparted

isolinux extlinux pxelinux syslinux syslinux-efi syslinux-utils shim-signed

ninja-build rsync zip minicom joystick rtklib rtklib-qt

qtbase5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sensors5-dev

libqt5charts5-dev libqt5datavisualization5-dev libqt5x11extras5-dev

qtmultimedia5-dev qtdeclarative5-dev qtpositioning5-dev libboost-all-dev libasio-dev

python3-vcstool python3-colcon-common-extensions #NeedROSSource

python3-cerberus python3-future python3-pkgconfig python3-pygame python3-intelhex #PX4APM

python3-pyside2.qtcharts python3-pyside2.qtdatavisualization python3-pyqtgraphvirtualenvwrapper

libeigen3-dev libceres-dev libnlopt-cxx-dev libspdlog-dev libcereal-dev nlohmann-json3-dev libarmadillo-dev rtklib-qt

libopencv-dev libopencv-contrib-dev

ros-noetic-desktop-full ros-noetic-plotjuggler-ros ros-noetic-rosbridge-suite

ros-noetic-mavros-extras ros-noetic-nlopt ros-noetic-octomap-*(不含dbgsym)

ros-noetic-gazebo-*(不含dbgsym)ros-noetic-turtlebot3-*(不含dbgsymautorace)

ros-foxy-*(不含dbgsymconnext及冲突项:ros-foxy-rmf-building-sim-ignition-plugins

ros-foxy-rmf-demos-ignros-foxy-rmf-robot-sim-ignition-plugins ros-foxy-rmw-connext-cpp

ros-foxy-rmw-connext-shared-cppros-foxy-rosidl-typesupport-connext-*)

(4)附加包

安装MavROS依赖:ros2 run mavros install_geographiclib_datasets.sh

下载Gazebo模型https://github.com/osrf/gazebo_models/usr/share/gazebo-11/models

语言补全及输入法:设置->区域语言->管理安装语言->KIMS=fcitx并加入WubiPinyin

(5)

(6)WSL安装Win远程连接后安装VSCode插件(见后续PC安装)Win安装WSLGPU驱动

apt install linux-tools-5.4.0-77-generic hwdata

打开/etc/sudoers添加/usr/lib/linux-tools/5.4.0-77-genericsecure_path值开头

WSL到此转到配置并备份为XXX_BaseNoetic_FullFoyx.tgz

(7)PC安装vscode&bcompare&nomahcineapt install ./xxx.deb

VSCodeRoot登录:添加alias vscode='code --user-data-dir --no-sandbox'~/.bashrc

VSCode插件安装:C/C++ExtensionPack(MS)C/C++MathFVPythonExtensionPack

(8)PC安装dockerhttps://docs.docker.com/engine/install/ubuntu

添加源后执行:apt install docker-ce docker-ce-cli containerd.io

(9)PC安装boot-repairhttps://help.ubuntu.com/community/Boot-Repair(含各种系统级工具推荐)

推荐UNetbootin(github.com/unetbootin)等但Rufus(github.com/pbatard/rufus)官宣自己更快

add-apt-repository ppa:yannubuntu/boot-repair && apt update

apt install -y boot-repair && boot-repair

(10)PC安装timeshifthttps://github.com/teejee2008/timeshift

add-apt-repository -y ppa:teejee2008/timeshift

apt update && apt install timeshift

(11)PC安装cubichttps://launchpad.net/cubic

apt-add-repository universe && apt-add-repository ppa:cubic-wizard/release

apt update && apt install --no-install-recommends cubic

(12)PC安装systembackhttps://github.com/BluewhaleRobot/systemback

添加源后执行: apt update && sudo apt install systemback

恢复时要将/boot/efi安装到某分区(安装后再删除该分区即可)才能正常启动

PC到此转到配置并备份为General_BaseNoetic_FullFoxy.iso

(13)备份后PC安装GPU驱动和CUDA

查看推荐驱动:ubuntu-drivers devices

安装GPU驱动:apt install xxx-yyy-zzz

安装CUDA库:apt install nvidia-cuda-toolkit #nvcc --version

查看NVIDIA安装:nvidia-smi

切换NVIDIA显卡:nvidia-settings

查看当前显卡情况:settings->about

PC到此转到配置可备份为Special_BaseNoetic_FullFoxy_GPU_CUDA.iso

(14)备份后安装Webots/PX4/APM

安装PX4依赖:bash https://github.com/PX4/PX4-Autopilot/tree/master/Tools/setup/ubuntu.sh

安装APM依赖:bash ~/ardupilot/tree/master/Tools/environment_install/install-prereqs-ubuntu.sh

当前apt缺失的PX4PY依赖(20220301)kconfiglibnunavutpyulogpyyaml

当前apt缺失的APMPY依赖(20220301)pymavlinkMAVProxygeocoder

当前PX4支持虚拟环境,若无虚环则安装到.local(移除--user可安装到/usr/local)

当前APM强制安装PY包到.local,若使用虚拟环境需移除参数--user

当前APM强制升级PY包,若期望使用apt安装包或少安装包需移除参数-U

PC到此转到配置可备份为Timeshift_BaseNoetic_FullFoxy_GPU_CUDA_PX4_APM

(15)Ubuntu18.04说明:无squashfs-tools-nglibqt5datavisualization5-devpython3-pyside2*python3-cerberuspython3-pygamepython3-intelhexlibnlopt-cxx-dev,用snap安装barrier,用melodic替换noetic。备份的ISO可能不能识别某些NVME硬盘。

2.预配置

(1)PC启用root账户

sudo passwd root 设置密码

/usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf追加greeter-show-manual-login=true

/etc/pam.d/gdm-autologin注释auth required pam_succeed_if.so user!= root quiet_success

/etc/pam.d/gdm-password注释auth required pam_succeed_if.so user!= root quiet_success

/root/.profile注释mesg n 2> /dev/null || true追加tty -s && mesg n || true

自动root登录需要更新/etc/gdm3/custom.conf包含以下内容

AutomaticLoginEnable = true

AutomaticLogin = root

TimedLoginEnable = true

TimedLogin = root

TimedLoginDelay = 5

(2)PC启用root声音

终端执行(临时)/root/.profile追加(永久)pulseaudio --start --log-target=syslog

设置启动菜单:/etc/default/grub设置GRUB_TIMEOUT&STYLE=menu&30并终端update-grub

###增加Grub入口:编辑/etc/grub.d/40_custom终端update-grub(将更新到/boot/grub/grub.cfg)

(3)PC其它常用设置

防火设置:ufw allow 3389 5900

切换显管:dpkg-reconfigure gdm3/lightdm/kdm

查看显管:cat /etc/X11/default-display-managersystemctl status display-manager

设置Barrier屏幕名:AaronUPC #无法连接WinServer可能是Win中没有启动barrier服务

(4)PCdocker相关配置

配源:vim /etc/docker/daemon.json: {"registry-mirrors": ["http://hub-mirror.c.163.com"]}

重启:systemctl restart docker.service #系统转移设备后需删除/var/lib/docker后重启才可用

GUI界面:https://www.portainer.io/installation

docker pull portainer/portainer-ce

mkdir ~/PortainerCE

docker run -d -p 9000:9000 -h PortainerPC--name=PortainerPC --restart=always

-v /var/run/docker.sock:/var/run/docker.sock

-v ~/PortainerCE:/data portainer/portainer-ce

Browser: http://localhost:9000

ROS镜像:https://github.com/osrf/docker_images

1.3 Ubuntu配置与库测试

1.配置Telnet

(1)/etc/inetd.conf应有

telnet stream tcp nowait telnetd /usr/sbin/tcpd /usr/sbin/in.telnetd

(2)/etc/pam.d/login注释:auth requisite pam_nologin.so

###Ubuntu1804mv /etc/securetty /etc/securetty.bak

(3)重启:/etc/init.d/openbsd-inetd restart

(4)确认:执行netstat -a | grep telnet 应显示tcp…telnet…

(5)连接:telnet ip

2.配置SSH

(1)/etc/ssh/sshd_config设置

PermitRootLogin yes

PasswordAuthentication yes

(2)配置:dpkg-reconfigure openssh-server

(3)重启:/etc/init.d/ssh restart

(4)确认:执行ps -e |grep ssh应显示…sshd

(5)连接:ssh username@ip

(6)连接失败检查是否需要删除缓存:C:\Users\Administrator\.ssh

3.配置Samba

(1)/etc/samba/smb.conf追加

[root]

comment = root directory

path = /root

writeable = yes

browseable = yes

valid users = root


[ubuntu]

comment = system directory

path = /

writeable = yes

browseable = yes

valid users = root

(2)设密:smbpasswd -a root

(3)重启:/etc/init.d/smbd restart

(4)查看:smbclient -L ip –N

(5)连接:mount -t cifs -o username=root,password=aaron //ip/sharedPath localPath

(6)断开:umount localPath

(7)Win连接:Ctrl+R运行输入\\ip

(8)Win刷新:net use * /del /y

(9)无法访问:打开regedit->Computer->hkey_local_machine->Software->Policies-> Microsoft->

Windows->LanmanWorkstation->AllowInsecureGuestAuth=dword32bit=1;打开gpedit.msc->

计算机配置->管理模板->网络->Lanman工作站->启用不安全的来宾倒退=已启用

4.配置NFS

(1)/etc/exports追加

/root *(insecure,rw,sync,no_subtree_check,no_root_squash)

/ *(insecure,rw,sync,no_subtree_check,no_root_squash)

#*: 所有能ping到的主机可挂载

#192.168.0.*: 指定网段的主机可挂载

#192.168.1.12: 仅此主机能挂载

#ro/rw:只读/读写

#sync:同步

#no_root_squash: 不降低root用户的权限

(2)重启:/etc/init.d/rpcbind restart && /etc/init.d/nfs-kernel-server restart

(3)查看:showmount -e ip

(4)连接:mount -t nfs -o nolock ip:/sharedPath localPath

(5)断开:umount localPath

5.配置FTP

(1)/etc/vsftpd.conf查找如下项并设值

local_enable=YES#允许本地用户登录

write_enable=YES#允许上传

local_umask=000#操作权限无限制

chroot_local_user=YES#限制本地用户在自主目录

chroot_list_enable=YES#使指定本地用户可跨自主目录

chroot_list_file=/etc/vsftpd.chroot_list #可跨自主目录的本地用户

(2)/etc/ftpusers应无root和其它期望用于登录的本地账户

(3)/etc/vsftpd.chroot_list应有root和其它可跨自主目录的本地用户

(4)重启:/etc/init.d/vsftpd restart

(5)访问:文件浏览器输入ftp://ip

6.更改源码

(1)/usr/include/ceres/rotation.h添加:RotationMatrixToEulerAngles

(2)/opt/ros/foxy/include/rclcpp_action/server_goal_handle.hpp添加:

RCLCPP_SMART_PTR_DEFINITIONS_NOT_COPYABLE(ServerGoalHandle)

7.配置VSC

(1)FontFamily=宋体、FontSize=13TabSize=2

(2)LineHeight=1.1cmake.buildDirectory=${workspaceFolder}/out

8.追加.bashrc

#!bin/bash

read -t 5 -p "select ros version (1=ros1 or 2=ros2 or 3=ros12 or 11=ros1ex or 22=ros2ex 33=ros12ex or others=null): " ROSVER

if [ "$ROSVER" == "1" ]

then echo ros enviroment: ros1

source /opt/ros/noetic/setup.bash

elif [ "$ROSVER" == "2" ]

then echo ros enviroment: ros2

source /opt/ros/foxy/setup.bash

elif [ "$ROSVER" == "3" ]

then echo ros enviroment: ros12

source /opt/ros/noetic/setup.bash

source /opt/ros/foxy/setup.bash

export ROS_MASTER_URI=http://localhost:11311

elif [ "$ROSVER" == "11" ]

then echo ros enviroment: ros1ex

source ~/app/ros1ex/out/devel/setup.bash

elif [ "$ROSVER" == "22" ]

then echo ros enviroment: ros2ex

source ~/app/ros2ex/out/install/setup.bash

elif [ "$ROSVER" == "33" ]

then echo ros enviroment: ros12ex

source ~/app/ros1ex/out/devel/setup.bash

source ~/app/ros2ex/out/install/setup.bash

export ROS_MASTER_URI=http://localhost:11311

else echo ros enviroment: not set

fi

source /usr/share/gazebo/setup.sh

9.测试TB3/Carto/Nav2(置于TestInst.md)

(0)系统更新日志

20220301:主目录.vscode.vscode-server占空大而其它共约50MB/usr/local占空约200KB

(1)公共环境设置

export TURTLEBOT3_MODEL=burgerwafflewaffle_pi

source /usr/share/gazebo/setup.sh && source /opt/ros/foxy/setup.bash

(2)测试tb3sim基于tb3PKG

ros2 launch turtlebot3_gazebo empty_world.launch.py

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

ros2 launch turtlebot3_gazebo turtlebot3_house.launch.py

(3)测试cartographer基于tb3PKG

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

ros2 launch turtlebot3_cartographer cartographer.launch.py use_sim_time:=True

ros2 run turtlebot3_teleop teleop_keyboard

ros2 run nav2_map_server map_saver_cli -f ~/app/map

(4)测试nav2基于tb3PKG

ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py

ros2 launch turtlebot3_navigation2 navigation2.launch.py use_sim_time:=True

map:=/opt/ros/foxy/share/turtlebot3_navigation2/map/map.yaml

(5)测试nav2基于nav2PKG

(6)重启通信服务

/etc/init.d/openbsd-inetd restart

/etc/init.d/ssh restart

/etc/init.d/smbd restart

/etc/init.d/rpcbind restart && /etc/init.d/nfs-kernel-server restart

/etc/init.d/vsftpd restart

/etc/init.d/nxserver restart && /usr/NX/bin/nxserver –status ##/usr/NX/bin/nxplayer

(7)修复并清理包

apt install --fix-missing #修复缺失的包

apt install --fix-broken #修复不完整的包

apt autoremove #卸载不再被依赖的孤立包

apt autoclean #清理已被卸载的软件的安装包

apt clean #清理所有安装包

#apt remove --purge softname #卸载并删除配置

10.测试cxx/ros1ex/ros2ex(测试后删除所有)

(1)ros1ex:ewok

(2)ros2ex:

11.备份说明

(1)BleachBit清理:除VIMSwapFilesAcrossSystemFreeDiskSpaceMemory

(2)配置测试脚本:TestInst.md并用于记录系统更新及相关操作

(3)备份文件确认:主目录.vscode.vscode-server占空大而其余都小,/usr/local占空小

12.测试WebotsROS

13.测试PX4/APM

1.4 Ubuntu常用配置总结

1.环境变量

(1)可设置处

/etc/environment:系统启动时加载

/etc/profile:每个用户首次登录时加载

/etc/bash.bashrc:每个用户每次打开shell时加载

~/.profile:对应用户首次登录时加载

~/.bashrc:对应用户每次打开shell时加载

立即生效:source /etc/bash.bashrc source ~/.bashrc

(2)设置变量

C头文件:export C_INCLUDE_PATH = dzypath:${C_INCLUDE_PATH}

CXX文件:export CPLUS_INCLUDE_PATH = dzypth:${CPLUS_INCLUDE_PATH}

对静态库文件:export LIBRARY_PATH = dzypath: ${LIBRARY_PATH}

对动态库文件:export LD_LIBRARY_PATH = dzypath:${LD_LIBRARY_PATH} 或 修改/etc/ld.so.conf并执行ldconfig

对可执行文件:export PATH = dzypath:${PATH}

2.自启脚本

(1)/etc/profile.d目录创建期望的启动脚本即可(名字任意如ros2exam.sh)

#!/bin/bash

if pgrep -x "publisher_lambd" > /dev/null

then

echo "publisher_lambda started and not restarted yet"

else

source /opt/ros/foxy/setup.bash

ros2 run examples_rclcpp_minimal_publisher publisher_lambda &

fi

#&:以防止阻塞在登录界面

#加进程名判断:防止telnetssh等登录时重复启动

#进程名查询:top | grep xxx ps aux | grep xxx

#系统资源查询:htop

(2)使用说明:程序随启动该脚本的终端或GUI退出而退出。

1.仓库源

(1)存储位置:/etc/apt/sources.list/etc/apt/sources.list.d/*.list

Ubuntu官方源追加/etc/apt/sources.list

第三方源新建并保存到/etc/apt/sources.list.d/DIY.list

(2)管理工具:文本工具、synapticadd-apt-repository

2.APT密钥

(1)存储位置:/etc/apt/trusted.gpg/etc/apt/trusted.gpg.d/*.gpg

(2)管理工具:apt-key

(3)常用操作:查看所有APT密钥{app-key list}

(4)注意事项:在ubuntu22.04及之后将遗弃而改用keyrings

3.Keyrings密钥

(1)存储位置:/usr/share/keyrings/*.gpg

(2)管理工具:


NoeticROS添加密钥分析curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

(1)curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc:下载密钥到stdins不打印任何信息

(2)sudo apt-key add -:将stdin密钥添加到/etc/apt/trusted.gpg,这里-表示stdin

FoxyROS添加密钥分析curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

(1)curl -sSL …/xxx.key -o …/yyy.gpg:下载密钥到指定文件,s不打开任何信息,S打印错误,L自动跳转到新网址,o输出到哪个文件

1.5 ROS2环境分析与配置

0.ROS编译包典型组成

(1)更新~/ros2/share

1)添加目录~/ros2/share/xxx

2)添加文件~/ros2/share/colcon-core/packages/xxx

3)添加文件~/ros2/share/ament_index/resource_index/packages/xxx

4)添加文件~/ros2/share/ament_index/resource_index/rosidl_interfaces/xxx(仅针对CPP)

5)添加文件~/ros2/share/ament_index/resource_index/parent_prefix_path/xxx(仅针对CPP)

6)添加文件~/ros2/share/ament_index/resource_index/package_run_dependencies/xxx(仅针对CPP)

(2)更新~/ros2/lib

1)添加目录~/lib/xxx(仅当有exe生成时)

2)添加文件~/lib/xxx*.lib(仅针对CPP)

3)添加目录~/lib/[python*.*/]site-packages/xxx(查看CPP包和Python包区别)

4)添加目录~/lib/[python*.*/]site-packages/xxx-***-py*.*.egg-info(仅针对Python)

(3)对于~/ros2/include:添加目录~/include/xxx(仅针对CPP)

(4)对于~/ros2/bin:添加动态库文件~/bin/xxx*.dll(仅针对CPP包且Windows系统)

0.setup.xx主要工作

(1)更新CMAKE_PREFIX_PATHAMENT_PREFIX_PATHCOLCON_PREFIX_PATH

(2)更新ROS_DISTROROS_PYTHON_VERSIONROS_LOCALHOST_ONLY

(3)更新PATHPYTHONPATH

0.特定配置

(1)调用内置工具:追加binscriptsPath、配置AMENT_PREFIX_PATH为如D:/app/ros2

(2)调用特定结点:追加binlib/xxxPath、配置AMENT_PREFIX_PATH为如D:/app/ros2

(3)相同网段分组:set ROS_DOMAIN_ID=0 #此值相同才能相互通信

(4)设置DDSset RMW_IMPLEMENTATION=xxx

rmw_cyclonedds: rmw_cyclonedds

rmw_fastrtps: rmw_fastrtps_cpp, rmw_fastrtps_dynamic_cpp, rmw_fastrtps_shared_cpp

rmw_connext: rmw_connext_cpp, rmw_connext_dynamic_cpp, rmw_connext_shared_cpp

rmw_connextdds: rmw_connextdds, rmw_connextddsmicro, rmw_connextddsmicro_common

(5)对于CyCloneDDSset CYCLONEDDS_URI=file://C:\cyclonedds.xml

1.ROS官方开发模式

(1)创建工程:分为命令创建和手动创建

1)命令创建:ros2 pkg create --build-type cmake/ament_cmake/python_cmake rossim --dependencies rclcpp others,这将创建rossim目录,并在rossim内创建CMakeLists.txtpackage.xml

2)手动创建:创建rossim,然后在rossim内创建CMakeLists.txtpackage.xml并添加期望的依赖库,xml至少包含结点解决方案名name, version, description, maintainerlicense

(2)添加依赖:编辑CMakeLists.txtpackage.xml

1)CMakeLists.txtpackage.xml内容是相互对应的关系

2)CMakeLists.txt主要是定位所依赖的ROS库:find_package

3)package.xml主要是描述所依赖的ROS库:depend, build_depend, buildtool_depend, exec_depend

(3)创建环境:创建ros2vc.batros2vs.bat,参见后续内容。

(4)编译工程:基于ros2vc进入~/rossim/out中执行colcon build --merge-install --base-paths ..,所有编译结果位于~/rossim/out/install

(5)常用编译构建项:colcon build

[--merge-install]

[--build-base BUILD_BASE] [--install-base INSTALL_BASE] [--base-paths [PATH [PATH ...]]]

[--packages-ignore [PKG_NAME [PKG_NAME ...]]] [--packages-select [PKG_NAME [PKG_NAME ...]]][--packages-skip [PKG_NAME [PKG_NAME ...]]]

[--cmake-args [* [* ...]]] [--ament-cmake-args [* [* ...]]][--catkin-cmake-args [* [* ...]]]

2.ROS最简开发模式

(1)生成工程:创建工程、添加依赖与官方模式相同,基于D:/app/ros2/setup.bat打开cmake-gui生成CPPVS工程

(2)创建依赖:追加环境变量~/xxx/out/Debug~/xxx/out/Release或者先编译生成xxx__rosidl_*.dll并复制到存在的环境变量目录中

(3)编译工程:基于D:/app/ros2/setup.bat打开CPPVS工程进行编译调试(xxx_python.lib无需理会因为只关注CPP调试)

3.ROS两段开发模式

(1)创建依赖:用官方开发模式单独生成依赖于D:/app/ros2ex/out/install/setup.batD:/app/ros2ex/out/install/local_setup.bat(后者不包含执行D:/app/ros2/setup.bat)

(2)生成工程:在CMakeLists中增加包含D:/app/ros2/includeD:/app/ros2ex/out/install/include和链接D:/app/ros2/lib/*.libD:/app/ros2ex/out/install/lib/*.lib后生成CPPVS工程

(3)编译工程:基于D:/app/ros2ex/out/install/setup.bat打开CPPVS工程进行编译调试

(4)编译工程(永远模式):执行如之前所述的对ROSsetup.bat的最简替代配置,然后直接打开CPPVS工程进行编译调试

2.Win开发库配置

2.1 git+cmake+bcompare+vscode+vstudio+cuda+tbb

1.git+cmake+bcompare+vscode+vstudio

git config --global user.name "user"

git config --global user.email user@user.com

git config --global core.filemode false

git config --global core.autocrlf false #Win

git config --global diff.tool bc3

git config --global difftool.prompt false

git config --global difftool.bc3.path "C:/Program Files/Beyond Compare 4/bcompare.exe"

git config --global difftool.bc3.cmd

2.cuda

3.tbb

(1)编译安装到D:/app/dev/tbbTBB_TEST=TBB_EXAMPLES=OFF

(2)添加环境变量D:/app/dev/tbb/bin

2.2 qt+qglviewer+SDL2+boost+pcl+vtk+flann+qhull

1.qt5.9.9

(1)安装到D:/app/qt并添加环境变量D:\app\qt\5.9.9\msvc2015_64\binPath(非常重要)

(2)Qt5.9.9组选择msvc2015-64bit和除QtScript外所有Qt打头的库

(3)DevDes组成选择CBDebugerMinGW

(4)WIN移植到第三方时根据实际需求还需要将~/plugins中的某些目录复制到与运行程序相同的目录,当前有:imageformatssqldriversplatforms

2.qglviewer2.7.2

(1)qt打开QGLViewer.pro,设置C/C++编译器为MSVC**(amd64)并选择构建Release版本,无需理会找不到QGLViewer2.lib的错误

(2)复制QGLViewer2.lib~\qt\version_id\msvc2015_64\lib

(3)复制QGLViewer2.dll~\qt\version_id\msvc2015_64\bin

(4)复制libQGLViewer-qt5.prllibQGLViewer-qt5.so*~\qt\version_id\gcc_64\lib

(5)复制QGLViewer中所有h文件和VRender~qt\version_id\msvc2015_64

(6)复制QGLViewer中所有h文件和VRender~qt\version_id\_gcc_64\include

(7)QGLViewer中增加文件QGLViewer

#ifndef QT_QGLVIEWER_MODULE_H

#define QT_QGLVIEWER_MODULE_H

#include "camera.h"

#include "config.h"

#include "constraint.h"

#include "domUtils.h"

#include "frame.h"

#include "keyFrameInterpolator.h"

#include "manipulatedCameraFrame.h"

#include "manipulatedFrame.h"

#include "mouseGrabber.h"

#include "qglviewer.h"

#include "quaternion.h"

#include "vec.h"

#endif

(7)这些头文件中包含的关于QT的头文件要作修改,主要是增加包含目录

(8)复制examples~\qt\Examples\version_id\qglviewer

(9)备份以上文件,对Qt5.9.x全适用,对5.x.x只需更新dlllib文件

3.SDL2

(1)解压到D:/app/dev/SDL2且只提取x64库文件重组为binlib目录

(2)添加环境变量D:\app\dev\SDL2\bin

4.PCL1.21.1+boost1.78+vtk9.1+flann1.9.1+qhull8.0.2

(1)安装到D:\app\pcl且安装除Eigen外的所有第三方库(vtk+boost+qhull+flann)

(2)添加环境变量

D:\app\pcl\bin

D:\app\pcl\3rdParty\VTK\bin

D:\app\pcl\3rdParty\Qhull\bin

D:\app\pcl\3rdParty\FLANN\bin

1.qt6.2.4

(1)选择类型:ArchiveLTS

(2)Qt6.2.x组:MSVC-2019-64bitAndroidQt-Quick3DQt-Shader-ToolsAdditional-LibrariesQt-Quick-Timeline

(3)DDTool组:Qt-Creator7.0.2-CDB-Debuger-SupportDebugging-Tools-for-WindowsQt-Design-Studio3.5.0

2.qtlviewer2.8

(1)QtCreator打开QGLViewer.pro,设置C/C++编译器为MSVC2019-64bit并选择构建Release版本,无需理会找不到QGLViewer2.lib的错误

(2)复制QGLViewer2.lib~\qt6\6.2.x\msvc2019_64\lib

(3)复制QGLViewer2.dll~\qt6\6.2.x\msvc2019_64\bin

(4)复制QGLViewer中所有h文件和VRender~\qt6\6.2.x\msvc2019_64

(5)QGLViewer中增加文件QGLViewer

#ifndef QT_QGLVIEWER_MODULE_H

#define QT_QGLVIEWER_MODULE_H

#include "camera.h"

#include "config.h"

#include "constraint.h"

#include "domUtils.h"

#include "frame.h"

#include "keyFrameInterpolator.h"

#include "manipulatedCameraFrame.h"

#include "manipulatedFrame.h"

#include "mouseGrabber.h"

#include "qglviewer.h"

#include "quaternion.h"

#include "vec.h"

#endif

(6)这些头文件中包含的关于QT的头文件要作修改(主要是增加包含目录)

(7)复制examples~\qt6\Examples\version_id\qglviewer

(8)备份以上文件,对Qt6.2.x全适用,对6.x.x只需更新dlllib文件

3.AndroidDev

(1)安装AStudio:解压到D:/app/adk/studio并运行以在线下载安装基础件

(2)安装期望件:SDKBTsNDKUSB/WebDrvCLI-latest、模拟镜像、Intel/Amd模拟加速

(3)安装Gradle:新建NativeC++BasicActivity并编译运行即可自动安装到C:/Users/XXX/.gradle

(4)删除默认件:PlatformsBuildToolsNDK #删除*.lock*.log

(5)备份开发环境:复制C:/Users/XXX/.gradleD:/app/adk/gradle^备份D:/app/adk目录即可。

(6)迁移开发环境:备份的反向操作、开发时无网络且无默认SDK/BTs/NDK需切换后编译。

|androidcompileSkd 33 #配置期望SDK

|androidbuildToolsVersion '33.0.0' #配置期望BTs

|androidndkVersion '23.2.8568313' #配置期望NDK

(7)配置NatvieCPP项目:CMakeLists.txtX86开发、build.gradleabiFilters指定平台。

|androiddefaultConfigndkabiFilters "x86_64" "arm64-v8a" #打包哪些

|androiddefaultConfigexternalNativeBuildcmakeabiFilters "arm64-v8a" "x86_64" #编译哪些

|androiddefaultConfigexternalNativeBuildcmakearguments "-DANDROID_STL=c++_shared"

(8)打包NativeCPP依赖:build.gradleandroid添加sourceSets{main{jniLibs.srcDirs=['dir1' 'dir2']}}

|dir包含ABIsABI=arm64-v8a/x86-64/armeabi-v7a/x86

|若为appsrclibsdir=libs、若为appsrcmainjniLibs则无需设置sourceSets

(9)CLI查看安装详细:sdkmanager.bat --sdk_root=D:/app/adk/sdk --list

(10)CLI安装SDK命令:sdkmanager.bat --sdk_root=D:/app/adk/sdk --install "xxx"

4.AndroidQT6.2

(1)安装特定SDKGradleSDK-31BTs-31.0.0NDK-22.1.17171670Gradle7.2

(2)安装OpenSSLJDK11:解压到D:/app/adk/openssl、复用D:\app\adk\studio\jre

(3)备份核心Gradle:复制以下目录、由于部分未备份所以迁移后仍需联网下载部分组件

C:/Users/XXX/.gradle/cache/7.2D:/app/adk/gradle/cache

C:/Users/XXX/.gradle/daemon/7.2D:/app/adk/gradle/daemon

C:/Users/XXX/.gradle/wrappter/dists/gradle-7.2-binD:/app/adk/gradle/dists

2.3 magicenum+asio+rpclib+spdlog+CLI11+cereal+nlohmann+tinyxm2+yamlcpp

1.magicenum:解压头文件到D:/app/dev/cxx

2.asio:解压头文件到D:/app/dev/cxx

3.rpclib:编译(无依赖)(静态库)安装D:/app/dev/rpclib

4.spdlog:解压头文件到D:/app/dev/cxx #1.9.2后的fmtros2foxy不兼容

5.CLI11:解压头文件到D:/app/dev/cxx

6.cereal:解压头文件到D:/app/dev/cxx

7.nlohmann:解压头文件到D:/app/dev/cxx

8.tinyxml2:编译(无依赖)(静态库)安装到D:/app/dev/tinyxml2

9.yamlcpp:编译(无依赖)(静态库)安装到D:/app/dev/yamlcppBUILD_GMOCK=OFFBUILD_MOCK=OFFBUILD_TESTING=OFF

2.4 suitesparse+eigen+sophus+ceres+nplot+armadillo

++rtklib+geographiclib+robotlocalization

++opengv+octomap+rtabmap

1.suitesparse

(1)解压到D:/app/dev/suitesparse且使用时配置

(2)添加加环境变量D:\app\dev\suitesparse\bin

(3)使用find_package时可能涉及的配置(以下配置Ceres都用)

CXSparse_DIR=D:/app/dev/suitesparse/lib/CXSparse/cmake

Suitesparse_DIR=D:/app/dev/suitesparse/lib/SuiteSparse/cmake

METIS_INCLUDE_DIR=D:/app/dev/suitesparse/include

METIS_LIBRARY*=D:/app/dev/suitesparse/lib/metis.lib

BLAS_blas_LIBRARY=D:/app/dev/suitesparse/lib/libblas.lib

LAPACK_lapack_LIBRARY=D:/app/dev/suitesparse/lib/liblapack.lib

SuiteSparse_XXX_INCLUDE_DIR=D:/app/dev/suitesparse/include/SuiteSparse/xxx

SuiteSparse_XXX_LIBRARY=D:/app/dev/suitesparse/lib/SuiteSparse/xxx.lib

2.eigen

(1)编译安装(残废所有C:D:依赖)(仅头文件)D:/app/dev/eigen3BUILD_TESTING=OFF

(2)更新~\eigen3\Eigen\CholmodSupport<cholmod.h><CHOLMOD/cholmod.h>

(3)更新~\eigen3\Eigen\UmfPackSupport<umfpack.h><UMFPACK/umfpack.h>

3.sophus

(1)编译安装(残废所有C:D:依赖)(仅头文件)D:/app/dev/sophusBUILD_EXAMPLES=OFFBUILD_TESTS=ONSOPHUS_USE_BASIC_LOGGING=ON(让不依赖fmtlib)

(2)不使用find_package时需要增加预宏SOPHUS_USE_BASIC_LOGGING使不依赖fmtlib

(3)调试测试代码可复制test_macros.hpp到安装目录以方便调试。

(4)使用ceres_xxx相关的头文件需要配置ceres

4.ceres

(1)编译安装到D:/app/dev/ceres且为静态库

(2)开启:LAPACKSCHUR_SPECIALIZATIONSMINIGLOG

(3)开启:SUITESPARSECXSPARSEEIGENSPARSE

(4)关闭:ACCELERATESPARSE(MacOS可见)

(5)关闭:BUILD_TESTINGBUILD_EXAMPLES

(6)Eigen3_DIR=D:/app/dev/eigen3/share/eigen3/cmake

(7)所有SuiteSparse的配置

(8)ceres\internal\miniglog\glog\logging.h中添加#undef ERROR

5.nlopt:编译(无依赖)(静态库)安装到D:/app/dev/nloptBUILD_SHARED_LIBS=OFF

6.armadillo

7.rtklib

8.geographicLib

9.robot-localization

(1)解压到D:/app/dev/geographiclib

(2)添加环境变量D:\app\dev\geographiclib\bin

(3)增加预宏GEOGRAPHICLIB_SHARED_LIB=0以使用静态库

10.opengv:编译(仅依赖Eigen)(静态库)安装到D:/app/dev/opengvBUILD_TESTS=OFF

复制~/Release/random_generators.libD:/app/dev/opengv/lib

11.octomap

(1)编译安装到D:/app/dev/octomap

(2)添加环境变量D:\app\dev\octomap\bin

(3)删除~/octovis/src/extern以免调用本身提供的旧版本的libqglviewer

(4)octovis工程复制${QT_LIBRARIES}octovis-share工程才能使之编译通过

(5)编译选项

OCTOVIS_OT5=TURE

BUILD_OCTOVIS_SUBPROJECT=TRUE

BUILD_DYNAMICETD3D_SUBPROJECT=TRUE

QT5XXX_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/XXX

QGLViewer_INCLUDE_DIR=D:/app/qt/5.9.9/msvc2015_64/include/QGLViewer

QGLViewer_LIBRARY_DIR_WINDOWS=D:/app/qt/5.9.9/msvc2015_64/lib/QGLViewer2.lib

(5)继承关系变化:ViewerWidgetQGLViewerQOpenGLWidget

12.rtabmap

(1)

2.5 graphviz+glew+libraw+pangolin

1.graphviz:解压到D:/app/dev/graphviz并添加环境变量D:\app\dev\graphviz\bin

2.glew

(1)解压到D:/app/dev/glew且只提取x64库文件重组为binlib目录

(2)使用动态库需添加环境变量D:\app\dev\glew\bin

(3)可使用静态库glew32s.lib

3.libraw

(1)解压到D:/app/dev/libraw且需要重组为include/lib/bin目录

(2)使用动态库需添加环境变量D:\app\dev\libraw\bin

(3)可使用静态库libraw_static.lib

4.pangolin

(1)编译安装(静态库)D:/app/dev/pangolin

(2)编译配置

MSVC_USE_STATIC_CRT=FALSE

Eigen3_DIR=D:/app/dev/eigen3/share/eigen3/cmake

GLEW_XXX=D:/app/dev/glew/includeD:/app/dev/glew/lib/glew32.lib

libraw_XXX=D:/app/dev/libraw/includeD:/app/dev/libraw/lib/libraw.lib

手动为工程pango_image添加搜索目录D:/app/dev/libraw/include

(3)安装后在pangolin/pangolin.h中添加#include <pangolin/display/default_font.h>

(4)添加环境变量D:\app\dev\pangolin\bin

2.6 openvino+opencv

1.安装openvino

(1)安装过程详细

1)选择D:\app后将自动创建D:\app\openvinoxxx本地目录和快速目录

2)安装组件包括:ModelOptimizer(用于模型转换)OpenModelZoo(避免再次下载)

IEDevKit(OpenMoelZoo引入)IERuntimeForXXX(占极小空间)、于是仅OpenCV被排除

3)安装后删除快速目录并将本地目录重命名为D:/app/openvino(重命名前先复制一份)

4)通过BeyondCompare比较复制的与原始的D:/app/openvino来移除其中的快捷目录

5)不为之添加任何永久环境变量而仅针对即时命令窗口(因为主要想使用它的模型转换器)

6)备份须知:无需单独备份、因为备份文件没比原文件小多少且重装如同解压、所以需要时直接安装即可

(2)最终文件结构

python

opencv

licensing

documentation

bin\setupvars.bat:环境变量设置脚本

data_processing\audio\speech_recognition:语音识别库API

deployment_tools

demo:安装验证脚本

tools:模型处理工具

open_model_zoo:推理引擎实例SRC

model_optimizer:模型优化器APP

ngraph:模型优化库API

inference_engine:推理引擎库API、推理引擎驱动DLL、推理引擎示例SRC

(3)环境变量说明

D:\app\openvino\deployment_tools\ngraph\lib

D:\app\openvino\deployment_tools\inference_engine\external\tbb\bin

D:\app\openvino\deployment_tools\inference_engine\external\hddl\bin

D:\app\openvino\deployment_tools\inference_engine\bin\intel64\Release

D:\app\openvino\deployment_tools\inference_engine\bin\intel64\Debug

D:\app\openvino\deployment_tools\model_optimizer

(4)配置验证详细

设置环境变量:D:\app\openvino\bin: setupvars.bat

配所有优化器:D:\app\openvino\deployment_tools\model_optimizer\install_prerequisites:

install_prerequisites.bat

转为DLDT模型:D:\app\openvino\deployment_tools\demo:

demo_squeezenet_download_convert_run.bat

推理DLDT模型:D:\app\openvino\deployment_tools\demo: demo_security_barrier_camera.bat

2.安装opencv

(1)重要配置(搜索C:D:确认依赖)

非开源OPENCV_ENABLE_NONFREE=ON

扩展源OPENCV_EXTRA_MODULES_PATH=D:/app/opencv/modules_contrib

安装到CMAKE_INSTALL_PREFIX=D:/app/opencv/out/install

(2)配置WITH

1)至少选中:QTVTKEigenCeresTBBINF_ENGINENGRAPH

2)至少取消:CUDAPython

1)QT5XXX_DIR=D:/app/qt/5.9.9/msvc2015_64/lib/cmake/XXX

2)VTK_DIR=D:/app/pcl/3rdParty/VTK/lib/cmake/vtk-9.1

3)Eigen3_DIR=D:/app/dev/eigen3/share/eigen3/cmake

4)Ceres_DIR=D:/app/dev/ceres/lib/cmake/Ceres

5)TBB_DIR=D:/app/dev/tbb/lib/cmake/TBB

6)InferenceEngine_Dir=D:/app/openvino/deployment_tools/inference_engine/share

7)ngraph_DIR=D:/app/openvino/deployment_tools/ngraph/cmake

8)INF_ENGINE_RELEASE=2021040200

(3)配置BUID

1)至少选中:opencv_world

2)至少取消:CUDA_STUBSTBBTESTSPER_TESTSEXAMPLES

opencv_python_testsopencv_appsopencv_cvv(opencv_world冲突)

(4)待考虑选项:BLAS_XXX

(5)添加环境变量D:/app/opencv/out/install/x64/vc16/bin

2.7 mavsdk(mavlink)+airsim(airlib+mavlibcom+airros)

1.mavsdk:解压到D:/app/dev/mavsdk并添加环境变量D:\app\dev\mavsdk\bin

2.airsim

(1)VSCode打开目录进行如下替换后再打开AirSim.sln编译即可

;deps\rpclib\include;;D:\app\dev\rpclib\include;

$(ProjectDir)..\AirLib\deps\rpclib\includeD:\app\dev\rpclib\include

;deps\eigen3;;D:\app\dev\eigen3\include\eigen3;

$(ProjectDir)..\AirLib\deps\eigen3D:\app\dev\eigen3\include\eigen3

rpc.lib-->D:\app\dev\rpclib\lib\rpc.lib

VS版本不对则修改如:v142v143

(2)复制部署

复制~/airsim/AirLib/include/*D:/app/dev/airsim/include

复制~/airsim/MavLinkCom/include/*D:/app/dev/airsim/include

复制AirLib.libMavLinkCom.libD:/app/dev/airsim/lib

复制~/airsim/ros2/srcD:/app/ros2ex/airsim_ros并对源码进行相应修改

2.8 python3+ros2+ros2ex+webots+win环境变量配置

1.安装ROS2-Core

(1)下载并解压ROS2XXXD:\app\ros2

(2)基于D:\app\ros2\Scripts\xxx.py安装相应的Python版本相应的路径并追加Path

(3)安装OpenSSLD:\app\ros2openssl并添加OPENSSL_CONF和追加Path

(4)编译OpenCVD:\app\opencv并添加OpenCV_DIR和追加Path

(5)安装辅助工具:gitcmakebcompare

2.安装ROS2-Choco依赖

预设置:set ChocolateyInstall=D:\app\ros2choco #先设置此变量再安装chocolatey

下载包:choco download ???

安装包:choco install -y -s D:\tmp asio cunit tinyxml-usestl tinyxml2 log4cxx bullet curl

3.安装ROS2-Python依赖

预安装:安装Python~\ros2\scripts\*.py中指定的位置

下载包:python -m pip download catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy opencv-contrib-python pyparsing pyyaml setuptools pydot PyQt5 PyQtChart PyQtDataVisualization vcstool colcon-common-extensionsPyQtGraph psutil transforms3dfuture-d D:\tmp

安装包:python -m pip install --prefix=C:\Python38 --no-index --find-links=D:\tmp catkin_pkg cryptography empy ifcfg lark-parser lxml netifaces numpy opencv-contrib-python pyparsing pyyaml setuptools pydot PyQt5 PyQtChart PyQtDataVisualization vcstool colcon-common-extensionstransforms3dfuture

4.测试并配置ROS2配置参见lib.doc

call D:\app\ros2\setup.bat

ros2 run demo_nodes_cpp talker

ros2 run demo_nodes_py listener

5.安装并配置ROS2EX:迭代克隆代码到D:\app\ros2ex

(01)基础组件:诊断分析、关节状态、数据分析

https://github.com/ros/diagnostics(2.0.8)

https://github.com/ros/joint_state_publisher(2.2.0)

https://github.com/PlotJuggler/plotjuggler_msgs(0.2.3)

https://github.com/facontidavide/PlotJuggler(3.3.1) #需修改源码

https://github.com/PlotJuggler/plotjuggler-ros-plugins(1.7.2) #需修改源码

(02)控制组件:阿克曼消息、ROS2控制

https://github.com/ros-drivers/ackermann_msgs(2.0.2)

https://github.com/ros/angles(1.12.4)

https://github.com/ros-controls/control_msgs(3.0.0)

https://github.com/ros-controls/realtime_tools(2.1.1)

https://github.com/ros-controls/ros2_control(0.8.1)

https://github.com/ros-controls/ros2_controllers()

(03)定位感知建图导航LPMN基础组件:地理坐标、状态融合

https://github.com/ros-geographic-info/geographic_info(1.0.4) #MSG

https://github.com/cra-ros-pkg/robot_localization(3.3.0)

(04)倾向视觉的LPMN组件:图像基础、目标表达、八叉树建图、RTAB建图

https://github.com/ros-perception/vision_opencv(3.0.1)#需修改源码且编译后移动~_export.h

https://github.com/ros-perception/image_common(3.1.0)

https://github.com/ros-perception/vision_msgs.git(3.0.1)

https://github.com/OctoMap/octomap_msgs(2.0.0)

https://github.com/introlab/rtabmap_ros(0.20.15)

(05)倾向激光的LPMN组件:Cart建图、Nav2导航

https://github.com/ros2/cartographer_ros(1.0.9003) #MSG

https://github.com/ros-planning/navigation2(1.0.7) #MSG

(11)Airsimhttps://github.com/microsoft/AirSim(1.7.0)

(12)Mav|MSGhttps://github.com/mavlink/mavros(2.1.0)

(13)TB3|MSGhttps://github.com/ROBOTIS-GIT/turtlebot3_msgs(2.2.2)

(14)Gazebo|MSGhttps://github.com/ros-simulation/gazebo_ros_pkgs(3.5.3)

(15)WebotsROS2https://github.com/cyberbotics/webots_ros2(latest)

(21)遥控驱动https://github.com/ros-drivers/joystick_drivers(3.0.1)(joysdl2_vendor)

版本说明:Joy-CMake链接rclcpp_components::componentfoxy暂不用(3.1.0)

(22)遥控速控https://github.com/ros2/teleop_twist_joy(2.4.3)

(23)键盘速控https://github.com/ros2/teleop_twist_keyboard(2.3.2)

(24)遥控键盘鼠标速控:https://github.com/ros-teleop/teleop_tools(1.2.1)

ros2 run key_teleop key_teleop --ros-args --remap /key_vel:=/cmd_vel --param forward_rate:=6.0 --param backward_rate:=4.0 --param rotation_rate:=-30.0#用于机体系简单调试、只能前后控和航向控且需第三方先起飞到一定高度、只能恒速控所以速率设为常用值

ros2 run mouse_teleop mouse_teleop --ros-args --remap /mouse_vel:=/cmd_vel --param frequency:=20 --param scale:=30.0 --param holonomic:=false#用于机体系简单调试、只能前后控和航向控(holonomic:=true时变为左右控制)且需第三方先起飞到一定高度、速率可调所以设为暴力工作模式

(25)速控切换:https://github.com/ros-teleop/twist_mux(4.0.1)

6.安装并配置Webots:安装到D:\app\webots、配置参见lib.doc

(1)运行webotsOpenGL错误:安装CUDA(将自动更新驱动)后禁用集成显卡

(2)运行webots_ros2_xxx出错:删除C:\Users\Administrator\AppData\Local\Temp\*

8.

9.

10.创建编译环境(ros2vc.batros2vs.bat)

if defined PYTHONPATH ( for /l %%a in (1,1,3) do echo ROS2CLI Env: did) else (

set PYTHONPATH=~

set Path=~;%Path%

set CMAKE_PREFIX_PATH=~

set AMENT_PREFIX_PATH=~

set COLCON_PREFIX_PATH=~

for /l %%a in (1,1,3) do echo ROS2CLI Env: done)

set PYTHONHOME=C:\Python38

set WEBOTS_HOME=D:\app\webots

set OpenCV_DIR=D:\app\opencv\out\install

set OPENSSL_CONF=D:\app\ros2openssl\bin\openssl.cfg

set TinyXML2_DIR=D:\app\cxx\lib\cmake\tinyxml2

echo colcon build --merge-install --base-paths .. --cmake-args -DBoost_INCLUDE_DIR=xxx

call D:\app\ros2\setup.bat

call D:\app\ros2ex\out\install\local_setup.bat

::call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\devenv.exe"

call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat"

#重置rqt:删除C:\Users\Administrator\AppData\Roaming\ros.org\rqt_gui.init

#重置rviz:删除C:\Users\Administrator\.rviz2

11.设置PATH变量(含部分ros2setup.bat内容)

D:\app\qt\5.9.9\msvc2015_64\bin

D:\app\opencv\out\install\x64\vc16\bin

D:\app\openvino\deployment_tools\ngraph\lib

D:\app\openvino\deployment_tools\inference_engine\external\tbb\bin

D:\app\openvino\deployment_tools\inference_engine\bin\intel64\Release

D:\app\pcl\bin

D:\app\pcl\3rdParty\VTK\bin

D:\app\pcl\3rdParty\Qhull\bin

D:\app\pcl\3rdParty\FLANN\bin

D:\app\dev\tbb\bin

D:\app\dev\SDL2\bin

D:\app\dev\suitesparse\bin

D:\app\dev\geographiclib\bin

D:\app\dev\octomap\bin

D:\app\dev\graphviz\bin

D:\app\dev\glew\bin

D:\app\dev\libraw\bin

D:\app\dev\pangolin\bin

D:\app\dev\mavsdk\bin

C:\Python38

C:\Python38\Scripts

D:\app\webots\msys64\mingw64\bin

D:\app\ros2ex\webots_ros2\webots_ros2_driver\webots\lib\msys

D:\app\ros2ex\out\install\bin

D:\app\ros2\bin

D:\app\ros2\Scripts

D:\app\ros2\opt\libcurl_vendor\bin

D:\app\ros2\opt\rviz_ogre_vendor\bin

D:\app\ros2\opt\rviz_assimp_vendor\bin

D:\app\ros2\opt\yaml_cpp_vendor\bin

D:\app\ros2openssl\bin

D:\app\ros2choco\bin

D:\app\ros2choco\lib\bullet\lib

D:\app\ros2choco\lib\cunit\lib

D:\app\ros2choco\lib\log4cxx\lib

D:\app\ros2choco\lib\tinyxml2\lib

C:\Windows

C:\Windows\System32

C:\Windows\System32\Wbem

C:\Windows\System32\OpenSSH

C:\Windows\System32\WindowsPowerShell\v1.0

C:\Program Files\Git\cmd

C:\Program Files\CMake\bin

C:\Program Files\Docker\Docker\resources\bin

C:\ProgramData\DockerDesktop\version-bin

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\bin

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.1\libnvvp

C:\Program Files\NVIDIA Corporation\Nsight Compute 2020.2.0

C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common

12.设置PYTHONPATH变量(含部分ros2setup.bat内容)

C:\Python38\lib\site-packages

D:\app\webots\lib\controller\python38

D:\app\ros2\lib\site-packages

D:\app\ros2ex\out\install\lib\site-packages

13.设置ROS2CLI命令环境(取自ros2setup.bash部分内容)

setx -m CMAKE_PREFIX_PATH D:\app\ros2;D:\app\ros2ex\out\install

setx-m AMENT_PREFIX_PATH D:\app\ros2;D:\app\ros2ex\out\install

setx-m COLCON_PREFIX_PATH D:\app\ros2;D:\app\ros2ex\out\install

14.XBOX飞行配置

飞机升降和航向:axs0axs1 启桨停桨:btn1btn2 拍照:btn4

飞体前后和左右:axs3axs4 起飞降落:btn6btn7 返航:btn8

云台上下和左右:axs6axs7 云台复位:btn0 录制:btn3+btn5

15.查看程序依赖库

(1)启动查看:任务管理器->性能->资源监视器->CPU->进程->勾选某应用程序->关联的模块

(2)得到路径:强行Ctrl+C复制粘贴到excel,然后复制路径所在列粘贴到文本

void copyDepends(string pathFile, string dstFolder)

{

//1.ReadPath

char str[1024];

vector<string> filePaths;

FILE* file = fopen(pathFile.c_str(), "r");

if (file == NULL) { spdlog::critical("Failed to open {}", pathFile); return; }

//while (fscanf(file, "%s", str) != EOF) filePaths.push_back(str);

while (!feof(file)) { fgets(str, 1024, file); if (str[strlen(str) - 1] == '\n') str[strlen(str) - 1] = '\0'; filePaths.push_back(str); }

fclose(file);

//2.CopyPath

for (int k = 0; k < filePaths.size(); ++k)

{

string dstPath = dstFolder + "/" + filesystem::path(filePaths[k]).filename().generic_string();

bool bl = filesystem::copy_file(filePaths[k], dstPath, filesystem::copy_options::overwrite_existing);

if (bl) spdlog::info("Done: {} to {}", filePaths[k], dstPath);

else spdlog::critical("Failed: {} to {}", filePaths[k], dstPath);

}

}

2.9 PX4+APM+QGC+MP+MavRouter

0.Win安装QGC&MP:默认安装即可。

1.Ubuntu安装PX4TC./Autopilot/Tools/setup/ubuntu.sh

(1)TC版本:arm-none-eabi-gcc --version

(2)固件版本:QGC->Setup>Summary

(2)定制安装:https://docs.px4.io/master/en/dev_setup/dev_env_linux_ubuntu.html

2.Ubuntu安装PX4FWgit clone https://github.com/PX4/PX4-Autopilot.git --recursive

(1)更新清理后编译:git pull && git submodule update --recursive && make distclean

(2)编译固件与仿真:make px4_fmu-v5 && make px4_sitl gazebo && && make px4_sitl_rtps

(3)查看可用的目标:make list_config_targets

3.Ubuntu安装APMTC./Ardpilot/Tools/environment_install/install-prereqs-ubuntu.sh

(1)MavProxy设置:echo "export PATH=$PATH:$HOME/.local/bin" >> ~/.bashrc

(2)MavProxy更新:pip3 install pymavlink mavproxy --user --upgrade

4.Ubuntu安装APMFWgit clone https://github.com/ArduPilot/ardupilot --recursive

5.Ubuntu安装MavRoutergit clone https://github.com/mavlink-router/mavlink-router.git --recursive

(1)编译:./autogen.sh && ./configure CFLAGS='-g -O2' \

--prefix=/usr --sysconfdir=/etc --libdir=/usr/lib64 --localstatedir=/var

(2)安装:make install

(3)命令路由APImavlink-routerd -e 10.42.0.11:14540 127.0.0.1:14540

(4)命令路由GCSmavlink-routerd -e 10.42.0.11:14550 127.0.0.1:14550

(5)脚本路由XXX复制~/examples/config.example/etc/mavlink-router/main.conf并修改

make [vendor_][model][_variant] [viewer_model_debugger_world]

(1)vendor(必须)px4aerotennaairmindatlflightauavbeagleboneintelnxp、…

(2)model(必须)sitlfmu-v2fmu-v3fmu-v4fmu-v5navio2、…

(3)variant(可选)rtpslpe

(1)viewer(必须)gazebojmavsimnone(启动后等待某个模拟器)

(2)model(可选)iris(def)rover、… #PX4_SIM_MODEL

(3)debugger(可选)none(def)idegdb、…

(4)world(可选且仅Gazebo)#PX4_SIM_WORLD

Examples

make px4_sitl gazebo_iris__baylands/yosemite

make px4_sitl gazebo_iris_opt_flow__baylands/yosemite

make px4_sitl gazebo_rover_baylands/warehouse/sonoma_raceway

make px4_sitl gazebo_r1_rover_baylands/warehouse/sonoma_raceway

2.10 MSCKF+basalt +RGBDSLamV2

1.安装MSCKF


3.常用工具命令

3.1 Tar+SquashFS

1.tar常用指令

(1)压缩举例:tar -cvzf file.tgz --exclude=path1 --exclude=path2 srcPath

(2)解压举例:tar -xvzf file.tgz -C dstPath

(3)常用功能:-c新建压缩、-x解压文件、-r追加文件

(4)常用压缩:-z压为tar.gz-J压为tar.xz-j压为tar.bz2

(5)常用选项:-f压缩名、-v显示过程、--exclude=path排除路径、-C解压位置

2.SquashFS指令

(0)下载squashfs

squashfs-tools: https://github.com/plougher/squashfs-tools

squashfs-tools-ng:https://github.com/AgentD/squashfs-tools-ng

(1)创建SFS系统:gensquashfs

(2)浏览SFS系统:rdsquashfs

(3)转换SFS系统:sqfs2tartar2sqfs

(4)对比SFS系统:sqfsdiff


3.2 WSL+VirtualENV

1.WSL命令:常用命令

(1)登录系统:wsl [--distribution osName] [--user userName] [--cd workDir] [--system]

(2)查看系统:wsl --list --all/--running/--quiet/--verbose/--online

(3)关闭所有系统:wsl --shutdown

(4)关闭指定系统:wsl --terminate osName

(5)移除指定系统:wsl --unregister osName

2. WSL命令:默认设置

(1)设置默认系统:wsl --set-default osName

(2)设置默认版本:wsl --set-default-version wslVersion

(3)设置为指定版:wsl --set-version osName wslVersion

3.WSL命令:导入导出

(1)导入系统:wsl --import osName installDir tarPath #若失败则临时设置较大虚拟内存反复尝试

(2)导出系统:wsl --export osName tarPath

(3)导入说明:直接导入基系统(install.tar.gz)将不新建用户而仅root可用

4.WSL命令:安装更新

(1)安装系统:wsl --install --distribution distName

(2)更新内核:wsl --update

(3)回滚内核:wsl --update –rollback

5.WSL命令:磁盘装卸

(1)装载磁盘:wsl --mount \\.\PHYSICALDRIVE* [options]

仅附加:--bare #Linux中通过lsblk查看

指定分区:--partition id #默认ext4

指定分区类型:--type fat32/ext4/ntfs

其它设置选项:--options

(2)卸载磁盘:wsl --unmount [\\.\PHYSICALDRIVE*]

6.WSL命令:USB装卸

(0)安装软件:Win安装https://github.com/dorssel/usbipd-win/releases

apt install linux-tools-5.4.0-77-generic hwdata

打开/etc/sudoers添加/usr/lib/linux-tools/5.4.0-77-genericsecure_path值开头

(2)查看BUSIDusbipd wsl list

(3)装载BUSIDusbipd wsl attach --busid xxx #Linux中通过lsusb查看

(4)卸载BUSIDusbipd wsl detach --busid xxx

7.WSL配置:读写权限

#umask=files+directories fmask=files dmask=directories

# 0 1 2 3 4 5 6 7

#r Y Y Y Y N N N N

#w Y Y N N Y Y N N

#x Y N Y N Y N Y N

8.WSL配置:端口映射

(1)映射:netsh interface portproxy add v4tov4 listenport=p listenaddress=0.0.0.0 connectport=p connectaddress=wslOSIP #22ssh23telent

(2)查看:netsh interface portproxy show all

(3)重置:netsh interface portproxy reset

(4)清除:netsh interface portproxy delete v4tov4 listenport=p listenaddress=wslOSIP

9.WLS时间同步ntpdate time.windows.com

10.WSL

11.VirtualENV使用要点

(1)VirtualENV创建环境:virtualenv [options] name

继承全局:--system-site-packages

指定解释器:--python pythonpath

附加搜索目录:--extra-search-dir dirpath

(2)VirtualENV激活环境:source dir/bin/activate

(3)VirtualENV退出环境:deactivate

(4)导出Python包详细表:pip freeze > requirements.txt

##相对于pip freeze --all(pip list)不含pip/wheel/setuptools

3.3 Docker

0.命令归类

全局查看:versioninfoinspect

镜像管理:images|save|load|rmi|historybuild|tag|commitpull|push|search|login|logoutevent

容器管理:ps|import|export|rm|renamecreate|run

容器操控:start|restart|stop|kill|waittop|pasue|unpause|execstatslogsport

容器通信:attachcpdiffupdate

1.状态查询

镜像数量:docker images -a

容器数量:docker ps -a

容器进程:docker top

容器能耗:docker stats -a

文件详细:docker inspect ima/con

2.备份恢复

镜像转文件:docker save -o tarPath ima

文件转镜像:docker load -i tarPath

文件转镜像:docker import tarPath

容器转文件:docker export -o tarPath con

3.创建删除

删除镜像:docker rmi -f ima

删除容器:docker rm -fv con

改名容器:docker rename con name

创建容器:docker run/create [options] ima [command] [args]

别名创建镜像:docker tag ima repname:tagname

容器创建镜像:docker commit -p -m “changes” -a “author” conId repname:tagname

编译创建镜像:docker build [options] dir

4.开关登录

开机:docker start con

关机:docker stop con

重启:docker restart con

硬关:docker kill con

休眠:docker pause con

复原:docker unpause con

共享终端登录且退出就关机(适合个人)docker attach con

独立终端登录且退出不关机(适合团队)docker exec -it [-u user -w wks -e env] con /bin/bash

5.容器更新管理

更新容器硬件配置:docker update [options] con

交换容器主机数据:docker cp hostPath con:conPath docker cp con:conPath hostPath

查看容器数据更改:docker diff con

6.容器创建详细

--name=

-h --hostname=

-u --user=

-w --workdir=

-e --env=

-i --interative

-t --tty

-a --attach=STDIN/STDOUT/STDERR

-c --cpu-shares=

-m --memory=

-v --volume=

-p --publish=

--network=none/bridge/host/container

--dns=

9.典型使用流程createstartexec|attachstop、镜像为应用名、容器加后缀PC

docker create -it -h NoticPC --name NoeticPC \

-e DISPLAY=unix$DISPLAY -e GDK_SCALE -e GDK_DPI_SCALE \

-v /tmp/.X11-unix:/tmp/.X11-unix aaron:noetic

docker start NoeticPC

docker exec -it NoeticPC /bin/bash

docker exec -d NoeticPC cmd args

docker attach NoeticPC

docker stop NoeticPC

3.4 Grub

Grub2官方手册:https://www.gnu.org/software/grub/grub-documentation.html、以下罗列基于Grub2.0.6官方手册

Ubuntu官方文档搜索Grub2检索最新更新,近几年仅有以下两文更新:https://help.ubuntu.com/community/Grub2/ISOBoothttps://help.ubuntu.com/community/Grub2/Setup

1.环境变量

@1 biosnum

@2 check_signatures:no

@3 chosen

@4 cmdpath

@5 color_highlight

@6 color_normal

@7 config_directory

@8 config_file

@9 debug

@10 default

@11 fallback

@12 gfxmode

@13 gfxpayload

@14 gfxterm_font

@15 grub_cpu:x86_64

@16 grub_platform:efi

@17 icondir

@18 lang

@19 locale_dir

@20 menu_color_highlight

@21 menu_color_normal

@22 net_<interface>_boot_file

@23 net_<interface>_dhcp_server_name

@24 net_<interface>_domain

@25 net_<interface>_extensionspath

@26 net_<interface>_hostname

@27 net_<interface>_ip

@28 net_<interface>_mac

@29 net_<interface>_next_server

@30 net_<interface>_rootpath

@31 net_default_interface

@32 net_default_ip

@33 net_default_mac

@34 net_default_server

@35 pager

@36 prefix

@37 pxe_blksize

@38 pxe_default_gateway

@39 pxe_default_server

@40 root

@41 superusers

@42 theme

@43 timeout

@44 timeout_style:menu

2.菜单可用命令

@1 menuentry

@2 submenu

3.通用命令

@1 serial

@2 terminal_input

@3 terminal_output

@4 terminfo

4.终端菜单命令

@1 [

@2 acpi

@3 authenticate

@4 background_color

@5 background_image

@6 badram

@7 blocklist

@8 boot

@9 cat

@10 chainloader

@11 clear

@12 cmosclean

@13 cmosdump

@14 cmostest

@15 cmp

@16 configfile

@17 cpuid

@18 crc

@19 cryptomount

@20 cutmem

@21 date

@22 devicetree

@23 distrust

@24 drivemap

@25 echo

@26 eval

@27 export

@28 false

@29 gettext

@30 gptsync

@31 halt

@32 hashsum

@33 help

@34 initrd

@35 initrd16

@36 insmod

@37 keystatus

@38 linux

@39 linux16

@40 list_env

@41 list_trusted

@42 load_env

@43 loadfont

@44 loopback

@45 ls

@46 lsfonts

@47 lsmod

@48 md5sum

@49 module

@50 multiboot

@51 nativedisk

@52 normal

@53 normal_exit

@54 parttool

@55 password

@56 password_pbkdf2

@57 play

@58 probe

@59 rdmsr

@60 read

@61 reboot

@62 regexp

@63 rmmod

@64 save_env

@65 search

@66 sendkey

@67 set

@68 sha1sum

@69 sha256sum

@70 sha512sum

@71 sleep

@72 smbios

@73 source

@74 test

@75 true

@76 trust

@77 unset

@78 verify_detached

@79 videoinfo

@80 wrmsr

@81 xen_hypervisor

@82 xen_module

5.网络可用命令

@1 net_add_addr

@2 net_add_dns

@3 net_add_route

@4 net_bootp

@5 net_del_addr

@6 net_del_dns

@7 net_del_route

@8 net_dhcp

@9 net_get_dhcp_option

@10 net_ipv6_autoconf

@11 net_ls_addr

@12 net_ls_cards

@13 net_ls_dns

@14 net_ls_routes

@15 net_nslookup

1.Grub2安装要点

grub-install

--removable

--force-file-id

--efi-directory=/media/root/uesp

--boot-directory=/media/root/uesp/boot

2.UbuntuGrub2系统

(1)文件组成

/etc/grub/*:主安装目录

/etc/grub.d/*:脚本式配置(用于系统启动和菜单启动项)

/etc/default/grub:键值式配置(用于配置环境的基本属性)

(2)使用要点:不建议直接修改/etc/grub/grub.cfg

添加启动项可编辑/etc/grub.d/4*_custom

添加启动项也可新建/etc/grub.d/4X_custom

配置的基本配置可编辑/etc/default/grub

所有操作通过执行update-grub将更新到/etc/grub/grub.cfg

3.Grub2指令总结

(1)典型环境变量

root:当前所在分区、如hdX,gptY

prefixGrub安装目录、如(hdX,gptY)/boot/grub

cmdpath:被启动的grubx64.efi所在目录、如(hdX,gptY)/efi/boot

config_file

conig_directory

others: grub_cpu/grub_platform

(2)常用配置变量

GRUB_DEFAULT=0

GRUB_TIMEOUT=30

GRUB_TIMEOUT_STYLE=menu/hidden

(3)Ubuntu指令

AKA: help/date/sleep…/reboot/halt/ls…/clear/echo…/cat…/read…

AKA: source…/export…/set…/unset…/eval…/test…/gettext…

AKA: cmp…/md5sum…/sha1sum…/sha256sum/sha512sum…

4.菜单指令详细

(1)主菜单指令menuentry title [options] [args] {…}

--id=id:唯一标志

--class=classes:所属类别

--hotkey=key:快速启动键

--users=users:指定用户可见

--unrestricted:所有用户可见

(2)子菜单指令submenu title [options] {…} #options同主菜单

5.交互命令详细

(1)基本交互:易误用的

ls:显示所有分区

ls (hdX,gptY):显示分区类型

ls (hdX,gptY)/:显示分区内容

ls (hdX,gptY)/dir:显示目录内容

set:显示所有变量(含环境变量)

set var=val:新建或重设变量

(2)变量装卸

list_env [--file file]:给定file将重载默认的~/grub/grubenv文件

save_env [--file file] var1 var2 ...:设check_signatures=no以强制保存

load_env [--file file] [--skip-sig] [whitelist]:白名单通常配合签名使用

(3)模组装卸lsmodinsmod modnamermmod modname

(4)查找文件search [--file|--label|--fs-uuid] [--set [var]] name

使用别名:search.filesearch.fs_labelsearch.fs_uuid

使用--set:被查找到的文件所在分区路径赋给指定变量、默认root

(5)加载引导程序chainloader [--force] loaderFile

引导程序:efi文件或非文件式引导程序地址

加载当前分区引导记录:chainloader +1表示

加载指定分区引导记录:chainloader (hdX,Y)+1

加载指定硬盘主引导记录:chainloader (hdX)+1

(6)启动Linux系统

loopback [-d] virDevice imaFile:将镜像文件挂载为虚拟设备

linux kernelFile kernelArgs:加载内核(内核参数因内核而异)

initrd initFile1 initFile2 …:为对应内核创建随机内存

boot:启动已加载到当前环境的系统或引导程序(命令行使用)

(7)运行子环境

export envstr:导出的变量对configfile的子环境可见

configfile file:调用配置文件(返回后其配置不到当前环境)

source file:导入配置(对当前环境有效对configfile子环境无效)


4.BIOSUEFI硬件差异

1.BIOS硬盘结构

(1)LBA0:因该扇区中,引导代码占有绝大部分的空间,故将此扇区称为MBR扇区

MBR446字节,存储系统的引导程序

PEs64字节,每16字节描述描述一个PE(Partition Entry),所以最多共4个分区

End2字节,值为0xAA55

(2)LBA1~LBA62隐藏扇区,保留备用。

(3)LBA63:第一分区的起始位置。

(4)LBA64~LBAEnd:参见《挨踢_硬盘结构+文件系统+系统启动+数据恢复1st.doc


2.UEFI硬盘结构

(1)LBA0MBR扇区,记录了启动代码和分区信息。

LBA0记录了仅0xEE标志的分区或LBA0后存在PHs(Partition Headers),说明此硬盘为UEFI独占模式,只能由UEFI主板启动

LBA0记录了非0xEE标志的分区且LBA0后存在PHs,说明此硬盘为UEFI/BIOS混合模式,两类主板或混合主板都能启动

LBA0记录了非0xEE标志的分区且LBA0后没有PHs,说明此硬盘为BIOS独占模式,只能由BIOS主板启动

(2)LBA1:主PTH(Partition Table Header),记录硬盘的GUID、分区可用的始末LBAPEs包含的项数及每项占用的字节数等信息

Offset

Length

Contents

0 (0x00)

8 字节

签名,"EFI PART",值为0x54 52 41 50 20 49 46 45

8 (0x08)

4 字节

修订,对GPT 1.0,值为0x00 01 00 00

12 (0x0C)

4 字节

PTH尺寸,值为0x00 00 00 5C = 92

16 (0x10)

4 字节


20 (0x14)

4 字节

保留,必须是0

24 (0x18)

8 字节

当前PTHLBA位置(对主PTH恒为1)

32 (0x20)

8 字节

另一PTHLBA位置(对副PTH恒为总LBA数减2)

40 (0x28)

8 字节

分区可用的第一LBA位置(PEs的最后LBA1=LB34)

48 (0x30)

8 字节

分区可用的最后LBA位置(PEs的第一LBA1=LB-34)

56 (0x38)

16 字节

硬盘GUID (UNIX及派生系统中也叫UUID)

72 (0x48)

8 字节

PEsLBA位置(恒为2)

80 (0x50)

4 字节

PEs包含的PTE(即分区数)

84 (0x54)

4 字节

每个PE的尺寸(通常为128字节)

88 (0x58)

4 字节

PEsCRC32校验码

92 (0x5C)

*

保留,必须是0(512字节的LBA,剩余420字节)

(3)LBA2~LBA33:主PEs,每个PE128字节描述

Offset

Length

Contents

常用分区类型GUID

EFI/ESP分区:C12A7328-F81F-11D2-BA4B-00A0C93EC93B,与操作系统无关

基本数据分区:EBD0A0A2-B9E5-4433-87C0-68B6B72699C7,对WindowsLinux相同

微软保留分区:E3C9E316-0B5C-4DB8-817D-F92DF00215AEWindows专用

Linux交换分区:0657FD6D-A4AB-43C4-84E5-0933C84B4F4FLinux专用

0 (0x00)

16 字节

分区类型标志GUID

16 (0x10)

16 字节

分区唯一标志GUID

32 (0x20)

8 字节

起始LBA

40 (0x28)

8 字节

终止LBA

48 (0x30)

8 字节

属性标志(60代表只读)

56 (0x38)

72 字节

分区名(36UTF-16字符)

(4)LBA34:第一分区的起始位置

(5)LBA-2~LBA-33:副PEs

(6)LBA-1:副PTH