昇腾社区首页
中文
注册

环境准备

使用OpenHiva框架进行机器人应用开发前,需提前准备好开发和运行环境。

  1. 请提前购买Atlas 200I DK A2开发者套件,具体介绍可参考《Atlas 200I DK A2开发者套件》
  2. 请参考《CANN软件安装指南》完成驱动、固件、开发套件包Ascend-cann-toolkit的安装。

    安装完成后,以运行用户(如HwHiAiUser)登录环境,执行如下命令设置环境变量。其中${install_path}为CANN软件安装后文件存储路径,请根据实际情况替换该路径。

    source ${install_path}/set_env.sh
  3. 下载OpenHiva软件包。

    访问昇腾CANN社区版下载页面 ,下载对应版本的Ascend-cann-robotmiddleware_{software_version}_linux-aarch64.run包。

  4. 安装OpenHiva软件包。

    请根据自身实际需要,选择合适的模式安装:

    • run模式:软件安装后,支持用户直接运行机器人业务应用程序。
    • sdk模式:软件安装后,提供OpenHiva接口依赖的头文件,方便自定义通信业务等,最大限度支撑用户进行机器人业务应用开发。
    • run模式安装(运行态)
      1. 进入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解析。

      2. 安装完成后,执行reboot命令重启设备。

        重启后,执行ps -ef命令查看进程启动情况。若出现如下屏显进程信息(如cfgmgr、datamaster、timer_sever),则软件安装成功。

    • SDK模式安装(编译态)
      1. 进入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安装目录,请根据实际情况替换该路径。

      2. 编译生成消息头文件。

        若用户想用OpenHiva进行Pub/Sub通信,除了接口依赖的头文件,还需编译通信所需的消息头文件(*.h),一般借助header_generator工具生成,具体操作步骤如下。

        1. 在编译二进制文件之前准备好消息文件(*.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数据类型也可以是其它基础数据类型或用户自定义数据类型。

        2. 使用头文件生成工具(header_generator)生成消息头文件(*.h)。

          使用header_generator工具时,请在x86_64环境上使用,并确保GLIBC版本>=GLIBCXX_3.4.26(部署过程请参见GNU官网),操作系统建议为Ubuntu20.04及以上版本。

          进入${INSTALL_DIR}/robotmiddleware/sdk/tools目录,执行如下命令,其中msg dir是用户指定的msg文件目录(相对路径)。

          header_generator <msg dir> arm64 HIVA2

          执行该命令后,消息的namespace与msg dir相同,生成的消息name与*.msg名相同。

          以Hello.msg和World.msg为例,生成消息头文件的操作过程如下:

          1. 将header_generator二进制文件与消息所在的目录(kyber_msgs)放到同一层级,目录结构如下:
            |---- header_generator         //头文件生成工具         
            |---- kyber_msgs               // 消息文件目录
            |    |---- Hello.msg           
            |    |---- World.msg           

            其中World.msg和Hello.msg文件内容如下,通过cat命令查看,Hello.msg依赖World.msg。

          2. 进入header_generator所在目录,执行如下命令生成消息头文件。
            ./header_generator kyber_msgs arm64 HIVA2

            执行成功后,在*.msg所在目录下自动生成同名的*.h头文件,以Hello.h头文件为例:

          3. 生成头文件之后,开发者就可以在开发OpenHiva应用程序时,使用该消息类型进行Pub/Sub通信。