ROS系统学习14---在Windows上安装和使用ROS

使用ROS一般默认的操作系统是Linux的Ubuntu,其安装的过程也基本无障碍。然而Ubuntu相比Windows的生态还是不太完善,因此在电脑中装双系统然后反复横跳就变得很常见且让人崩溃。

最近由于意识到ROS调试起来是在比较方便,而切来切去实在影响心情,于是着手研究Windows上安装ROS的操作,并做了下记录。

由于该操作依据得到了官方支持,于是安装的难度也不算大,不过也没Ubuntu那么简单,可以直接参考ROS的Wiki。下面就按照Wiki的步骤一步步操作吧。


Windows操作系统

  • 要在Windows上安装ROS,首先Windows需要是Win10 64位的桌面操作系统或者是 Windows 10 IoT企业版操作系统(应该是物联网的东西,本人没搞这个,不过是个发展趋势,后面研究看看)。

  • 要确认操作系统中已经安装了Powershell,并且在环境变量中。

  • ROS默认安装在c:\opt这个路径下,安装过程中需要确保不要被杀毒软件的扫描所干扰。

    上面是官方对操作系统的要求,一般会想到要在Windows上装这个东西的应该都是资深开发者,因此这些应该都很好弄。第三条也确实非常中肯,本人在开发软件的过程就经常遇到用户将软件装在C盘中被3x0等一类软件误杀的情况。而本人用的Win10自带的Defender和火绒则从来没出过这种幺蛾子,以至于除非强忍着恶心装上那些坑爹的杀毒软件,否则无法复现用户的bug。。。


预留安装空间

  • 因为ROS要安装在c:\opt,因此如果之前有这个路径而且里面有东西需要先备份到别的地方然后清理掉
  • c:\opt是要求的安装位置,不能重定位。换句话说就是这个路径一定要给它用。
  • C盘要有至少10GB的空间,最好有40~50G。实力劝退部分笔记本电脑。。。

安装 Visual Studio 2019

创建Windows上的ROS工程要求有 Visual Studio 这个宇宙最强IDE以及 Microsoft SDKs for Windows.这两个东西理论上开发过Windows上的程序的老哥都是有的。

  • Download Visual Studio 2019

    • VS中需要安装 “Desktop development with C++” 这个C++桌面开发的模块。正如我们第一篇介绍ROS的文章所说,ROS本质上是一个管理多个程序的程序,因此该系统首先需要有编译出程序的能力,这个依赖于C++和Python,在Windows上就需要装C++相关的这些东西。

    • VS中还需要安装英语语言包,我第一次安装ROS的时候没搞,报错了。。。


安装Windows的包管理器

安装Windows的程序包管理器Chocolatey,它相当于Ubuntu中的apt-get。

  • 在开始菜单直接"ctrl+v"粘贴"x64 Native Tools Command Prompt for VS 2019",搜索这个东西,然后右键用管理员身份打开。

  • 复制下面这一堆代码到打开的窗口中:

    @"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"
    

    等待安装完成,然后就可以用它来安装别的程序了。比如安装需要的Git(需要重启控制台刷新下环境变量,后面也类似,如果找不到对象先重启看看是不是环境变量没刷新的问题)。

    choco upgrade git -y
    

    然后通过如下的代码就可以查看是否安装成功了。

    git --version
    

安装ROS

上面一通操作都是准备工作,下面真正进入主题:ROS安装。

像之前一样,以管理员身份打开"x64 Native Tools Command Prompt for VS 2019"

mkdir c:\opt\chocolatey
set ChocolateyInstall=c:\opt\chocolatey
choco source add -n=ros-win -s="https://roswin.azurewebsites.net/api/v2" --priority=1
choco upgrade ros-melodic-desktop_full -y --execution-timeout=0

第一行命令:创建一个文件夹用以存放chocolatey安装的包。

第二行命令:设置chocolatey的包安装路径

第三行命令:添加源

第四行命令:安装

把上面命令执行完,剩下的就是等待了。根据不同的网络状况和会不会架梯等因素,等的时间不同。本人在墙内试了下,慢到想哭,然后架了张梯子等了两个多钟就成了!


创建命令窗口快捷方式

在Windows上使用ROS需要在每个命令窗口中调用ROS设置脚本。为了避免每次都这样做搞得感觉很差,宁愿去来回横跳切系统,可以创建一个快捷方式来自动运行这些东西。操作如下:

  • 在桌面右键新建一个快捷方式,在"请键入对象的位置"里面输入下面的命令(这里区分VS版本的,本人是社区版本,所以命令如下,不过不是的话可以看看Wiki对应的命令):

    C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat" -arch=amd64 -host_arch=amd64&& set ChocolateyInstall=c:\opt\chocolatey&& c:\opt\ros\melodic\x64\setup.bat
    
    • 将快捷方式命名为"ROS"(或者喜欢别的也行)
    • 右键快捷方式图标->属性->高级->用管理员方式运行->各种确定

到次就完成了所有设置啦,双击打开上面搞的快捷方式,输入熟悉的老朋友:

roscore

就会看到ROS跑起来了!!!当然也可以直接用rosbag直接播放之前采集的bag包并使用rviz去看数据。

不过这个控制台不太智能,有下面三个问题:

  1. 不能自动补全ROS的命令
  2. 默认的字符集是GB2312,如果编程中使用的文档格式是别的(大概率会是UTF-8),那进行catkin_make的时候就会出错
  3. 不能在指定路径下打开

对于这三个问题的解决办法是:

  1. 无法解决,似乎它在Windows上实现这些命令是经过一系列映射搞出来的,比较难以琢磨,希望有老哥能解决。
  2. 使用notepad++等工具将文档转成ANSI编码
  3. 无法解决,不太懂这个。

Windows Terminal

前面介绍的快捷方式的方法有点low,我们可以用Windows Terminal这个新的管理终端来比较好的管理ROS。刚刚在不久前,这个终端的正式版本发布了,因此我们只要去Win10自带的商城Microsoft Store直接下载安装即可。

安装后需要为ROS设置终端环境:

  • 在开始菜单中找到终端并右键选择以管理员身份启动。
  • 在"+"号后面的下拉菜单中选择设置
  • 在设置文件的"profiles"队列中为ROS加入新的设置块,如下:
    "profiles" :
    {
        list: 
        [
            ...
            {
                "commandline" : "C:\\Windows\\System32\\cmd.exe /k \"C:\\Program Files (x86)\\Microsoft Visual Studio\\2019\\Community\\Common7\\Tools\\VsDevCmd.bat\" -arch=amd64 -host_arch=amd64 && set ChocolateyInstall=c:\\opt\\chocolatey&& c:\\opt\\ros\\melodic\\x64\\setup.bat",
                "guid" : "{xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxx}",
                "icon" : "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
                "name" : "ROS",
                "startingDirectory" : "c:\\ws"
        },

上面的代码中有一行"xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxx",其需要被替换成VS的全局唯一标识。操作如下:

  • 还是使用"x64 Native Tools Command Prompt for VS 2019"打开VS终端,输入uuidgen,然后就得到全局唯一标志,替换掉那些xxx就可以了。

  • 另外如果终端比较常用来搞ROS,也可以直接设置成打开时默认打开的状态(Windows Terminal其实有点像一个终端管理器,而我们刚才设置的ROS终端只是其中的一个,如果不选择默认打开则一开始打开的是一个普通的PowerShell终端)

    设置的操作如下:

    "alwaysShowTabs" : true,
    "copyOnSelect" : false,
    "defaultProfile" : "{xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxxx}",
    

运行终端的时候同样需要以管理员身份运行,guihub上已经有人提出要让终端始终保持打开就是管理员的权限,然而还没得到实施。在那之前就只能先苦逼的点了,Ctrl+Shift+单击“开始”菜单或任务栏中的终端图标是以管理员身份运行的便捷方式。。。

从本质上来说,它比之前介绍的快捷方式好的地方就是把使用ROS一定会打开的多个终端统一管理起来了,另外的优势似乎就是颜值高了!!!


ROS编译

这一点和在Ubuntu下是完全一样的,不同的是编译出来之后,我们要让系统识别我们编译出来的包用的命令是:

devel\setup.bat

总结

经过了这么久的折腾,终于将Windows版本的ROS给折腾起来了,从目前的可以操作的事物上看,已经能够满足大部分的需求了。然而这里面有个特别重要的问题,那就是Windows平台与Linux平台的不同的API造成了我们在一个平台上写的ROS程序大概率需要修改才能移植到另外的平台上,这大大加大了开发的难度。目前的解决方法是尽量使用C++标准库以及其他跨平台的标准库来编写代码,在一些地方使用宏来区分平台,然而这终归不是终极解决之道。

今天2020/05/20微软发布了支持GUI的WSL程序,等它成长起来,应该就直接解决了平台问题了。让我们稍等些时日,看看纳德拉领导下的又一神技是不是能帮我们解决这一问题吧!

参考文章:

http://wiki.ros.org/Installation/Windows

https://www.jianshu.com/p/0a9f372fd3ec

https://zhuanlan.zhihu.com/p/74110533?from_voters_page=true

https://www.pianshen.com/article/3492287097/

你可能感兴趣的:(ROS操作系统学习)