SLAM十四讲学习笔记 第一期:Ubuntu复健计划

持续更新....


最近在看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 grepgrep -v表示反向匹配,即在输出结果上筛选出不含"grep"的结果

区分进程号和父进程号

左边的是进程号,右边的是父进程号

根据进程号查看进程

ps -p 【进程号】

杀死进程

根据进程名杀死进程:killall

killall 【进程名】

请注意,使用killall命令会杀死所有匹配的进程,包括可能属于其他用户的进程。

根据进程号杀死进程:kill

kill 【进程名】

短选项“-9”的作用

不加 -9 选项时,进程可以选择忽略它或进行一些清理操作后再退出。在大多数情况下,推荐使用这种方法,因为进程有机会完成一些清理工作,释放资源等。

使用 -9 选项时,进程将会立即被终止

ROS

ROS安装

wget http://fishros.com/install -O fishros && sudo ./fishros

github

将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中的关键字搜索✨

: + / + 【关键字】
通过按键nN查找下一条和上一条

利用管道进行高级搜索

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 # 创建虚拟环境
  1. 注意版本问题,可以通过以下代码更新你的virtualenv
    pip install --upgrade virtualenv
    
  2. 如果报错”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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值