前面尝试了很多算法之后,得先找个能用的环境跑起来试试,于是决定尝试下ROS环境,但是我一直没有尝试Windows版也是因为这个原因,坑太多了,不过现在找到了微软IoT移植的ROSOnWindows,并且比较简单易用,因此打算尝试一下(注意,这个和ROS2 Windows版是不一样的

首先,安装ROS环境,这个坑是最少的,参考古月居55的教程

首先 安装VS2017 ,笔者装的Community版,因此这一步可以跳过了

然后 创建一个快捷方式 后面所使用的所有ROS相关命令行操作都是从这个入口开始,因为这个需要VS的环境,右键创建一个快捷方式,然后输入下面内容,并保存名字为ROS,具体版本根据自己安装的而定

C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=amd64 -host_arch=amd64

然后赋予管理员权限(图片来自古月居)

安装Chocolatey(下面为一行命令)

@"%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 install git -y

安装ROS(第二步有时候会在一个地方提示你删除20-default.list的地方卡住,但是请耐心等待,一定时间后会自动跳过,建议一直看着安装,以防报错)

choco source add -n=ros-win -s="https://roswin.azurewebsites.net/api/v2" --priority=
choco upgrade ros-melodic-desktop_full -y

如果是桌面环境,建议加上“_full”,这样就基本能安装上大部分需要的库,如果缺少对应库就使用“install”命令,如果某些库安装失败,但是会显示为安装成功,可以用install --force命令强制重装,也可以安装chocolatey gui来使用图形化界面操作

古月居里面有简单的测试,这里不再赘述

正确的源文件

之所以会遇到这些问题,是因为这些源码都是ROS的源码(很可能你也会下载到这个源码),你需要下载微软Iot移植过的源码,如果直接使用ROS的源码,会因为需要包含Linux下的库而报错,可以自行移植,这里暂不介绍。下面会贴上move_base的链接和基础包turtlesim的链接,因为这个需要包含非常多的库,所以可以验证前面的安装是否有问题,而直接编译这两个库是不会报错的,如果遇到问题,基本上是前面说的安装的问题,重新去检查安装的库是否正确,比如去opt文件夹下搜索是否存在对应的文件等等方法

ros_tutorials包 https://github.com/ms-iot/ros_tutorials
move_base包 https://github.com/ms-iot/navigation

Catkin编译

编译必须处于ROS环境下,因此只要执行和ROS相关的操作每次开启ROS命令行之后都需要setup一次,这个setup是将当前文件夹设置为环境,如果后面使用编译好的包,里面也有对应的setup.bat,使用对应的包的时候切换到相应的目录下运行setup.bat

cd C:\opt\ros\melodic\x64
setup.bat

如果使用默认环境时可以简化过程,即在前面ROS快捷方式的目标路径后面增加一段代码,也可以再复制一个快捷方式作为专门入口

增加 && c:\opt\ros\melodic\x64\setup.bat
即变为 C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat" -arch=amd64 -host_arch=amd64 && c:\opt\ros\melodic\x64\setup.bat

ROS的包用的是catkin_make编译,不使用CMake编译,编译准备方式略有不同,下面以 ros_tutorials 包为例展示编译过程

新建一个编译专用的文件夹,笔者命名为build_package_name(如build_ros_tutorials_win),这个名字可以随意命名,然后在里面创建 src 文件夹 ,这个名字是固定的,稍后在该文件夹还会产生两个文件夹,分别是产生编译中间文件的biuld和编译结果的devel,然后把 ros_tutorials 文件夹放到src文件夹下

然后cd进入build_tutorials_win文件夹,输入catkin_make,然后等待编译完成

在devel\lib\turtlesim下就是编译结果,其中exe就是核心的文件,其他的如pdb符号文件、ilk链接文件都不是必须的,lib\pkgconfig下的是pc文件,即CMakeLists里面pkg_check_modules检查的文件,所以核心包就是devel\lib下的exe文件和lib等文件,具体可以对照opt路径下的文件,这些是可以打包提取出去单独使用的(需要保持文件结构不变,如果有其他文件那也是需要的),储存方式参考C:\opt\ros\melodic\x64\lib下的储存方式

运行Package

具体运行原理可以阅读古月居的博客或者著作《ROS机器人开发实践》,下面直接实践,首先需要开启一个核心ROS MASTER,即在cmd输入 roscore ,如果使用launch方式启动,则不需要单独启动roscore

roscore

然后开启一个新的cmd,作为一个新的结点,如果是简单的例程,比如自带的turtlesim,可以运行turtlesim_node,然后再开启一个新的cmd,作为一个新的结点,运行turtle_teleop_key,不分先后顺序,然后就可以用方向键操控乌龟了(配图使用了官方例程)

但如果一个包需要启动的节点较多,并且涉及到参数传递问题,则需要使用了launch文件来启动,launch文件可以放在任意位置,建议放在包下的launch文件夹里面,方便管理,这里编写上面这个例程对应的launch文件,复杂的编写方式可以阅读古月居的相关博客和阅读例程

pkg对应前面的文件夹名字,即包的名字,type对应可执行文件的名字,即节点,name名字可以自己取,其他参数暂不介绍,然后就可以用roslaunch命令启动了,这里只需在这个包下setup,不需要启动roscore

roslaunch turtlesim.launch

然后就可以达到上面的效果了

然后还可以用 rqt_graph 命令查看节点之间通信情况

感谢以下Geeks:
ROS探索总结(五十五)—— Windows版ROS安装试用
http://www.guyuehome.com/2192
VS2017配置使用#indlude
https://blog.csdn.net/cry1994/article/details/79115394?tdsourcetag=s_pcqq_aiomsg
ROS on Windows Documentation staging repo
https://ms-iot.github.io/ROSOnWindows/GettingStarted/UsingROSonWindows.html

基于VS2017+ROS的ROSOnWindows开坑之旅的更多相关文章

  1. CozyRSS开发记录0-RSS阅读器开坑

    CozyRSS开发记录0-RSS阅读器开坑 1.RSS RSS,全名是Really Simple Syndication,简易信息聚合. 关于RSS相关的介绍,网上可以很容易的找到.RSS阅读器是我几 ...

  2. 开坑,Unix环境高级编程,转行之路又得缓缓了

    不要问我基础,我用了近6年的Linux系统,最早的版本可以追溯到Ubuntu 8.04,常用的命令 VIM基本上是没压力,遇到问题google 配置环境变量 网络环境也不在话下, C语法基本熟练,过去 ...

  3. 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载

    <疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...

  4. 【前言】Go语言开坑

    很早之前就已经听过Go语言的大名,今天终于要开坑研究Go了,来吧看看<Go语言从入门到入坟>. [Go语言学习目录] 1. Go安装 2. Go变量(Variables) 3. Go语言基 ...

  5. 开坑数位dp

    [背景] 在10月3日的dp专练中,压轴的第6题是一道数位dp,于是各种懵逼. 为了填上这个留存已久的坑,蒟蒻chty只能开坑数位dp了. [例题一][HDU2089]不要62 题目大意:给你一个区间 ...

  6. (目录)Fortran学习笔记:开坑!!!

    前言:因为某些原因,需要使用Fortran编写程序,记录下Fortran语法学习过程中的部分笔记.在此开坑记录,立下Flag,"希望年末能够更新完" Fortran 学习笔记 陈橙 ...

  7. webpack入坑之旅(六)配合vue-router实现SPA

    这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...

  8. webpack入坑之旅(一)不是开始的开始

    最近学习框架,选择了vue,然后接触到了vue中的单文件组件,官方推荐使用 Webpack + vue-loader构建这些单文件 Vue 组件,于是就开始了webpack的入坑之旅.因为原来没有用过 ...

  9. 记一次项目使用webuploader爬坑之旅

       因前端页面开发使用的为VUE开发,又要支持IE9,遂只有基于webuploader封装一个上传组件.地址:https://github.com/z719725611/vue-upload-web ...

随机推荐

  1. 【leetcode】347. Top K Frequent Elements

    题目地址:https://leetcode.com/problems/top-k-frequent-elements/ 从一个数组中求解出现次数最多的k个元素,本质是top k问题,用堆排序解决. 关 ...

  2. vue2.0版本中v-html中过滤器的使用

    Vue 2.0 不再支持在 v-html 中使用过滤器 解决方法: 1:全局方法(推荐) 2:computed 属性 3:$options.filters(推荐) 1:使用全局方法: 可以在 Vue ...

  3. .Net MVC生成二维码并前端展示

    简介: 二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更 ...

  4. C# vb .net实现位图蒙版特效滤镜

    在.net中,如何简单快捷地实现Photoshop滤镜组中的位图蒙版特效呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第 ...

  5. oracle 逻辑对象

    视图 视图的作用: a 让查询返回的字段更容易理解. b 对复杂select语句的封装. c 安全性.视图可以单独授权.对于数据量巨大的表,可以创建视图仅仅返回前100条数据,将该视图select权限 ...

  6. SpringBoot开发验证码功能

    简介 验证码主要是用来防止恶意破解密码.刷票.论坛灌水.刷页.Kaptcha 是一个可高度配置的实用验证码生成工具,使用也很简单,这里就使用它来做验证码. 另外使用JAVA原生的API也可以实现验证码 ...

  7. 04、MySQL—数据基础操作

    1.插入操作 本质含义:将数据以SQL的形式存储到指定的数据表(字段)里面 基本语法:向表中指定字段插入数据 Insert into 表名[(字段列表)] values(对应字段列表) 范例:向表中插 ...

  8. 利用vba实现excel表格连接打印编号(一页两个编号),编号支持前缀

    先看一下excel文件, 下图左边部分为文件签审单为要打印的内容, 要求一页需要打印两个文件签审单, NO需要根据打印页面连续编号, 右边部分为打印设置,以及vba部分代码展示, 打印设置可以设置打印 ...

  9. Java知识回顾 (12) package

    本资料来自于runoob,略有修改. 为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间. Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(cl ...

  10. mysql 根据日期进行查询数据,没有数据也要显示空

    写这篇博客主要是记录自己在对订单进行按日期查询时使用的一种查询的方法,这里的orders是订单表,你也可以改成别的什么表对于最终数据不会造成影响,除非你那个表的数据只有几条那样就会出现查不到日期的情况 ...