1.系统安装与配置
1.1 常用链接汇总
-
0.重要链接
Windows10 ver: BuildXXX.YYYY、VersionYearMonth、YearH1、YearH2,H=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:延续性较明朗、Grub2Ext和Grub2FM创建者、https://a1ive.github.io
(1)Ventoy:延续性很明朗、启动新纪元革命者、https://github.com/ventoy
(2)Easy2Boot:延续性不确定、基于Grub4DOS/Grub2FM/Ventory、https://easy2boot.xyz
(4)YUMI:延续性较明朗、基于GNUGrub2、各种自制教程、https://www.pendrivelinux.com
(3)AIOBoot:延续性较明朗、基于Grub4DOS/Grub2FM、https://www.aioboot.com/en/newgen
(5)Grub2Win:延续性较明朗、基于GNUGrub2、https://sourceforge.net/projects/grub2win
(6)Clonezilla:延续性很明朗、下载ZIP包解压到ESP分区、https://clonezilla.org/livehd.php
(7)GNUGrub2:延续性极明朗、下载Grub2或基于Ubuntu安装、https://ftp.gnu.org/gnu/grub
▲:可通过Ventoy和YUMI的支持列表查看盛行的系统备份/启动修复/启动制作工具
1.2 Grub2启动盘制作
-
1.优盘或硬盘分区:数据分区DAT(NTFS)、启动分区ESP(FAT32)。
2.安装Grub2Win到C:/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(可选解压PETOOLS到ESP分区以增强功能)、下载电脑店解压可得WinPE,全部放于/ESP/lives目录。
6.启用WinPE:AIOBoot可直接启动WinWIM、WinISO、LinuxISO及BootableVHD,或将WinPE.Wim通过bootice添加到BCD。
7.恢复多系统:AIOBoot进入WinPE恢复Windows、AIOBoot或Grub2Win自定义菜单进入UbuntuLive恢复系统,可进入Win10PE.wim修复Windows启动,可进入UbuntuLive.iso或BootRepairDisk.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)添加其它路径的efi到UEFI启动管理器、或先加载能启动efi的efi(如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-packages:apt安装
/usr/local/lib/python3.8/dist-packages:pip安装
/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更新LinuxKernel:wsl --update
WSL下载UbuntuXXX:MSStore下载并创建用户和设置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-*(不含dbgsym和autorace)
ros-foxy-*(不含dbgsym和connext及冲突项:ros-foxy-rmf-building-sim-ignition-plugins
ros-foxy-rmf-demos-ign、ros-foxy-rmf-robot-sim-ignition-plugins ros-foxy-rmw-connext-cpp
ros-foxy-rmw-connext-shared-cpp、ros-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-generic到secure_path值开头
WSL到此转到配置并备份为XXX_BaseNoetic_FullFoyx.tgz
(7)PC安装vscode&bcompare&nomahcine:apt install ./xxx.deb
VSCodeRoot登录:添加alias vscode='code --user-data-dir --no-sandbox'在~/.bashrc
VSCode插件安装:C/C++ExtensionPack(MS)、C/C++MathFV、PythonExtensionPack
(8)PC安装docker:https://docs.docker.com/engine/install/ubuntu
添加源后执行:apt install docker-ce docker-ce-cli containerd.io
(9)PC安装boot-repair:https://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安装timeshift:https://github.com/teejee2008/timeshift
add-apt-repository -y ppa:teejee2008/timeshift
apt update && apt install timeshift
(11)PC安装cubic:https://launchpad.net/cubic
apt-add-repository universe && apt-add-repository ppa:cubic-wizard/release
apt update && apt install --no-install-recommends cubic
(12)PC安装systemback:https://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):kconfiglib、nunavut、pyulog、pyyaml
当前apt缺失的APMPY依赖(20220301):pymavlink、MAVProxy、geocoder
当前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-ng、libqt5datavisualization5-dev、python3-pyside2*、python3-cerberus、python3-pygame、python3-intelhex、libnlopt-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-manager或systemctl 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
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
###对Ubuntu1804:mv /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=13、TabSize=2
(2)LineHeight=1.1、cmake.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=burger或waffle或waffle_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清理:除VIMSwapFilesAcrossSystem和FreeDiskSpace及Memory
(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
#加&:以防止阻塞在登录界面
#加进程名判断:防止telnet或ssh等登录时重复启动
#进程名查询: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)管理工具:文本工具、synaptic、add-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:下载密钥到stdin,s不打印任何信息
(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_PATH、AMENT_PREFIX_PATH、COLCON_PREFIX_PATH等
(2)更新ROS_DISTRO、ROS_PYTHON_VERSION、ROS_LOCALHOST_ONLY等
(3)更新PATH、PYTHONPATH等
0.特定配置
(1)调用内置工具:追加bin和scripts到Path、配置AMENT_PREFIX_PATH为如D:/app/ros2
(2)调用特定结点:追加bin和lib/xxx到Path、配置AMENT_PREFIX_PATH为如D:/app/ros2
(3)相同网段分组:set ROS_DOMAIN_ID=0 #此值相同才能相互通信
(4)设置DDS:set 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)对于CyCloneDDS:set 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.txt和package.xml
2)手动创建:创建rossim,然后在rossim内创建CMakeLists.txt和package.xml并添加期望的依赖库,xml至少包含结点解决方案名name, version, description, maintainer及license
(2)添加依赖:编辑CMakeLists.txt和package.xml
1)CMakeLists.txt与package.xml的内容是相互对应的关系
2)CMakeLists.txt主要是定位所依赖的ROS库:find_package
3)package.xml主要是描述所依赖的ROS库:depend, build_depend, buildtool_depend, exec_depend
(3)创建环境:创建ros2vc.bat和ros2vs.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.bat和D:/app/ros2ex/out/install/local_setup.bat(后者不包含执行D:/app/ros2/setup.bat)
(2)生成工程:在CMakeLists中增加包含D:/app/ros2/include与D:/app/ros2ex/out/install/include和链接D:/app/ros2/lib/*.lib与D:/app/ros2ex/out/install/lib/*.lib后生成CPPVS工程
(3)编译工程:基于D:/app/ros2ex/out/install/setup.bat打开CPPVS工程进行编译调试
(4)编译工程(永远模式):执行如之前所述的对ROS的setup.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/tbb且TBB_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\bin到Path头(非常重要)
(2)Qt5.9.9组选择msvc2015-64bit和除QtScript外所有Qt打头的库
(3)DevDes组成选择CBDebuger和MinGW
(4)WIN移植到第三方时根据实际需求还需要将~/plugins中的某些目录复制到与运行程序相同的目录,当前有:imageformats、sqldrivers、platforms
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.prl和libQGLViewer-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只需更新dll和lib文件
3.SDL2
(1)解压到D:/app/dev/SDL2且只提取x64库文件重组为bin和lib目录
(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)选择类型:Archive和LTS
(2)Qt6.2.x组:MSVC-2019-64bit、Android、Qt-Quick3D、Qt-Shader-Tools、Additional-Libraries、Qt-Quick-Timeline
(3)DDTool组:Qt-Creator7.0.2-CDB-Debuger-Support、Debugging-Tools-for-Windows、Qt-Design-Studio3.5.0
(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只需更新dll和lib文件
3.AndroidDev
(1)安装AStudio:解压到D:/app/adk/studio并运行以在线下载安装基础件
(2)安装期望件:SDK、BTs、NDK、USB/WebDrv、CLI-latest、模拟镜像、Intel/Amd模拟加速
(3)安装Gradle:新建NativeC++和BasicActivity并编译运行即可自动安装到C:/Users/XXX/.gradle
(4)删除默认件:Platforms、BuildTools、NDK #删除*.lock和*.log后
(5)备份开发环境:复制C:/Users/XXX/.gradle到D:/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.txt同X86开发、build.gradle由abiFilters指定平台。
|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包含ABIs、ABI=arm64-v8a/x86-64/armeabi-v7a/x86
|若为appsrclibs则dir=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)安装特定SDK和Gradle:SDK-31、BTs-31.0.0、NDK-22.1.17171670、Gradle7.2
(2)安装OpenSSL和JDK11:解压到D:/app/adk/openssl、复用D:\app\adk\studio\jre
(3)备份核心Gradle:复制以下目录、由于部分未备份所以迁移后仍需联网下载部分组件
C:/Users/XXX/.gradle/cache/7.2到D:/app/adk/gradle/cache
C:/Users/XXX/.gradle/daemon/7.2到D:/app/adk/gradle/daemon
C:/Users/XXX/.gradle/wrappter/dists/gradle-7.2-bin到D:/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后的fmt与ros2foxy不兼容
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/yamlcpp且BUILD_GMOCK=OFF、BUILD_MOCK=OFF、BUILD_TESTING=OFF
2.4 suitesparse+eigen+sophus+ceres+nplot+armadillo
++rtklib+geographiclib+robotlocalization
++opengv+octomap+rtabmap
-
(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/eigen3且BUILD_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/sophus且BUILD_EXAMPLES=OFF、BUILD_TESTS=ON、SOPHUS_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)开启:LAPACK、SCHUR_SPECIALIZATIONS、MINIGLOG
(3)开启:SUITESPARSE、CXSPARSE、EIGENSPARSE
(4)关闭:ACCELERATESPARSE(MacOS可见)
(5)关闭:BUILD_TESTING、BUILD_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/nlopt且BUILD_SHARED_LIBS=OFF
6.armadillo
7.rtklib
(1)解压到D:/app/dev/geographiclib
(2)添加环境变量D:\app\dev\geographiclib\bin
(3)增加预宏GEOGRAPHICLIB_SHARED_LIB=0以使用静态库
10.opengv:编译(仅依赖Eigen)(静态库)安装到D:/app/dev/opengv且BUILD_TESTS=OFF
复制~/Release/random_generators.lib到D:/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库文件重组为bin和lib目录
(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/include与D:/app/dev/glew/lib/glew32.lib
libraw_XXX=D:/app/dev/libraw/include与D:/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)至少选中:QT、VTK、Eigen、Ceres、TBB、INF_ENGINE、NGRAPH
2)至少取消:CUDA、Python
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_STUBS、TBB、TESTS、PER_TESTS、EXAMPLES、
opencv_python_tests、opencv_apps、opencv_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.lib和MavLinkCom.lib到D:/app/dev/airsim/lib
复制~/airsim/ros2/src为D:/app/ros2ex/airsim_ros并对源码进行相应修改
2.8 python3+ros2+ros2ex+webots+win环境变量配置
-
1.安装ROS2-Core包
(1)下载并解压ROS2XXX到D:\app\ros2
(2)基于D:\app\ros2\Scripts\xxx.py安装相应的Python版本到相应的路径并追加Path
(3)安装OpenSSL到D:\app\ros2openssl并添加OPENSSL_CONF和追加Path
(4)编译OpenCV到D:\app\opencv并添加OpenCV_DIR和追加Path
(5)安装辅助工具:git、cmake、bcompare
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)Airsim:https://github.com/microsoft/AirSim(1.7.0)
(12)Mav|MSG:https://github.com/mavlink/mavros(2.1.0)
(13)TB3|MSG:https://github.com/ROBOTIS-GIT/turtlebot3_msgs(2.2.2)
(14)Gazebo|MSG:https://github.com/ros-simulation/gazebo_ros_pkgs(3.5.3)
(15)WebotsROS2:https://github.com/cyberbotics/webots_ros2(latest)
(21)遥控驱动https://github.com/ros-drivers/joystick_drivers(3.0.1)(仅joy和sdl2_vendor)
版本说明:Joy-CMake链接rclcpp_components::component对foxy暂不用(如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)运行webots报OpenGL错误:安装CUDA(将自动更新驱动)后禁用集成显卡
(2)运行webots_ros2_xxx出错:删除C:\Users\Administrator\AppData\Local\Temp\*
8.
9.
10.创建编译环境(ros2vc.bat和ros2vs.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飞行配置
飞机升降和航向:axs0、axs1 启桨停桨:btn1、btn2 拍照:btn4
飞体前后和左右:axs3、axs4 起飞降落:btn6、btn7 返航:btn8
云台上下和左右:axs6、axs7 云台复位: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安装PX4FW:git 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安装APMFW:git clone https://github.com/ArduPilot/ardupilot --recursive
5.Ubuntu安装MavRouter:git 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)命令路由API:mavlink-routerd -e 10.42.0.11:14540 127.0.0.1:14540
(4)命令路由GCS:mavlink-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(必须):px4、aerotenna、airmind、atlflight、auav、beaglebone、intel、nxp、…
(2)model(必须):sitl、fmu-v2、fmu-v3、fmu-v4、fmu-v5、navio2、…
(3)variant(可选):rtps、lpe
(1)viewer(必须):gazebo、jmavsim、none(启动后等待某个模拟器)
(2)model(可选):iris(def)、rover、… #PX4_SIM_MODEL
(3)debugger(可选):none(def)、ide、gdb、…
(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系统:sqfs2tar、tar2sqfs
(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-generic到secure_path值开头
(2)查看BUSID:usbipd wsl list
(3)装载BUSID:usbipd wsl attach --busid xxx #在Linux中通过lsusb查看
(4)卸载BUSID:usbipd 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 #22ssh、23telent
(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.命令归类
全局查看:version、info、inspect
镜像管理:images|save|load|rmi|history、build|tag|commit、pull|push|search|login|logout、event
容器管理:ps|import|export|rm|rename、create|run
容器操控:start|restart|stop|kill|wait、top|pasue|unpause|exec、stats、logs、port
容器通信:attach、cp、diff、update
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/ISOBoot、https://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
prefix:Grub安装目录、如(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)模组装卸:lsmod、insmod modname、rmmod modname
(4)查找文件:search [--file|--label|--fs-uuid] [--set [var]] name
使用别名:search.file、search.fs_label、search.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.BIOS与UEFI硬件差异
-
1.BIOS硬盘结构
(1)LBA0:因该扇区中,引导代码占有绝大部分的空间,故将此扇区称为MBR扇区
MBR:446字节,存储系统的引导程序
PEs:64字节,每16字节描述描述一个PE(Partition Entry),所以最多共4个分区
End:2字节,值为0xAA55
(2)LBA1~LBA62:隐藏扇区,保留备用。
(3)LBA63:第一分区的起始位置。
(4)LBA64~LBAEnd:参见《挨踢_硬盘结构+文件系统+系统启动+数据恢复1st.doc》
2.UEFI硬盘结构
(1)LBA0:MBR扇区,记录了启动代码和分区信息。
若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、分区可用的始末LBA、PEs包含的项数及每项占用的字节数等信息
-
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 字节
当前PTH的LBA位置(对主PTH恒为1)
32 (0x20)
8 字节
另一PTH的LBA位置(对副PTH恒为总LBA数减2)
40 (0x28)
8 字节
分区可用的第一LBA位置(主PEs的最后LBA加1=LB34)
48 (0x30)
8 字节
分区可用的最后LBA位置(副PEs的第一LBA减1=LB-34)
56 (0x38)
16 字节
硬盘GUID (在UNIX及派生系统中也叫UUID)
72 (0x48)
8 字节
主PEs的LBA位置(恒为2)
80 (0x50)
4 字节
PEs包含的PTE数(即分区数)
84 (0x54)
4 字节
每个PE的尺寸(通常为128字节)
88 (0x58)
4 字节
PEs的CRC32校验码
92 (0x5C)
*
保留,必须是0(对512字节的LBA,剩余420字节)
(3)LBA2~LBA33:主PEs,每个PE用128字节描述
-
Offset
Length
Contents
常用分区类型GUID
EFI/ESP分区:C12A7328-F81F-11D2-BA4B-00A0C93EC93B,与操作系统无关
基本数据分区:EBD0A0A2-B9E5-4433-87C0-68B6B72699C7,对Windows和Linux相同
微软保留分区:E3C9E316-0B5C-4DB8-817D-F92DF00215AE,Windows专用
Linux交换分区:0657FD6D-A4AB-43C4-84E5-0933C84B4F4F,Linux专用
0 (0x00)
16 字节
分区类型标志GUID
16 (0x10)
16 字节
分区唯一标志GUID
32 (0x20)
8 字节
起始LBA
40 (0x28)
8 字节
终止LBA
48 (0x30)
8 字节
属性标志(如60代表只读)
56 (0x38)
72 字节
分区名(36个UTF-16字符)
(4)LBA34:第一分区的起始位置
(5)LBA-2~LBA-33:副PEs
(6)LBA-1:副PTH
-
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步