Windows11安装Ubuntu、C++与Robocup2d环境
至于为什么使用Windows11而不是Windows10,是因为Windows11支持直接打开Linux原生的GUI程序,对于开发测试球队非常方便。下面我们来看看如何在Windows11上进行球队环境的安装与球队的开发。
如果只是配置Windows上的C++开发环境,直接看第四部分
如果只是安装WSL可以跳过第三、四部分
第一部分 安装Ubuntu环境
BIOS开启虚拟化支持
电脑硬件必须支持并开启虚拟化,否则无法进行下面的步骤。
进入BIOS界面,开启虚拟化支持,至于详细的设置,请百度各厂家的BIOS界面信息。
下面是华硕主板的BIOS界面,选择高级->CPU->开启SVM模式。
Windows启用WSL
按下WIN+S
打开搜索界面,输入功能
,点击启用或关闭Windows功能
。
勾选:
- 适用于Linux的Windows子系统
- 虚拟机平台
- Hyper-V(家庭版可能没有此选项,不是必需)
- Windows虚拟机监控程序平台(不是必需)
点击确定,重启电脑。
在Windows设置中打开Windows更新设置
,点击高级选项
,打开接受其他Microsoft产品的更新
,此步骤用于更新WSL。
之后再点击检查更新
,这时便会出现关于WSL的更新,待更新完成重启电脑。
WSL到此便已配置完成。
安装Ubuntu
打开微软商店,搜索ubuntu,选择版本进行安装,推荐20.04版本。
安装Windows Terminal
打开微软商店,搜索terminal,安装Windows Terminal
。
这是一个终端软件,之后的ubuntu的操作都在这里面执行。
打开终端,图标长这个样子:
设置默认终端应用程序为Windows终端
:
如果想要每次打开终端都默认启动Ubuntu而不是PowerShell的话,如下配置一下:
设置完之后记得点击保存。
Windows Terminal可以添加新的shell终端,至于如何配置请百度了解。但大部分情况下,重启一下终端之后,它便会自动识别并添加,比如先前安装的Ubuntu20.04。
关于Windows Terminal更花里胡哨的配置(可以更换壁纸、透明度什么的),请自行百度。
启动Ubuntu系统
打开之前安装的终端,点击Ubuntu20.04:
初始化
首次登陆需要你设置账号密码,按提示输入即可,这里需要注意的是密码输入时不会回显,放心输入,完成直接回车即可。
管理
这里推荐一个微软商店的APP:
WSL Manager
,可以快速创建同一系统不同用途的WSL实例,配合终端使用起来非常方便。
WSL的相关配置除了使用上述软件,也可以通过.wslconfig
文件直接进行配置,更多信息请参考官方文档:
第二部分 Ubuntu操作
换源
如果使用起来网速不是很慢,可以不换源
换源很简单,只需按照镜像站的说明文档操作即可,这里不再赘述。
直接使用命令替换,实现一键换源:
# 执行如下命令自动替换
sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
# 一定不要忘记更新
sudo apt update -y
更新
输入命令即可更新:
sudo apt update -y
sudo apt upgrade -y
安装常用软件
以下软件会在后面的步骤中用到,请确保已经安装
sudo apt install build-essential cmake git vim python3 python3-pip gdb -y
# pip换源
python3 -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
第三部分 安装Robocup2d环境
以下不用看,直接跳到使用方法
这是一个Robocup2d环境安装脚本,只需要执行这个脚本就能一键安装完全部所需环境。
这个脚本会安装:
- rcssserver
- rcssmonitor
- librcsc
- soccerwindow2
- fedit2
安装过程会占满CPU以提高安装速度,建议在此安装期间不要运行其他程序。
安装脚本使用assets目录中的压缩包进行安装。如果你要更新本地的包,请直接将压缩包放入assets文件夹中,脚本会识别出最新的版本进行安装。注意压缩包内的文件夹名应与压缩包同名。比如rcssserver-17.0.1.tar.gz解压出来应该是rcssserver-17.0.1
脚本会自行识别Linux发行版本进行安装,目前该脚本仅支持Ubuntu/ArchLinux/Manjaro,其他发行版可以在env-others文件里配置安装依赖的命令,格式可以参考env-archlinux.sh或env-ubuntu.sh文件。
安装前提
首先假定你已经完成了基本的系统配置,比如你已经
- 给系统换好了源
- 更新了系统
- 安装了python3和python3-pip
使用方法
执行环境安装脚本:
git clone https://gitee.com/juzaizai/robocup2d-environment.git
cd robocup2d-environment
pip3 install -r requirements.txt
# 如果出现问题,请单独安装:
# pip3 install loguru
python3 install.py
测试运行
运行soccerwindow2
如果出现GUI界面,说明WSL环境安装正确
soccerwindow2
运行monitor
和soccerwindow2一样,也是一个观看球队比赛的可视化软件
rcssmonitor
运行server
按Ctrl+C终止server运行
rcssserver
运行fedit2
这是一个阵型编辑器
fedit2
终止server进程
killall -9 rcssserver
球队比赛
这里我们使用helios_base,使用的是github仓库,可能因为网络问题会有失败,请多试几次
首先拉取球队代码,执行一些初始化操作:
git clone https://github.com/helios-base/helios-base.git
cd helios-base
./bootstrap
./configure
在干别的之前,先启动server和monitor:
# 新开一个Ubuntu终端
rcssserver
# 新开一个Ubuntu终端
rcssmonitor
然后编译运行球队(之后有修改代码,也是需要执行下面的命令):
# 如果你的CPU支持多个线程,可以使用make -j$(nproc)加快编译速度
make -j$(nproc)
# 编译时可以在根目录,也可以在src目录,但start.sh只在src目录有
cd src
./start.sh
# 这时候在monitor上就能看到球队已经成功加载
# 如果提示没有权限,使用 chmod +x ./start.sh
但是只有一支球队是踢不了比赛的,这里提供一个现成的球队二进制文件供测试使用:
下载完成后放到Ubuntu系统的某个文件夹中(可参考第五部分),然后解压:
# 新开一个Ubuntu终端
tar -zxf yushan2022.tar.gz
cd yushan2022
运行球队yushan:
cd bin
./start.sh
# 如果提示没有权限,使用 chmod +x ./start.sh
在monitor界面中,按下Ctrl+K开始比赛。
编译时遇到的问题
此处记录本人在手动编译源码时遇到的问题及解决方法,可以跳过不看
soccerwindow2
soccerwindow2在安装时会遇到语法错误,可能是C++标准支持的问题,修改成符合C++11的标准即可,还好错误只有一处cout。
还有一处是提示double不能作为字符串,将其加上引号即可。
librcsc
这个包在编译时少了action这个模块,需要在两处修改:configure.ac和rcsc中的makefile.am,找到对应位置将action加进去即可(到这里使用make编译没问题,但cmake还是有问题,需要修改对应的cmakelist,但显然没必要浪费这个时间)。修改好之后再编译安装,fedit2和helios_base便可以正常使用。
问题还是有很多,只能说凑合用。
参考链接
rcsc库:librcsc
比赛服务器:rcssserver
比赛播放器1:rcssmonitor
比赛播放器2:soccerwindow2
阵型编辑器:fedit2
如果你喜欢C++编写(功能较为完善)的球队,可以参考:helios-base
如果你喜欢Python编写的球队,可以参考:Pyrus2D
第四部分 配置Windows下的C++开发环境
如果只在WSL中修改编译球队代码,不需要在Windows中再配置C++环境
配置MinGW环境
如果安装过VS的话可跳过此部分,省去MinGW配置的麻烦
下载解压
MinGW离线包下载地址:
解压缩到自己指定的安装目录。
配置环境变量
Win+S搜索环境变量,配置环境变量即可。
例如我的是:D:\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\mingw64\bin
将此路径添加到Path变量中
案例测试
注意,终端要重新打开才能生效。
打开cmd窗口,输入g++ -v
,如果出现下列信息就说明安装成功
新建一个文件,在里面输入如下内容
#include <iostream>
using namespace std;
// main() 是程序开始执行的地方
int main()
{
cout << "Hello World"; // 输出 Hello World
return 0;
}
在cmd窗口进入到文件的所在位置
运行代码
这时候会出现一个a.exe文件,运行它
ok,测试没问题,进行下一步。
安装VSCode
可参考这篇博客(非本人撰写,内容来自网络)
VSCode插件推荐
Chinese(Simplified)
vscode 编辑器汉化包,安装完成后重启即可。
C/C++ Extension Pack
C/C++扩展包,下载直接安装,它包含了 vscode 编写 C/C++ 工程需要的插件(C/C++、C/C++ Themes、CMake、CMake Tools和Better C++ Syntax等),和以前比不需要一个个找了。
Bracket Pair Colorizer
可以让括号具有颜色的小功能插件,各个成对儿的括号都会以不同的颜色进行区别。
highlight-words
字符高亮插件
GitLens
gitlens插件可以直接在光标处显示代码编写人以及时间;方便共同开发时候git做版本控制时候的相关代码管理。
git-commit-plugin
一款自动生成规范git提交信息的插件
提供了符合规范的提交格式,基于Angular 团队的 Angular Team Commit Specification。规范的 commit 信息首先提供了更多的历史信息,方便快速浏览。其次,可以过滤某些 commit(比如文档改动),便于快速查找信息。重点在于前端团队必备的git提交规范啊!!!不规范的提交后期维护项目真的很头疼,给个不规范的例子
Git Graph
可视化的版本分支演变图。
Remote Development
使用这个插件可以在很多情况下代替vim直接远程修改与调试服务器上的代码,同时具备代码高亮与补全功能,就和在本地使用VScode一样。
配置VSCode的C++开发环境
前提要求
- 在windows上安装vscode和cmake
- 安装VS或者gcc
- 在vscode中安装cmake和cmake tools插件
操作步骤
在vscode中打开一个空文件夹,按Ctrl+Shift+P调出命令输入界面,输入cq或cmake q,选择CMake:Quick Start,或直接按下回车键:
选择编译器,第一次运行可以选择让cmake扫描电脑上存在编译器(如果设置了环境变量的话),之后这里多出了GCC和Clang,我这里选择了GCC:
输入项目名称:
选择可执行程序:
之后cmake会自动生成相关配置文件,如下所示:
cmake语法并不在这里具体介绍。
点击底部状态栏里的小三角按钮,编译并运行程序:
然后点击底部状态栏里的小虫子按钮,试试调试功能。
这里出现了一个错误信息,提示我们调试器路径不对:
这里不要去修改launch.json文件,要想一劳永逸地解决这个问题,需要修改cmake tools插件中的配置。
按下快捷键Ctrl+,进入设置搜索面板,输入@ext:ms-vscode.cmake-tools debug找到CMake的调试设置,点击编辑settings.json。
将miDebuggerPath改为正确的gdb调试器路径,比如我这里是D:\x86_64-8.1.0-release-win32-seh-rt_v6-rev0\mingw64\bin\gdb.exe,保存后就可以正常调试了。
另,如果不喜欢弹出控制台,可以将externalConsole改为false。
正确调试的结果:
按下Ctrl+Shift+P,输入cmake,还可以执行其他任务。
点击左边栏CMake图标可以查看CMake工程。
此处也可以执行上述相关操作,比如,在hello.exe上右击也可以进行生成、调试、运行等操作,列表栏顶部也有相关操作的按钮。
其他注意事项
- 截图右下角是用户执行的任务,可以点击垃圾桶按钮可以选择结束该任务。
- 按下快捷键Ctrl+Shift+~,可以调出一个新的终端。
- vscode可以跨平台和同步插件,Linux上的操作与Windows端一致。
- 从已有源代码中构建CMake工程也是类似的步骤。
- 使用GCC不能包含中文路径。
- 用VS可能会更省心一些,省去一些配置麻烦
- 如果只想单文件编译运行的话,可以尝试Vscode的
Code Runner
插件
VSCode常用快捷键
- Shift+Alt+F 整理代码
- Alt+左右方向键 后退/前进
- Alt+上下键 移动行
- Shift+Alt+上下键 复制行
- F2 重构
- Ctrl+鼠标左键 跳转函数(可配合Alt+左右方向键)
- 其他操作多在右键菜单中可以找到,不用刻意记,经常用就自然记住了
第五部分 Windows与Ubuntu的联动
接下来到了最激动人心的地方了:Windows与Ubuntu的梦幻联动!
Ubuntu中打开文件资源管理器
文件资源管理器打开后你便可以进行你在Windows上一切熟悉的操作!
在终端的Ubuntu系统中输入explorer.exe .
用文件资源管理器打开当前目录,.
表示当前目录,..
表示上一层目录,比如explorer.exe ..
打开上一层目录。
用VSCode打开Ubuntu系统中的项目
你可能需要安装VSCode的相应扩展:Remote Development
在终端的Ubuntu系统中输入code .
使用VSCode打开当前文件夹。
Ubuntu访问C盘
D盘同理
在终端的Ubuntu系统中输入cd /mnt/c
即可进入C盘目录。
再输入ls
试下效果
Windows访问Ubuntu文件
在文件资源管理器的路径栏中输入linux,或者在左侧列表框中找到linux目录,可以看到所有的wsl目录了,其中就有我们刚才安装的Ubuntu系统。
Ubuntu打开GUI程序
WSL2 GUI的Ubuntu系统可以直接打开Linux的GUI应用程序,就像Windows原生程序一样。
WSL修改CPU核数和内存限制
新建文件C:\Users<UserName>.wslconfig,修改memory和processors条目:
# Settings apply across all Linux distros running on WSL 2
[wsl2]
# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=8GB
# Sets the VM to use two virtual processors
processors=24
# Specify a custom Linux kernel to use with your installed distros. The default kernel used can be found at https://github.com/microsoft/WSL2-Linux-Kernel
# kernel=C:\\temp\\myCustomKernel
# Sets additional kernel parameters, in this case enabling older Linux base images such as Centos 6
# kernelCommandLine = vsyscall=emulate
# Sets amount of swap storage space to 8GB, default is 25% of available RAM
# swap=8GB
# Sets swapfile path location, default is %USERPROFILE%\AppData\Local\Temp\swap.vhdx
# swapfile=C:\\temp\\wsl-swap.vhdx
# Disable page reporting so WSL retains all allocated memory claimed from Windows and releases none back when free
# pageReporting=false
# Turn off default connection to bind WSL 2 localhost to Windows localhost
# localhostforwarding=true
# Disables nested virtualization
# nestedVirtualization=false
# Turns on output console showing contents of dmesg when opening a WSL 2 distro for debugging
# debugConsole=true
重新启动终端即可生效。
参考链接:Advanced settings configuration in WSL | Microsoft Docs