开始机器人开发

特色

  • 使用众多开源包。除机器人较相关的Ros、Cartographer,还有Chromuim、Webrtc、FreeRDP,OpenCV,等。具体有哪些参考“Rose开源包”。
  • 涉及到的开源包都已下载到本地,不再须要那些安装过程。
  • Ros已移植到Android,最终机器人将运行在Android。
  • 调试开发阶段基于Win10,开发主要用Visual Studio,可尽情发挥Visual Studio强大的调试功能。

 

一、硬件准备

  • 一台64位Win10电脑,硬盘至少90G空闲。Ros已移值到Win10、Android,不再须要Ubuntu。
  • 要更好学习Cartographer,须购买一个雷达。Launher内置支持思岚的RPLIDAR A1M8,其它雷达需自写驱动。
  • 要更好学习导航,除雷达外还需一个底盘。底盘要求:订阅一种Ros话题,话题标识:cmd_vel,消息结构:geometry_msgs::Twist。
  • 要能运行在Android,参考“机器人系统软件:Launcher+kDesktop”。

 

二、安装开发工具

2.1 Visual Studio

必须Visual Studio 2022(Version 17.8.0)或以上。左侧只需选“使用C++的桌面开发”,除C/C++基本项,需额外安装“适用于Windows的C++ Clang工具”。

图1 Visual Studio:使用C++的桌面开发

2.2 yasm

图2 “Path”环境变量

Rose库有汇编文件,编译它们须安装yasm,yasm官网:http://yasm.tortall.net/。一种安装方法是下载vsyasm.exe(包含在Win64 VS2010.zip,yasm.exe的重命名),然后把vsyasm.exe复制到某个写在“Path”环境变量中路径,像图2中的“c:\movie\bin”。

 

三、获取Rose-Ros源码包

进入页面,“Launcher、kdesktop”,找到源码链接,下载。

下载的是个rar文件,大概380M。解压缩,注意,解压缩到的目录名要确保不含中文。解开后大概1.3G。

图3 解压后目录
  • aosp-7.1.2/aosp-12。用于“Launcher:定制Android内核”的aosp源码。
  • apps-res、apps-src。RoseSDK包。apps-src下有external目录,当中包含着众多开源项目源码,像chromium、opencv、webrtc,当然也包括Ros、Cartogreapher。要是安装没问题,执行<apps-res>/studio.exe,应该能启动studio。
  • kdesktop-res、kdesktop-src。安装在控制端的kdestkop app私有包。要是安装没问题,执行<kdesktop-res>/kdesktop.exe,应该能启动kdesktop。
  • launcher-res、launcher-src。安装在机器人端的launcher app私有包。要是安装没问题,执行<launcher-res>/launcher.exe,应该能启动launher。

 

四、编译

4.1 编译Rose Studio

打开<apps-src>/apps/projectfiles/vc/apps.sln。“Build”——“Configurtion Manager”,确保“Active solution configuration”选择“Release”,“Active solution platform”选择“Win32”。

图4 Configurtion Manager

“Build”——“Build Solution”。第一次是全编译,估计要一个多小时。编译几个cartographer源文件时,一个文件就可能数分钟。chromium用的是LLVM,编译时不显示正编译哪个源文件,因为“Output”没有了进度指示,编译就好像死了一样。——不过,只要安装正确,安心等待左下角编译进度条完成。

9>...\ProductEvaluators.h(618,1): fatal error C1060: compiler is out of heap space

由于要编译的源文件非常多,随之visual studio要不断分配内存,甚至超过设置的阈值,导致编译失败,报类似上面错误。遇到这错误,一种方法是增大“heap space”数值,二是不管这错误,什么不改再次编译。再次编译时,要编译的文件数量少多了,需要的“heap space”也就少了。

编译成功,<apps-src>/apps/projectfiles/vc/Release下生成studio.exe,“Debug”——“Start Debugging”,这里会报缺少动态库错误。进入<apps-res>目录,把相关动态库复制到Release目录,libFLAC-8.dll、libfreetype-6.dll、libjpeg-9.dll、libmodplug-1.dll、libmpg123-0.dll、libogg-0.dll、libopus-0.dll、libopusfile-0.dll、libpng16-16.dll、libtiff-5.dll、libvorbis-0.dll、libvorbisfile-3.dll、libwebp-7.dll、zlib1.dll。

复制完dll,便可启动新编译出的studio.exe。

4.2 编译launcher

运行Studio,在左侧顶结点“apps-res”按鼠标右键,弹出菜单中选“导入app…”,弹出窗口选择希望导入的资源包目录,即launcher-res,执行“导入”。

导入成功后,等待“Solution Explorer”完成刷新,“Build”——“Build Solution”,执行编译。

编译成功后会在Release下生成launcher.exe。把“launcher”设为“Set at Startup Project”。“Debug”——“Start Debugging”,便可启动新编译出的launcher.exe。

图5 设置launcher依赖Project

在“Solution Explorer”,“launcher”上按鼠标右键,弹出菜单中选“Build Dependencies”——“Project Dependencies...”。如图5所示,打钩“4libcartographer”、“4librose”。确保改动相关库源码时,编译也会重检查lanncher。

4.3 编译kdesktop

编译kdesktop过程类似launcher。不过在“Project Dependencies...”时,它不依赖“4libcartographer”,只需打勾“4librose”。

4.4 Android

编译android下的launcher、kdesktop,不通过Visual Studio,如何编译参考“操作系统:android”。

 

五、调试

5.1 几个重要断点

一旦编译完成,便可任意设置断点。为容易查问题,建议几个地方先总设置断点。

<apps-src>/apps/librose/wml_exception.cpp

原因:VALIDATE(...)宏诊断失败时会进入这里,让能知道诊断失败原因。

图6 wml_exception断点

 

<SDL>/SDL2-2.0.12/src/SDL_assert.c

SDL会assert一些变量,像SDL_RenderCopyF中的“CHECK_TEXTURE_MAGIC(texture, -1)”,一旦不通过,要弹出错误框。断点设置在弹框前。

assertion_handler(...)执行弹框。

图7 SDL_ReportAssertion断点

所在函数是SDL_ReportAssertion(SDL_assert_data *data, ...)。

<apps-src>/apps/librose/scripts/lua_kernel_base.cpp

原因:执行lua脚本失败会进入这里,让能知道失败原因。更详细原因和图示见“调试lua”。

 

5.2 cartographer、tensorflowlite

对cartographer、tensorflowlite,要是不开启优化,执行速度无法让app正常运行,参考“编译设置如何影响cartographer性能”。为此,正常运行时优化都是选“Maximum Optimization (Favor Speed) (/O2)”。在这种优化下,断点可能能进,但即使进了也看不到变量值。所以,如果要通过设断点方法调试这些库,须把优化改为“Disabled (/Od)”,然后重新编译。

 

六、rviz

想使用官方Ros的rivz,需要让Rose-Ros工作在一node一进程模式。

<libros>/ros_comm/roscpp/src/libros/common.cpp
------
#ifdef _WIN32
// if you want to use rviz, must return false.
const bool nocopy_intra = false; // 这里改为false
#else
const bool nocopy_intra = true;
#endif

Android不支持使用rviz。

全部评论: 0

    写评论: