持续更新....
最近在看SLAM十四讲相关内容,顺便跑一跑快半年没有开过的虚拟机
本期写旧未使用的虚拟机如何上手…
顺便补充一些个人使用虚拟机时比较有帮助的零碎知识点,但不一定规范。
加关注限制用于统计真实阅读数据
颜色代码
蓝色
红色
绿色
chatGPT帮助了我很多,或许本可以不用这个blog的;(
本地VSCode远程连接虚拟机
遇到过一次VSCode忽然连接不上虚拟机,可以按照这篇文章
下载openssl:
apt install openssh-server
应该注意,要在Ubuntu端打开ssh service,使用的代码为
sudo service ssh start
# 也可能是下面这个
sudo systemctl start ssh
通过查看进程来确定ssh是否已连接
可以看这个博主的博客
vscode 连接虚拟机(Ubuntu)
进程类✨
根据关键字查看进程
ps -ef | grep 【关键字】 # 可以查看包含该关键字的进程
一些解释:
ps -ef
用于列出当前系统上所有的进程信息。|
是管道操作符,用于将ps -ef
的输出作为grep 【关键字】
的输入。grep 【关键字】
用于过滤ps -ef
的输出,只保留包含【关键字】的行。- 可以再加上
|grep -v grep
,grep -v
表示反向匹配,即在输出结果上筛选出不含"grep"的结果
区分进程号和父进程号
左边的是进程号,右边的是父进程号
根据进程号查看进程
ps -p 【进程号】
杀死进程
根据进程名杀死进程:killall
killall 【进程名】
请注意,使用killall
命令会杀死所有匹配的进程,包括可能属于其他用户的进程。
根据进程号杀死进程:kill
kill 【进程名】
短选项“-9”的作用
不加 -9
选项时,进程可以选择忽略它或进行一些清理操作后再退出。在大多数情况下,推荐使用这种方法,因为进程有机会完成一些清理工作,释放资源等。
使用 -9
选项时,进程将会立即被终止。
ROS
ROS安装
wget http://fishros.com/install -O fishros && sudo ./fishros
将py文件添加为可执行
chmod +x filename # 将文件(如.py)设置成可执行文件
创建工作空间和功能包
创建指定文件夹及src子文件夹
mkdir -p ~/my_workspace/src
【在src目录下】创建新的工作空间
cd ~/my_workspace/src # 进入工作空间中的src子目录
catkin_init_workspace
或者【在工作空间目录下】创建新的工作空间
cd ~/my_workspace # 进入工作空间目录 catkin_make
【在src目录下】创建功能包
cd src # 进入工作空间中的src子目录
catkin_create_pkg 【功能包名字】
返回工作空间进行catkin_make
开机自动source
放到~/.bashrc里,开局自动配置
.launch中remap的作用
<remap from="chatter" to="hello"/>
相当于:当订阅者订阅话题chatter
时,他将只会收到名为hello
的话题发布的消息
topic重映射理解及验证(remap标签)
launch中的与rosrun的互换
<node pkg="A" type="B" name="ANY_NAME" output="screen"/>
# =========
rosrun A B
下载ros_numpy
sudo apt-get install ros-$release-ros-numpy
其中将$release
换成自己的ros版本
如:
sudo apt-get install ros-melodic-ros-numpy
Conda
查看环境列表✨
conda env list
创建新环境,激活与退出
conda create --name myenv python=3.8
# 创建一个名为"myenv"的环境,并使用Python3.8
激活
conda activate 【环境名称】 # 激活环境
# source activate 【环境名称】 # 在Linux中使用source激活
添加指定路径到python解释器✨
import sys
sys.path.append('/path/to/utils')
关键字搜索✨
根据【文档内部分关键字】搜索
- 普通搜索
grep -r 【关键字】 /path/to/somewhere/
-
在指定后缀文件中搜索
借助–exclude
或者–include
参数比如:- 仅在后缀为
.c .h
的文件内查找
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "【关键字】"
- 仅在后缀不为
.log
的文件内查找
grep --exclude=*.log -rnw '/path/to/somewhere/' -e "【关键字】"
- 仅在后缀为
-
在指定文件夹中搜索
借助–exclude-dir
或者–include-dir
参数比如:- 仅在名为
test
的文件夹内查找
grep --include-dir={test, output} -rnw '/path/to/somewhere/' -e "【关键字】"
- 仅在不为
input
的文件夹内查找
grep --exclude-dir=input -rnw '/path/to/somewhere/' -e "【关键字】"
-r
或者-R
为递归查找,-n
是行号-w
为要求全匹配.-l
(小写L) 参数可以只列出文件名.
参考Linux下遍历查找某的文件包含某个关键字的命令 - 仅在名为
根据【文件名】搜索
find /path -name 【关键字】 -type d,f #type可去除
type选项选择文件名的种类
d
: 文件夹
f
: 文件
可用逗号间隔
仅在当前路径下搜索
要仅在当前路径搜索,而不进入子文件夹,可以使用-maxdepth
选项来限制搜索的深度。将-maxdepth
设置为1可以实现该功能。
模糊搜索
使用通配符匹配文件名的一部分。
在Ubuntu中,通配符*
可以匹配任意字符,?
可以匹配单个字符。
vim中的关键字搜索✨
:
+ /
+ 【关键字】
通过按键n
和N
查找下一条和上一条
利用管道进行高级搜索
grep中,短选项
-r
递归遍历文本内文字内容
-v
表示对内容取反(用于管道)
-F
作为固定字符串而不是正则表达式处理(用于管道),查找文件名
find . -name "*.hcs" |grep -v "test" | xargs grep -r "HDF_PLATFORM_UART_5"
# 查找所有.hcs文件中,且路径【不包括】test的路径,并在这些路径中找包括关键字HDF_PLATFORM_UART_5的
find . -name "*.hcs" |grep -F "test" | xargs grep -r "HDF_PLATFORM_UART_5"
# 查找所有.hcs文件中,且路径【包括】test的路径,并在这些路径中找包括关键字HDF_PLATFORM_UART_5的
find +grep:指定后缀的多个关键字检索✨
-l 选项表示只打印包含匹配行的文件名,必须要加
find ./ -name *.dts | xargs grep -rl 'rk3568' | xargs grep 'gpio-leds'
Git相关
ssh免密登录
git config --global user.name “szw123”
# 全局变量用户名
git config --global user.email “xxx@xxx.com”
##全局变量用户邮箱
ssh-keygen -t rsa -C “xxx@xxx.com”
# 生成密钥
查看密钥
cat ~/.ssh/id_rsa.pub
git push报错相关
当本地分支与远程分支没有共同祖先时,会出现 fatal: refusing to merge unrelated histories
的问题。
1.git pull origin master --allow-unrelated-histories
2.git pull --rebase origin master
含义
:把远程库中的更新合并
到(pull=fetch+merge)本地库中,–rebase 的作用就是取消本地库中刚刚的 commit ,并把他们接到
更新后的版本库之中。出现如下图执行pull执行成功后,可以成功执行git push origin master
操作。
git报错:92HTTP … fatal early EOF
缓冲区不够
git config --global http.postBuffer 524288000
pip相关
pip下载【免换源版】✨
pip --default-timeout=1000 install 库名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
pip下载指定版本
pip install 库名称==版本名称
如果不知道版本,就先不打版本名称,pip会显示可选择版本
pip模糊搜索【已废弃】
pip search 【关键字】
现在已经无法使用
请在https://pypi.org/中查看。
创建虚拟环境✨✨
第一步:下载virtualenv
pip --default-timeout=1000 install virtualenv -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
第二步:创建及进入虚拟环境
virtualenv -p python3.8 NAME # 创建虚拟环境
- 注意版本问题,可以通过以下代码更新你的virtualenv
pip install --upgrade virtualenv
- 如果报错”python_spec=‘python3.8’“说明你本地并没有python3.8,可以看
\usr\bin\python*
路径下有哪些python版本,换成对应的版本
source NAME/bin/activate # 进入该虚拟环境
其他:生成环境配置文件和按照配置文件下载
记得要在虚拟环境中使用
生成文件
pip freeze > requirements.txt # 列出环境中的所有包及其对应的版本。
导入配置
pip install -r requirements.txt # 读取.txt文件并安装
make相关下载及基础知识
catkin_tools下载
https://catkin-tools.readthedocs.io/en/latest/installing.html
sudo pip3 install -U catkin_tools
【临时方案】catkin build 报错:Failed << blasfeo_catkin
在笔者的虚拟机上经验证,blasfeo可以这么做,但是hpipm不行
如果想要长期解决这个问题,可考虑在虚拟机上配置scientific工具
通过find -name
指令很容易找到这些功能包,找出他们的CMakeLists.txt不难发现,确实涉及了github下载环节
- 方法一:修改源代码
将 FetchContent_Declare 和 FetchContent_MakeAvailable 中的 GIT_REPOSITORY 和 GIT_TAG 替换为你手动下载的源代码的文件路径。这样可以绕过从 Git 下载源代码的步骤。
如图所示,可自行离线下载好后按如下方式配置
- 方法二:手动下载源码【🚫未验证】
可以手动从 https://github.com/xxxxx 下载源代码,并将其放置在 ${BLASFEO_DOWNLOAD_DIR} 目录中。确保下载的源代码与指定的 GIT_TAG 相对应。通常${BLASFEO_DOWNLOAD_DIR}在工作空间的build/<对应功能包>下
杂项
虚拟机增加内存的两种方法
参考这篇博客
查看磁盘容量
df -hl
-h
:以人类可读的格式显示磁盘空间使用情况。使用该选项后,磁盘空间的大小将以较为易读的方式显示,例如使用 KB、MB、GB 等单位来表示。-l
:只显示本地文件系统的磁盘空间使用情况。使用该选项后,df
命令将只显示本地文件系统(即不包括网络文件系统)的磁盘空间信息。
查看剩余内存
free -m
输入free -m
命令时,它会列出系统中的内存统计信息,包括总内存、已使用内存、可用内存和缓存/缓冲区的内存等。
以下是 free -m
命令的常用选项和用法:
free -m
:以 MB 为单位显示内存使用情况。free -g
:以 GB 为单位显示内存使用情况。free -h
:以人类可读的格式显示内存使用情况,自动选择合适的单位(如 KB、MB、GB)。free -s <秒数>
:连续显示内存使用情况,并每隔指定的秒数更新一次。
查看某文件大小
du -sh <文件路径>
-s
选项表示只显示总和,-h
选项表示以人类可读的方式显示文件大小。
在两个ssh之间传输文件/文件夹【用autodl下github文件…】✨
远程到本地
scp -P 52063 root@region-3.seetacloud.com:/remote/path/to/file /local/path/to/save
文件夹:加短选项-r
scp -r -P 52063 root@region-3.seetacloud.com:/remote/path/ /local/path/to/save
即ssh指令中的"ssh"换成"scp"即可
注意-P为大写!
本地到远程
scp -P 52063 /local/path/to/file root@region-3.seetacloud.com:/remote/path/to/save
压缩成zip文件
zip -r compressed_file.zip directory/
显示实时更新文件【如跟踪日志】✨✨
输出到文件
要实时更新某个文件的输出内容,可以使用 tail -f
命令结合重定向符号 >
将输出内容写入到另一个文件中。这样,当原文件发生变化时,输出的文件也会实时更新。
tail -f 【要监视的文件】 > 【输出文件】
请注意,tail -f
命令会持续运行,直到你手动中断(如按下 Ctrl + C)。
输出在命令行✨✨
如果你想让 tail -f
命令直接在屏幕上实时显示文件的内容更新,而不是将其输出到文件中,你可以使用以下命令:
tail -f 【要监视的文件】
替换 【要监视的文件】
为你要实时监视的文件的路径和名称。执行这个命令后,终端会实时显示文件的最新内容,并随着文件的更新而更新。
请注意,tail -f
命令会持续运行,直到你手动中断(如按下 Ctrl + C
)。
ROS更换opencv版本【cpp】
方法一:
使用cvbridge
方法二:
编辑CMakeLists.txt