基于VS2017+ROS的ROSOnWindows开坑之旅
前面尝试了很多算法之后,得先找个能用的环境跑起来试试,于是决定尝试下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开坑之旅的更多相关文章
- CozyRSS开发记录0-RSS阅读器开坑
CozyRSS开发记录0-RSS阅读器开坑 1.RSS RSS,全名是Really Simple Syndication,简易信息聚合. 关于RSS相关的介绍,网上可以很容易的找到.RSS阅读器是我几 ...
- 开坑,Unix环境高级编程,转行之路又得缓缓了
不要问我基础,我用了近6年的Linux系统,最早的版本可以追溯到Ubuntu 8.04,常用的命令 VIM基本上是没压力,遇到问题google 配置环境变量 网络环境也不在话下, C语法基本熟练,过去 ...
- 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载
<疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...
- 【前言】Go语言开坑
很早之前就已经听过Go语言的大名,今天终于要开坑研究Go了,来吧看看<Go语言从入门到入坟>. [Go语言学习目录] 1. Go安装 2. Go变量(Variables) 3. Go语言基 ...
- 开坑数位dp
[背景] 在10月3日的dp专练中,压轴的第6题是一道数位dp,于是各种懵逼. 为了填上这个留存已久的坑,蒟蒻chty只能开坑数位dp了. [例题一][HDU2089]不要62 题目大意:给你一个区间 ...
- (目录)Fortran学习笔记:开坑!!!
前言:因为某些原因,需要使用Fortran编写程序,记录下Fortran语法学习过程中的部分笔记.在此开坑记录,立下Flag,"希望年末能够更新完" Fortran 学习笔记 陈橙 ...
- webpack入坑之旅(六)配合vue-router实现SPA
这是一系列文章,此系列所有的练习都存在了我的github仓库中vue-webpack,在本人有了新的理解与认识之后,会对文章有不定时的更正与更新.下面是目前完成的列表: webpack入坑之旅(一)不 ...
- webpack入坑之旅(一)不是开始的开始
最近学习框架,选择了vue,然后接触到了vue中的单文件组件,官方推荐使用 Webpack + vue-loader构建这些单文件 Vue 组件,于是就开始了webpack的入坑之旅.因为原来没有用过 ...
- 记一次项目使用webuploader爬坑之旅
因前端页面开发使用的为VUE开发,又要支持IE9,遂只有基于webuploader封装一个上传组件.地址:https://github.com/z719725611/vue-upload-web ...
随机推荐
- 长乐国庆集训Day5
T1 方阵 题目 [题目描述] 小澳最近迷上了考古,他发现秦始皇的兵马俑布局十分有特点,热爱钻研的小澳打算在电脑上还原这个伟大的布局. 他努力钻研,发现秦始皇布置兵马俑是有一定规律的.兵马俑阵总共有n ...
- PHP中YUM的理解
1. YUM是什么? 1)全称:Yellow dog Updater ,Modified. 2)百度简述:是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包 ...
- centos 7 搭建 k8s
环境 Centos 7.2 master 192.168.121.101node-1 192.168.121.134node-2 192.168.121.135 Kubernetes集群组件:– et ...
- CF468C Hack It! 构造
传送门 让人觉得脑子不够用的构造 考虑对于一个区间\([l,r]\)如何让它调整使得最后的结果恰好加上\(1\). 注意到对于一个\(<10^{18}\)的数\(x\),\(f(x+10^{18 ...
- 3、Linux目录操作
1.目录操作概述 2.ls显示目录内容 命令名称:ls 命令英文原意:list 命令所在路径:/bin/ls 执行权限:所有用户 功能描述:显示目录文件 ls -a 显示目录下的所有文件(包括 ...
- Linq实现分组后取最大(小)值
var beatles = (new[] { new { inst = "张三" , age="50" }, new { inst = "张三&quo ...
- linux技能五 文件权限
文件权限:-rw-r--r--. 1 fileInUser fileInGroup 1623 5月 4 19:33 fileName -:第一个-是文件类型 rw-:文件的所有者权限 r--:文件的 ...
- 折叠面板实现,上传文件进度条,三级联选择器,多级联选择器, 利用layui实现
首先贴出html代码 <form class="layui-form" action=""> <div class="layui-f ...
- php与mysql交互 面向过程
1.建立.关闭与MySQL服务器的连接 1)连接指定的mysql服务器 $mysqli_connect=@mysqli_connect($host, $user, $password,$databas ...
- Ubuntu安装32位程序兼容包
有的交叉编译工具链是32位的,经常会遇到安装完成之后提示好不到,这时候需要安装32位兼容程序,使用以下命令安装: sudo apt-get update sudo apt install gcc-mu ...