【Linux】从Ubuntu安装到ORB-SLAM

ubuntu安装一条龙

分区方案

分区类型挂载点分区格式大小
逻辑分区(Logical)/bootext42G
主分区(Primary)/ext4150G(适当调整)
逻辑分区(Logical)swap10G
逻辑分区(Logical)/homeext4200G(适当调整)

命令行连wifi

安装好之后,ubuntu开机界面>advence option> recovery mode>root>进入命令行模式

iw dev //查看网卡,我的是wlp7s0
ip link show wlp7s0	//查看网卡状态
ip link set wlp7s0 up //开启网卡

rfkill list all
rfkill unblock all

iw wlp7s0 scan | less //扫描合适WiFi,记下SSID

wpa_passphrase SSID PASSWORD > wpa.conf //你家wifi名字,密码
wpa_supplicant -B -D wext -i wlp7s0 -c ./wpa.conf //登录

iw wlp7s0 link //查看连接上没有,如果是not connected的话就重启
dhclient wlp7s0 //获得ip

ping www.baidu.com //验证,此步骤跑通了就能上网了

解决无法进入桌面的问题

此问题是由于新安装的没有显卡驱动造成的,再上述环境中继续安装即可

nvidia-smi //一般来说是没有的,因为没下载
ubuntu-drivers devices //查看你电脑的驱动,我的是nvidia-384

apt-get update
apt-get remove nvidia-* //先删除原来的
apt-get install nvidia-384 //对应的是我的recommend型号

nvidia-smi //出现显卡信息即可

联想电脑没有wifi选项

成功开机后:

 rfkill list all //一般是硬件禁用了,删除即可
 sudo modprobe -r ideapad_laptop //现在便可连接

开机启动添加:

sudo gedit /etc/rc.local
...
//在最后一行前添加:
sudo modprobe -r ideapad_laptop # | echo "PASSWORD"

输入密码显示星星

sudo gedit /etc/sudoers
//在第8行添加末: ,pwfeedback

安装搜狗输入法

//先去搜狗官方下载deb的安装包
https://pinyin.sogou.com/linux/

//安装fcitx
apt update
sudo apt-get install fcitx (或者再软件商店里搜索fcitx,下载即可)
//如果没有的话换个阿里的源或找fcitx的源就行了

//安装中文
> system settings > language support > 出现弹窗,点击安装 > 将dbus换成fcitx

//安装搜狗
> 双击刚才下载好的deb包即可

//调出输入法
> 点击右上角的键盘图标 > configure > 点击加号添加 > 查找"sougou" > 出现即可

搜狗输入法乱码

终端

cd ~/.config
rm -rf SougouPY* sogou*

//再杀掉fcitx进程即可
killall fcitx

(重装sougou试试)
ubuntu开机弹出报错

//进入以下位置,会出现错误信息
cd /var/crash
ls

LINUX常用操作搜集

文本操作:

grep "WORDS" ./status
grep -v //反向匹配
grep -n //显示行数

sed -n "10000,20000p" ./status | less //查看从100到200行的内容
vim +20000 ./status //从20000行开始操作

vim中的一些操作:

dd //删除一行
v //进入复制模式
y //复制选中内容
p //粘贴
u //撤回上一步
h、j、k、l //左下上右 

解亚缩相关:

tar -czvf PATH FILE	//tar压缩

tar -xzvf PATH FILE	//tar解压
unzip FILE	//zip解压

简单查找一个文件:

find -name YOUEFILENAME

pip加源

gedit ~/.pip/pip.conf:

[global]
index-url = http://mirrors.aliyun.com/pypi/simple/ 
trusted-host = mirrors.aliyun.com

pip升级:

pip install --upgrade pip

apt换源

查看源中pip版本,升级不成功是应为源不行,前提是apt update过了

apt-cache madison python-pip

打开终端:

gedit /etc/apt/sources.list

(18.04是bionic,16.04是xenial

将原来的备份一个然后全文替换成如下

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

推荐清华云:

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse

opencv2.4.13安装

安装各种依赖:

sudo apt-get install cmake
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev libgtk2.0-dev pkg-config

进入安装包创建build文件夹:

//cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

编译和安装:

sudo make -j8
sudo make install

配置环境:

sudo gedit /etc/ld.so.conf

//文中添加一行:
/usr/loacal/lib
sudo gedit /etc/bash.bashrc

//文末添加:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

检验:

pkg-config opencv --modversion

//正常的话出现以下版本号:
2.4.13.6

opencv的初步使用

demo.cpp:

/*--------------------------- motion blur and demotion blur --------------------------------*/
// 此代码用于实现模糊运动的添加与消除。
// 原理:在已知模糊运动核的前提下,可通过核线性卷积的形式对图像添加运动模糊,
//       反之也可利用该核精确的去除该运动模糊。
// 说明:本例代码是在梳理前人代码的基础上整理得到,仅使用了C++常用库与opencv2.4.5
//       AddMotionBlur的createLinearFilter函数在opencv3+版本中已经去除,故而建议只用opencv2+
//       ker 核的大小不能过大,例如,以lena图为例,ker的len为20时,会导致无法复原。 
// Input: 
//      彩色三通道图像,在读取时转化为灰度图
// output:
//      添加运动模糊的单通道灰度图,或去除运动模糊后的单通道灰度图
// version: 1.0 
// date: 2018/6/6
// by xie qunyi
// 转载请注明:
/*------------------------------------------------------------------------------------------*/
 
#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
// Create an image of complex number type (2 channels to store 
// real part and imaginary part) from an input grayscale image
// src : single channel grayscale image input
// dst : two channel complex image output
void i2z(cv::Mat src, cv::Mat& dst)
{
	//convert the image to float type, create another one filled with zeros, 
	//and make an array of these 2 images
	cv::Mat im_array[] = { cv::Mat_<float>(src), cv::Mat::zeros(src.size(), CV_32F) };
 
	//combine as a 2 channel image to represent a complex number type image
	cv::Mat im_complex; cv::merge(im_array, 2, im_complex);
 
    //copy to destination
	im_complex.copyTo(dst);
}
 
// convert a 2 channel complex image to a single channel grayscale image
// by getting magnitude
// src : two channel complex image input
// dst : single channel grayscale image output
void z2i(cv::Mat src, cv::Mat& dst)
{
    //split the complex image to 2
	cv::Mat im_tmp[2]; cv::split(src, im_tmp);
    
    //get absolute value
	cv::Mat im_f; cv::magnitude(im_tmp[0], im_tmp[1], im_f);
    
    //copy to destination
	im_f.copyTo(dst);
}
 
// return complex image C = A./B
// if A = a+b*i and B = c+d*i;
// then C = A./B = ((a*c+b*d)/(c^2+d^2))+((b*c-a*d)/(c^2+d^2))*i
cv::Mat complexDiv(const cv::Mat& A, const cv::Mat& B)
{
    cv::Mat A_tmp[2]; cv::split(A, A_tmp);
    cv::Mat a, b;
    A_tmp[0].copyTo(a);
    A_tmp[1].copyTo(b);
    
    cv::Mat B_tmp[2]; cv::split(B, B_tmp);
    cv::Mat c, d;
    B_tmp[0].copyTo(c);
    B_tmp[1].copyTo(d);
    
    cv::Mat C_tmp[2];
    cv::Mat g = (c.mul(c)+d.mul(d));
    C_tmp[0] = (a.mul(c)+b.mul(d))/g;
    C_tmp[1] = (b.mul(c)-a.mul(d))/g;
    
    cv::Mat C;
    cv::merge(C_tmp, 2, C);
 
    return C;
}
 
// add motion blur to the src image
// motion degree is depended on the kernel ker
// ker can be product by matlab func : fspecial
// matlab code : {LEN = 3; THETA = 0; ker = fspecial('motion', LEN, THETA);}
cv::Mat AddMotionBlur(const cv::Mat& src, const cv::Mat& ker)  
{   
    // convert to float data
    imshow("origin", src);

    cv::Mat sample_float;
    src.convertTo(sample_float, CV_32FC1);
    imshow("origin2", sample_float);

    
    // motion blur
    cv::Point anchor(0, 0);
    double delta = 0;
    cv::Mat dst = cv::Mat(sample_float.size(), sample_float.type());
    Ptr<cv::FilterEngine> fe = cv::createLinearFilter(sample_float.type(), ker.type(), ker, anchor,
        delta, BORDER_WRAP, BORDER_CONSTANT, cv::Scalar(0));
    fe->apply(sample_float, dst);
    
    
    return dst; 
}
 
// remove motion blur which is added by the special kernel ker
// the same function in matlab is:
// {[hei,wid,~] = size(blurredimage);If = fft2(blurredimage);
//  Pf = fft2(ker,hei,wid); deblurred = ifft2(If./Pf);}
cv::Mat DemotionBlur(const cv::Mat& src, const cv::Mat& ker)
{ 
    // If
    Mat blurred_co; 
    i2z(src, blurred_co);
    Mat If;
	dft(blurred_co, If);
    
    // Pf
    Mat im_complex_ker; 
    cv::Mat tmp = cv::Mat::zeros(src.rows, src.cols, CV_32FC1);
    ker.copyTo(tmp(cv::Rect(0,0,ker.cols,ker.rows)));
    Mat tmp_co;
    i2z(tmp, tmp_co);
    Mat Pf;
	dft(tmp_co, Pf);
    
    // If./Pf
    cv::Mat im_co = complexDiv(If, Pf);
    
    //Convert the DFT result into grayscale
    Mat im_de;
	dft(im_co, im_de, DFT_INVERSE+DFT_SCALE); 
	Mat im_deblur; z2i(im_de, im_deblur);
    
    return im_deblur; 
}
 
int main(int argc, char** argv){
    
    // 读取测试样例
    const std::string ImageName = "/home/suu/Desktop/demo/1.jpg";
    cv::Mat DemoImage = cv::imread(ImageName, CV_LOAD_IMAGE_GRAYSCALE);
    
    
    // 运动模糊核
    float kernel[1][3] = {{0.333333333,0.33333333,0.33333333}};
    cv::Mat ker = cv::Mat(1, 3, CV_32FC1, &kernel);
    cout << "ker:" << ker << endl;
    // imshow("origin", DemoImage);
    
    // 添加运动模糊
    cv::Mat blur = AddMotionBlur(DemoImage, ker);
    // imshow("blur", blur);
    waitKey(100000);
    
    // 去除运动模糊
    // cv::Mat deblur = DemotionBlur(blur, ker);

	
    return 0;
}

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0.0)
project(demo VERSION 0.1.0)

include(CTest)
enable_testing()

# set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
# find_package(OpenCV 2 REQUIRED)
find_package(OpenCV REQUIRED)

add_executable(demo demo.cpp)
# aux_source_directory(. ALL_SRCS)
# add_executable(demo ${ALL_SRCS})

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

target_link_libraries(demo ${OpenCV_LIBS})

vscode编辑器:

  • 安装c++,cmake插件
  • ctrl+shift+p在控制台输入:cmake quick start
  • 上述内容复制后按F7编译即可

opencv双版本安装

先是装上了opencv3,现在有需求又来装opencv2.4.13.6

下载后解压
mkdir build
cd build
...
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local/opencv2 ..
...
make -j4
...
...
sudo make install

出现问题:

/home/suu/Downloads/opencv-2.4.13.6/modules/contrib/src/rgbdodometry.cpp:65:47: fatal error: unsupported/Eigen/MatrixFunctions: No such file or directory
compilation terminated.

打开这个opencv-2.4.13.6/modules/contrib/src/rgbdodometry.cpp文件,在第65行处改成正确的绝对路径

#  include </usr/local/include/eigen3/unsupported/Eigen/MatrixFunctions>

安装好后:

在使用时只需在CmakeFile.txt里添加一句即可:

set(OpenCV_DIR /usr/local/opencv2/share/OpenCV)
find_package(OpenCV 2 REQUIRED)

如果使用opencv-3的话就只有:

find_package(OpenCV REQUIRED)

因为我之前装3的时候是默认安装的路径

ORB-SLAM安装

直接运行根文件夹下的build.sh即可

遇到问题:

/home/suu/Downloads/SLAM/ORB_SLAM2/Examples/Monocular/mono_tum.cc:105:34: error: ‘usleep’ was not declared in this scope

为出错的文件添加头文件#include <unistd.h>即可

LocalMapping.cc

LoopClosing.cc

System.cc

Tracking.cc

Viewer.cc

TUM数据集
https://vision.in.tum.de/data/datasets/rgbd-dataset/download#freiburg1_desk

Examples用法

./mono_tum  path_to_vocabulary  path_to_settings  path_to_sequence

使用evo做slam的轨迹分析

安装依赖:

pip install numpy scipy matplotlib

安装evo:

git clone https://gitee.com/Ralphson/evo.git
...
cd ./evo
pip install --editable . --upgrade --no-binary evo

//安装tkinter
sudo apt-get install python-tk	//tkinter实在系统层面安装 使用pip无法安装

使用:

evo_traj tum '/home/suu/Downloads/SLAM/ORB_SLAM2/Examples/Monocular/KeyFrameTrajectory.txt' -p --plot_mode=xyz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值