对于四足机器人来说其配置参数很多,在单片机中可以使用结构体和宏定义的方式来实现参数设置,另外也可以将部分参数存储在Flash中,这样有很大的问题,一是参数顺序修改很麻烦,另外是同类参数归纳整理很麻烦,在ROS中使用ymal来管理相关参数其能很方便的显示各个参数属于哪一类并且易于移植和管理。新主控已经使用树莓派当然我们可以借助ymal来方便的管理我们的系统参数,具体流程如下:

(1)安装库和依赖

Git clone github.com/jbeder/yaml-

然后,在源码目录创建一个 build 文件夹。

mkdir build

进入到 build 文件夹,然后执行 cmake 命令。

cd build
cmake ..

注意的是 cmake 后面是 …,这代表从 build 上一层目录查找 CMakeLists.txt ,然后编译的文件都会存放在 build 文件夹,如果对编译的效果不满意,只要删除 build 文件就好了,其他源码目录并不受影响,这是 cmake 编译时的基本套路。yaml-cpp 默认构建的就是静态库,也就是 unix 类系统下的 .a 文件,如果你想构建动态库的话,就需要在 cmake 时指定。

cmake ..  -D BUILD_SHARED_LIBS=ON
make
sudo make install

(2)在项目cmake文件中加上yaml库

cmake_minimum_required(VERSION 2.6)
SET(PROJECT_NAME control_task)
PROJECT(${PROJECT_NAME})
 
set( CMAKE_BUILD_TYPE "Release" )
set( CMAKE_CXX_FLAGS "-std=c++11 -O3" )
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../build)
 
include_directories( 
 "./build"
 "./inc"
 "/usr/local/include"
 
)
 
AUX_SOURCE_DIRECTORY(src DIR_SRCS)
 
ADD_EXECUTABLE(${PROJECT_NAME} ${DIR_SRCS})
 
target_link_libraries(${PROJECT_NAME} pthread )
 
target_link_libraries(${PROJECT_NAME} /usr/local/lib/libyaml-cpp.so)

(3)建立一个ymal文件并设置所需要的参数

robot: 
 W: 0.35
 H: 0.4
 L1: 0.15
 L2: 0.13
 L3: 0.0
 MESS: 0.45

(4)在程序中读取参数并写入变量

void load_config(void)    //读取配置文件
{
 printf("--load control yaml config--\n");
 YAML::Node config = YAML::LoadFile("../config/servo_config.yaml");
 
 cout<<"robot W:"<<config["robot"]["W"].as<float>()<<endl;
 cout<<"robot Mess:"<<config["robot"]["MESS"].as<float>()<<endl;
}