Welcome to Slamware C++ SDK
本SDK适用于SLAMWARE 模块化机器人自主定位导航系统以及SLAMTEC Mapper建图雷达。
Get Started
下载和安装SDK
请在思岚科技官方网站上的支持与下载页面 下载适合您的平台的SDK并解压至本地。
目录结构
Slamware SDK包含了大量您开发过程中可能会用到的资源、代码、和项目文件,其目录结构组织如下:
目录 | 说明 |
---|---|
bin | 预编译的工具 |
dll | 动态链接库文件 |
docs | 参考文档 |
include | SDK相关的头文件 |
lib | 预编译的库文件 |
samples | 样例程序 |
workspaces | 项目文件 |
头文件结构
在include目录下,我们包含了Slamware SDK以及它所依赖的所有库的头文件:
目录 | 说明 |
---|---|
boost | Boost 1.53.0 |
Eigen | Eigen矩阵库 |
json | JsonCpp库的头文件 |
rpos | Slamware SDK相关的头文件 |
SDK支持的平台/环境
SLAMWARE SDK理论上可以支持任意的采用现代操作系统的硬件环境。不过我们一般只针对几种目前广泛使用的平台提供对应的SDK。如果没有满足您需求的SDK,可以尝试联系SLAMTEC支持。
开发环境搭建 : Linux (GCC/GNU Make)
注意: 若基于 Android/iOS, 您可以下载对应的SDK并参考其中的文档。
注意: 如果您仅需要在ROS(Robot Operating System)下使用SLAMWARE,可以直接下载SLAMWARE ROS SDK并参考相关的文档
先决条件
SLAMWARE 采用 GCC 和 Make 编译系统来编译自身得Demo以及所有链接至其本身得应用程序。
我们推荐您采用Ubuntu发行版进行开发工作,其他Linux发行版在正确配置后也可以使用。
对于Ubuntu系统,可以简单的用apt命令来配置必要的编译环境。
sudo apt install build-essential
如您打算进行交叉编译,请确保交叉编译工具链已经正确的安装了。
比如,当需要安装arm gcc 4.8用于交叉编译产生能在硬浮点(hardfloat)支持的ARMv7平台上工作得程序,可以在Ubuntu系统里采用如下命令安装:
sudo apt install g++-4.8-arm-linux-gnueabihf
选择正确的SLAMWARE SDK版本
SLAMWARE SDK 存在多个版本,每个版本是采用不同的GCC(glibc)版本进行编译的,并且针对的硬件平台各不相同。
可以通过SLAMWARE SDK压缩包的名字来了解其所采用的GCC版本和所适用得平台情况:
比如如下的名称:
slamware_sdk_linux-x86_64-gcc5.4.tar.gz
:
linux
: 表示该SDK是基于Linux平台的x86_64
: 该SDK用于产生在x86_64平台的应用程序gcc5.4
: 需要使用gcc 5.4
请确保使用正确得SLAMWARE SDK编译您的程序。否则,编译过程会失败,或者编译出来的可执行程序无法在您期待的硬件平台中正常工作。
相对而言,获取用于编译您用用程序并链接至SLAMWARE SDK得GCC版本是最重要的。
当采用本机编译时
当开发机得硬件平台和系统和目标平台相同时,则采用了本机编译。GCC版本可采用如下命令得到:
$ gcc --version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4
...
本例中, GCC 版本是 4.8
采用交叉编译得情况
很多时候需要使用交叉编译来进行程序开发。此时目标系统得硬件环境和开发机不同。此时就需要获得交叉编译gcc程序的版本:
$ arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (Ubuntu/Linaro 4.8.4-2ubuntu1~14.04.1) 4.8.4
...
基本设置
当所有先决条件满足后,可以简单的对SLAMWARE SDK压缩包解包,解包位置基本可按个人兴趣选择。
但请确保解包的目标路径中不要带有空格或者其他特殊字符,否则可能会出现一切莫名其妙的问题。
比如,你可以将SDK解压缩到您的home目录下:
mkdir -p ~/slamware
tar xf slamware_sdk_linux-x86_64-gcc4.8-2.6.7_rtm.20190929.tar.bz2 -C ~/slamware/
上述shell命令将在用户home目录下创建名叫slamware
的子目录。随后,SLAMWARE SDK压缩包的数据会加压缩到这个目录下边。
在上述例子里,SDK最后被加压缩到了如下的路径:~/slamware/slamware_sdk_linux-x86_64-gcc4.8/
编译自带的例子程序
SDK包中带有了需要例子程序,他们可以帮助您快速了解SDK的使用。其位于SDK目录的samples
子目录
样例名 | 描述 |
---|---|
map2bmp | 演示了如何获取SLAMWARE构建的地图并保存成BMP图像文件 |
mapdemo | 展示了如何获取SLAMWARE构建的地图,随后将原始数据以及其他信息打印出来 |
moveandpathdemo | 展示了如何往SLAMWARE注入一系列关键点,随后让机器人进行自主导航 |
可以直接在samples
目录下输入make命令来编译这些例子:
cd ~/slamware/slamware_sdk_linux-x86_64-gcc4.8/samples
make
若一切顺利,你可在SDK目录下的linux-x86_64-release/output
子目录中找到编译好的可执行文件。
$ cd ~/slamware/slamware_sdk_linux-x86_64-gcc4.8/linux-x86_64-release/output
$ ls
map2bmp mapdemo moveandpathdemo
编译您自己的应用程序
这里我们展示如果空手从零开始构建一个基于SLAMWARE SDK的应用程序。
创建程序项目的目录框架
假设在~/slamware目录下创建一个名为 hello_slamware
新程序工程目录。
cd ~/slamware
mkdir -p hello_slamware/src
上述命令即可完成关键的目录结构的创建。
下一步我们创建主要的代码文件: main.cpp
cd ~/slamware/hello_slamware/src
nano main.cpp
将下面的代码输入到这个文件里。按下[Ctrl+X]组合键进行保存并退出编辑器。您当然可以采用其他顺手的编辑器来做这事情。
#include <rpos/robot_platforms/slamware_core_platform.h>
#include <iostream>
using namespace std;
using namespace rpos::robot_platforms;
int main(int argc, char * argv[])
{
SlamwareCorePlatform platform = SlamwareCorePlatform::connect("192.168.11.1", 1445);
cout << "Base version: " << platform.getSDPVersion() << endl;
return 0
}
设置编译脚本
SLAMWARE SDK自带的makefile脚本可以帮助您简化开发过程中的编译工作。
本例中,我们演示如何直接用实例程序的[Makefile]脚本来快速上手。
将Makefile 从实例程序代码目录中复制出来:
cd ~/slamware/hello_slamware
cp ~/slamware/slamware_sdk_linux-x86_64-gcc4.8/samples/map2bmp/Makefile .
由于这里创建的程序工程位于和示例程序不同的目录,所以需要对Makefile做一点修改:
nano Makefile
采用编辑器打开Makefile
,随后找到开头是HOME_TREE :=
的那行,改成如下这样:
HOME_TREE := ../slamware_sdk_linux-x86_64-gcc4.8
HOME_TREE :=
用于指示编译系统SLAMWARE SDK位于什么地方.
修改后,用CTRL+X
保存文件然后退出编辑器。
接着直接用 make
命令就能编译了。
make
编译好的可执行文件位于这个目录: ~/slamware/slamware_sdk_linux-x86_64-gcc4.8/linux-x86_64-release/output
注意: 这是在SLAMWARE SDK目录中的
有用的编译选项
如果您想编译debug版本,可以用如下命令:
make DEBUG=1
debug版本的程序位于如下的路径: ~/slamware/slamware_sdk_linux-x86_64-gcc4.8/linux-x86_64-debug/output
如果想观察详细的编译命令行,可以用 V=1
参数:
make V=1
进行交叉编译或者用不同的版本的GCC
交叉编译可以简单的通过修改SLAMWARE SDK的编译脚本实现.
假设我们想用如下版本的GCC进行 ARM-linux作为目标平台的交叉编译:
- arm-linux-gnueabihf-gcc-4.8
- arm-linux-gnueabihf-g++-4.8
首先,请先确保下载了支持ARMv7hf平台的SLAMWARE SDK,并且是基于4.8版本GCC的。
进入SLAMWARE SDK的目录,随后打开编辑器编辑文件 mak_def.inc
。找到如下的2行:
CC = gcc
CXX = g++
把它们修改为:
CC = arm-linux-gnueabihf-gcc-4.8
CXX = arm-linux-gnueabihf-g++-4.8
您也可以虽自己需要修改一些其他的配置.
开发环境搭建 - Windows (MSVC)
开发环境要求 基于Windows操作系统对Slamware SDK进行应用开发,您的开发环境需满足如下条件: 您的计算机应当安装Visual Studio 2010 SP1(由于我们提供的预编译库采用Visual Studio 2010 SP1进行编译,因此不建议使用Visual Studio 2012或者2013进行开发)
打开Visual Studio 2010并新建项目.
- 选择Visual C++项目,并选择Win32 Console Application(Win32控制台应用程序)项目类型
- 在Name(名称)中输入项目名称
- 点击OK(确定)
设定应用程序选项
点击Next(下一步)
- Application Type(应用程序类型)选择Console Application(命令行应用程序)
- Additional options(附加选项)勾选Empty Project(空项目)
- 点击Finish完成项目创建
配置编译选项
打开项目属性面板
在Solution Explorer(解决方案)中右键单击您刚刚创建的项目,并单击Properties(属性)菜单,打开属性面板:
配置VC++目录
在左侧列表中,选择VC++ Directories(VC++目录)
- 选中右侧的Include Directories(包含目录),并点击下拉按钮
- 选择
(<编辑…>) - 将第一章节中提到的SDK中的include目录加入到列表中
- 选中右侧的Library Directories(库目录),并点击下拉按钮
- 选择
(<编辑…>) - 将第一种中提到的SDK中的lib目录加入到列表中
完成后,您的项目属性页应当与下图相似:
点击OK(确定)完成配置。
Hello World
创建源文件
在Solution Explorer中您的项目下的Source Files目录上,右键单机,并在菜单中选择Add(添加)->New Item(新项目)
选择C++ File (.cpp),并将文件命名成main.cpp
添加代码
在弹出的编辑器中输入如下代码:
#include <rpos/robot_platforms/slamware_core_platform.h>
#include <iostream>
using namespace std;
using namespace rpos::robot_platforms;
int main(int argc, char * argv[])
{
SlamwareCorePlatform platform = SlamwareCorePlatform::connect("192.168.11.1", 1445);
cout << "Base version: " << platform.getSDPVersion() << endl;
return 0
}
编译运行
在Visual Studio的主菜单中,单击Debug(调试)->Start Debugging(开始调试)即可编译运行您的程序。