前面尝试了很多算法之后,得先找个能用的环境跑起来试试,于是决定尝试下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. 几个c++界面库的比较

    有些人说QT比MFC简单,QT封装得太好了,给初学者错觉,QT很简单.QT实现的功能比MFC更多(多到有些时候你觉得QT真TM啰唆,但是有时又体会到他啰唆得很强大很有柔性),显然比MFC代码更多,运行 ...

  2. 解决非controller使用@Autowired注解注入为null问题

    在SpringMVC框架中,我们经常要使用@Autowired注解注入Service或者Mapper接口,我们也知道,在controller层中注入service接口,在service层中注入其它的s ...

  3. Python-07-高阶函数

    一.定义 默认满足以下两个条件中的一个就是高阶函数: 函数的传入参数是一个函数名 函数的返回值是一个函数名 二.map函数 map接收两个参数,一个函数和一个Iterable,map将接收到的函数作用 ...

  4. 如何修改通过Anaconda安装的jupyter notebook的工作目录

    通过Anaconda安装jupyter notebook,对新手来说是一个非常明智的选择,可以避免很多不必要的麻烦! jupyter notbook默认情况下的工作目录是c:\user\...,接下来 ...

  5. 2019vivo秋招提前批笔试题第3题

    笔试的时候没做出来,就顺手截图了. 虽然知道要用动态规划做,但我一直就不太懂动态规划.笔试完又花了2小时把它做出来了.也不知道性能怎么样,但还好做出来了. def solution(n, toltal ...

  6. JAVA简易数据连接池Condition

    用Condition和synchronized: import java.sql.Connection; import java.sql.DriverManager; import java.sql. ...

  7. .net Aop 实现原理

    本文实现所有继承BaseModel的类都通过代理拦截 using System; using System.Reflection; using System.Collections.Generic; ...

  8. 【索引】Oracle之不可见索引和虚拟索引的比对

    [索引]Oracle之不可见索引和虚拟索引的比对    Oracle之不可见索引 :http://blog.itpub.net/26736162/viewspace-2124044/ Oracle之虚 ...

  9. day 19 作业

    今日作业 1.什么是对象?什么是类? 对象是特征与技能的结合体,类是一系列对象相同的特征与技能的结合体 2.绑定方法的有什么特点 由对象来调用称之为对象的绑定方法,不同的对象调用该绑定方法,则会将不同 ...

  10. day 01 预科

    目录 作业 二,Markdown基本语法 一级标题 二级标题 三级标题 作业 二,Markdown基本语法 标题 一级标题 二级标题 三级标题 四级标题 加粗 哦,更粗了 斜体 咦,我歪了 高亮 == ...