环境准备
使用OpenHiva框架进行机器人应用开发前,需提前准备好开发和运行环境。
- 请提前购买Atlas 200I DK A2开发者套件,具体介绍可参考《Atlas 200I DK A2开发者套件》。
- 请参考《CANN软件安装指南》完成驱动、固件、开发套件包Ascend-cann-toolkit的安装。
安装完成后,以运行用户(如HwHiAiUser)登录环境,执行如下命令设置环境变量。其中${install_path}为CANN软件安装后文件存储路径,请根据实际情况替换该路径。
source ${install_path}/set_env.sh
- 下载OpenHiva软件包。
访问昇腾CANN社区版下载页面 ,下载对应版本的Ascend-cann-robotmiddleware_{software_version}_linux-aarch64.run包。
- 安装OpenHiva软件包。
请根据自身实际需要,选择合适的模式安装:
- run模式:软件安装后,支持用户直接运行机器人业务应用程序。
- sdk模式:软件安装后,提供OpenHiva接口依赖的头文件,方便自定义通信业务等,最大限度支撑用户进行机器人业务应用开发。
- run模式安装(运行态)
- 进入run包所在目录,执行如下命令,以运行用户身份(默认HwHiAiUser)安装。
/bin/sh ./Ascend-cann-robotmiddleware_{software_version}_linux-aarch64.run --install-username=HwHiAiUser --install-usergroup=HwHiAiUser --quiet --run
- --install-username参数:指定安装用户,是文件安装后的所有者。
- --install-usergroup参数:指定文件安装后所属group,拥有所有文件访问权限。
- --quiet:不打印中间过程信息。
- --run:运行态下指定run模式安装,生成的so库文件是用户运行时依赖的so。
若操作系统是ubuntu,安装Robot Middleware包前需要先用dpkg-reconfigure dash命令设置Shell环境,此处使用bash解析。
- 安装完成后,执行reboot命令重启设备。
重启后,执行ps -ef命令查看进程启动情况。若出现如下屏显进程信息(如cfgmgr、datamaster、timer_sever),则软件安装成功。
- 进入run包所在目录,执行如下命令,以运行用户身份(默认HwHiAiUser)安装。
- SDK模式安装(编译态)
- 进入run包所在目录,执行如下命令,以运行用户身份(默认HwHiAiUser)安装。
/bin/sh ./Ascend-cann-robotmiddleware_{software_version}_linux-aarch64.run --install-username=HwHiAiUser --install-usergroup=HwHiAiUser --quiet --devel
- --install-username参数:指定安装用户,是文件安装后的所有者。
- --install-usergroup参数:指定文件安装后所属group,拥有所有文件访问权限。
- --quiet:不打印中间过程信息。
- --devel:编译态下指定devel模式安装,生成对应的头文件。
软件包成功安装后,可查看依赖的头文件、库文件,一般默认在SDK目录下:
- 从“${INSTALL_DIR}/robotmiddleware/sdk/include”目录下获取调用OpenHiva接口所需的头文件。
- 从“${INSTALL_DIR}/robotmiddleware/sdk/lib”目录下获取编译OpenHiva接口所需的库文件。
- 从“${INSTALL_DIR}/robotmiddleware/sdk/tools”目录下获取消息头文件生成工具header_generator(x86_64可执行文件)。
其中${INSTALL_DIR}是Robot Middleware安装目录,请根据实际情况替换该路径。
- 编译生成消息头文件。
若用户想用OpenHiva进行Pub/Sub通信,除了接口依赖的头文件,还需编译通信所需的消息头文件(*.h),一般借助header_generator工具生成,具体操作步骤如下。
- 在编译二进制文件之前准备好消息文件(*.msg)。
目前系统内置的msg文件支持的基础消息类型如表1所示,也支持用户自定义消息类型。
表1 基础数据类型 数据格式
生成数据类型
bool
bool类型数据
byte
char类型数据
char
char类型数据
float32
float类型数据
int8
int8_t类型数据
uint8
uint8_t类型数据
float64
double类型数据
int16
int16_t类型数据
uint16
uint16_t类型数据
int32
int32_t类型数据
uint32
uint32_t类型数据
int64
int64_t类型数据
uint64
uint64_t类型数据
time
Hiva::Time类型数据
duration
Hiva::Duration类型数据
string
std::string类型数据
头文件生成工具支持std::vector和std::array类型的数据,以int8为例:
int8[] int8_vec # 生成头文件会包含 std::vector<int8_t> int8_vec int8[10] int8_arr # 生成头文件会包含 std::array<int8_t,10> int8_arr
以上vector和array数据类型也可以是其它基础数据类型或用户自定义数据类型。
- 使用头文件生成工具(header_generator)生成消息头文件(*.h)。
进入${INSTALL_DIR}/robotmiddleware/sdk/tools目录,执行如下命令,其中msg dir是用户指定的msg文件目录(相对路径)。
header_generator <msg dir> arm64 HIVA2
执行该命令后,消息的namespace与msg dir相同,生成的消息name与*.msg名相同。
以Hello.msg和World.msg为例,生成消息头文件的操作过程如下:
- 将header_generator二进制文件与消息所在的目录(kyber_msgs)放到同一层级,目录结构如下:
|---- header_generator //头文件生成工具 |---- kyber_msgs // 消息文件目录 | |---- Hello.msg | |---- World.msg
其中World.msg和Hello.msg文件内容如下,通过cat命令查看,Hello.msg依赖World.msg。
- 进入header_generator所在目录,执行如下命令生成消息头文件。
./header_generator kyber_msgs arm64 HIVA2
执行成功后,在*.msg所在目录下自动生成同名的*.h头文件,以Hello.h头文件为例:
- 生成头文件之后,开发者就可以在开发OpenHiva应用程序时,使用该消息类型进行Pub/Sub通信。
- 将header_generator二进制文件与消息所在的目录(kyber_msgs)放到同一层级,目录结构如下:
- 在编译二进制文件之前准备好消息文件(*.msg)。
- 进入run包所在目录,执行如下命令,以运行用户身份(默认HwHiAiUser)安装。