WSL2配置Ubuntu20.04+opencv3.4.9

注1:Ubuntu命令行中的粘貼是點擊右鍵

注2:配置結果:在WSL中

實現Ubuntu20.04的配置

實現opencv3.4.9+opencv_contrib的配置

實現Ubuntu換國內源(阿里雲)

實現Cmake,C++相關內容的安裝

實現工攝驅動的安裝(此處調用章睿彬大佬的腳本完成驅動安裝)

注3:儘量保持配置過程的網絡通暢,否則可能出現不可預料的錯誤

1.對windows設置

為確保指令的有效性,建議以下在windows終端運行的指令,都要在管理員模式打開的終端/powershell中運行

方法一:

在Windows終端中執行指令

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

方法二:

打開:控制面板->程序->啓用或關閉Windows功能

適用於Linux的windows子系統和虛擬機平台兩項勾選

2.WSL

在windows的cmd或者powershell中輸入

wsl --install
wsl --set-default-version 2
# 第二條指令設置wsl2為默認版本
wsl --update

注意執行上述指令之後需要重啓計算機

3.安裝Ubuntu20.04子系統

1.下載

打開MicroSoft Store,搜索Ubuntu,選擇Ubuntu20.04,獲取

2.自定義子系統鏡像位置

將Ubuntu子系統放在C盤以外的盤符下

在MicroSoft Store安裝結束之後,先不要打開Ubuntu,在目標盤符新建一個文件夾,然後在C:\Program Files\WindowsApps\路徑下,windowsApps文件夾可能會提示需要權限,參照https://jingyan.baidu.com/article/9c69d48f4aad6a52c8024e7c.html 進行設置即可打開

在WindowsApps文件夾下找CanonicalGroupLimited開頭的文件(會有多個,但是隻有一個文件夾裏面有ubuntu.exe文件,一般來説是第四個文件夾),將其中的所有內容複製到目標文件夾

在目標文件夾下雙擊運行Ubuntu.exe

3.正常情況

打開Ubuntu子系統,會提示等待一會兒,然後要求輸入賬户和密碼

密碼需要輸入兩遍,並且輸入密碼的時候不會有顯示,不要以為出錯了

輸入結束之後,就可以進入系統了

4.不正常情況

錯誤1

Error code:Wsl/Service/Createlnstance/"ERROR_FILE_NOT_FOUND'

這種情況原因未知,在windows的終端中運行

wsl -l

查看已經存在的子系統

wsl --unregister 子系統名稱

然後重新啓動Ubuntu子系統即可解決

錯誤2

WslRegisterDistribution failed with error: 0x80071772

這個錯誤是因為Ubuntu子系統安裝位置錯誤

將原先下載好的Ubuntu程序卸載,重新下載安裝,即可解決

其他錯誤

見:

的2.1.8部分

如果還是無法解決,建議谷歌或者其他,CSDN真不行

可以在windows終端中運行指令

wsl --list --verbose

如果VERSION顯示為2,即為WSL2.

4.使用opencv.sh腳本進行環境配置

1.前置知識

在Ubuntu子系統中

cd /mnt

wsl將windows下的盤符都歸到了這個目錄下,所以進入這個目錄下就可以直接調用windows中的文件。例如

cd /mnt/e

就是Windows的E盤的位置

自己選擇一個位置,創建工作目錄

2.運行腳本

下載附件中的opencv.sh,本示例將腳本文件存於E:/mybash下

打開Ubuntu子系統

cd /mnt/e/mybash
# 改變opencv.sh的權限
sudo chmod +x opencv.sh
# 運行opencv.sh
sudo sh opencv.sh

等待一段時間,約十幾(或者更長,期間必須保證網絡暢通)分鐘

直到出現以下字樣即為成功

gdb,success!
opencv,success!
Please  restart system  now!!!

重啓電腦完成配置

3.錯誤處理

經過個人測試可行,不會出問題,如果中途出現意外錯誤,可以打開Windows終端,輸入指令刪除系統鏡像。

wsl --unregister Ubuntu-20.04

然後打開最初在自定義位置存放的Ubuntu子系統文件夾,雙擊運行Ubuntu2004.exe重新生成系統鏡像,重複以上操作。

如果重複之後在同一個位置出現錯誤,請儘快聯繫本人,QQ:1642075736

5.限制WSL內存佔用

WSL在運行的時候會佔據大量的內存空間,如果覺得內存爆滿影響正常的使用,可以參照下面的博客進行設置

WSL2+VS Code+CMake環境搭建

安裝VS Code

1.Windows環境下安裝VS Code

連接如下

https://code.visualstudio.com/

安裝過程自己解決。

在WSL任意目錄下運行指令

code .

系統會自動完成依賴的安裝,並且打開Windows環境下的VS Code

安裝插件 :WSL(在宿主機,即windows中安裝)

C/C++,C/C++ Extension Pack,CMake,CMake Tools,(選擇為Ubuntu20.04安裝)

配置VS Code

1.VS Code的配置文件層級

wsl2使用opencv_#linux

因此最基本的編譯器路徑和智能代碼提示功能的配置文件需要放在最外層的文件夾中。

而每個項目的特殊配置文件可以放在當前目錄的.vscode文件夾中。

2.c_cpp_properties.json : 編譯器路徑和智能代碼提示 配置文件 ;

在工作區,按Ctrl+Shift+P,搜索C/C++:Edit Configuration,此配置文件需要放置在總的工作空間文件夾下。

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/include/x86_64-linux-gnu/sys",
                "/usr/local/include/opencv",
                "/usr/local/include/opencv2"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "gnu17",
            "cppStandard": "gnu++14",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}

3.tasks.json : 編譯器構建 配置文件 ;

首先新建一個cpp文件,然後在其中按Ctrl+Shift+P,搜索C/C++:添加調試配置,可以在當前目錄下自動生成.vscode文件夾,其中自動包括tasks.json和launch.json

tasks.json腳本定義了一系列的自動化工具,使得在使用調試/運行功能的時候自動調用CMake對項目進行構建。

{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "mkdir",
            "type": "shell",
            "command": "mkdir",
            "args": [
                "-p",
                "build"
            ],
        },
        {
            "label": "cmake",     // 命令的別名
            "type": "shell",         
            "command": "cmake",    // 命令
            "args": [                         // 參數列表
                ".."
            ],
            "options": {
                "cwd": "${workspaceFolder}/build", // 該命令的工作目錄
            },
            "dependsOn": [   // 該命令執行前應該執行的命令
                "mkdir" 
            ]
        },
        {
            "label": "make",
            "type": "shell",
            "command": "make",
            "args": [],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "options": {
                "cwd": "${workspaceFolder}/build",
            },
            "dependsOn": [
                "cmake"//make命令執行前先執行cmake命令
            ]
        }
    ]
}

4.launch.json : 調試器設置 配置文件 ;

調試過程需要的配置文件。使用DEBUG功能的前提是安裝了gdb,安裝腳本會自動安裝,安裝目錄在/usr/bin/下

注意,按照當前的配置信息,CMakeLists.txt中目標代碼生成的後得到的文件名,必須與項目文件夾名字相同才可以正常啓動DEBUG。如需自定義,可以修改launch.json文件的”program“屬性,將最後的${workspaceFolderBasename}替換為自定義的CMake生成的目標文件名

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: gcc-9 生成和調試活動文件",
            "type": "cppdbg",
            "request": "launch",
            // "program": "${workspaceFolder}/build/demo",
            "program": "${workspaceFolder}/build/${workspaceFolderBasename}",//指定C/C++程序位置
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",//指定工作目錄
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "為 gdb 啓用整齊打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "將反彙編風格設置為 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "make",//*****重要一步*****在調試前會先調用make這個task中編譯構建的程序
            "miDebuggerPath": "/bin/gdb"
        }
    ]
}

測試

1.新建文件夾test

2.在其中新建test.cpp,內容如下

#include"opencv2/opencv.hpp"
using namespace cv;
int main(){
    Mat M(200,200,CV_8UC3,Scalar(0,0,255));
    imshow("myM",M);
    waitKey(0);
    return 0;
}

3.新建CMakeLists.txt,內容如下

set( CMAKE_BUILD_TYPE "Debug" )
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g2 -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")
add_definitions(-std=c++11) #該處可以根據自己需要進行修改,例如c++14...

cmake_minimum_required(VERSION 2.8)
project( test )
find_package( OpenCV REQUIRED )
add_executable( test test.cpp )
target_link_libraries( test ${OpenCV_LIBS} )

4.按Ctrl+Shift+P,搜索CMake:Configure,選擇,結束之後左側工具欄會出現一下圖標

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-0Rpsampj-1670640389442)(C:\Users\蒼玄\AppData\Roaming\Typora\typora-user-images\image-20221206192219346.png)]

表明CMake工具鏈正常啓動

5.選擇test.cpp,按Ctrl+Shift+P,搜索C/C++,添加調試配置。如上述説明,將tasks.json和launch.json文件配置好

6.按Ctrl+F5,以非調試模式運行,將會有如下顯示

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZKH3GfN2-1670640389444)(C:\Users\蒼玄\AppData\Roaming\Typora\typora-user-images\image-20221206192744985.png)]

7.,在test.cpp中設置斷點後,按F5進入調試模式,測試調試功能。

安裝ROS

使用安裝腳本來源於魚香ROS

終端運行

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

選擇

1.一鍵安裝ROS

2.不更換繼續安裝

3.foxy(ROS2)

4.foxy(ROS2)桌面版

驗證

1.終端運行指令

cd /opt/ros/foxy
ls

查看是否有對應的文件

2.運行小烏龜樣例

同時打開兩個終端,其中一個運行指令

打開小烏龜

ros2 run turtlesim turtlesim_node

另一個終端運行

打開遙控器

ros2 run turtlesim turtle_teleop_key

在遙控器所在的終端內,通過上下左右鍵控制小烏龜的行動。