1.介绍
本文详细介绍如何在ubuntu系统中配置仿真环境,实现开源机器人simple man的站立和行走。华北舵狗王发布的文章如下:
开源人形机器人SimpleMan(简单男人)
开源人形机器人SimpleMan1-仿真环境的搭建
但比较简略,对于新手不友好,本文是保姆级教程。
2. 准备操作系统
作者用的ubuntu16.04,我用的是20.04版本,都是可以的。不能用win系统,编译会出错。
3. 准备软件
需要安装vscode和webots。
vscode用于查看和编辑代码,安装方法略。
webots需要2021a版本,本文提供从浏览器下载安装的方法。浏览器搜索webots,进入webots官网(https://cyberbotics.com/),在“下载”按钮右边有个下拉菜单,点击“更早版本”:
在跳转后的网页中搜索“2021a”,找到与自己电脑架构相对应的安装包并下载。ubuntu网络不好,我是在win系统中下载然后把文件传过去的。
在安装包所在文件夹打开终端,执行下图命令,安装webots:
完成后打开webots,加载一个示例项目,确保安装成功:
4. 准备开源代码
进入作者发布的gitee项目,点击项目右上角的“克隆/下载”:
simulation路径下有个panda_man.rar是webots仿真项目,需要把它解压缩然后转移到ubuntu系统中。我对ubuntu不熟悉,所以下载和解压过程都是在win系统中进行的。
在ubuntu中用vscode打开panda_man文件夹,里面的controllers/panda_man就是双足控制代码了,打开CMakeLists.txt,需要对其修改。
cmakelist中有5行代码标注了“#需要修改路径”,其中前4行是webots库文件路径,需要把webots路径修改为自己电脑上的安装位置,可以在ubuntu系统目录下搜索"webots",我的搜索结果是在usr/local,如下图:
最后一处修改是在cmakelist最后,在双足控制程序中有个liblib_imp.a的预编译文件,需要修改其绝对路径。可以在panda_man仿真文件夹中搜索liblib_imp.a,找到路径然后替换。
替换后我的cmakelist文件如下:
cmake_minimum_required(VERSION 2.6)
SET(PROJECT_NAME panda_man)
PROJECT(${PROJECT_NAME})
get_filename_component(PROJECT ${CMAKE_SOURCE_DIR} NAME)
find_package(Eigen3)
add_compile_definitions(__USE_SINGLE_PRECISION__)
INCLUDE_DIRECTORIES(${EIGEN3_INCLUDE_DIR})
set( CMAKE_BUILD_TYPE "Release" )
set( CMAKE_CXX_FLAGS "-std=c++11 -O3 -pthread" )
# set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/../../build)
include_directories(
"./build"
"./include_vmc"
"./include_wb"
"./vmc_inc"
"./mpc"
"./vision_location"
"./common_utils"
"./urdf"
"./rbdl"
"./model"
"./cube_vision"
# "/home/pi/webots/webots/include/controller/c/"#需要修改路径
# "/home/pi/webots/webots/include/controller/cpp/"#需要修改路径
"/usr/local/webots/include/controller/c/" # 修改后
"/usr/local/webots/include/controller/cpp/" # 修改后
)
link_directories("/usr/local/lib")
include_directories("/usr/local/include")
# LINK_LIBRARIES("/home/pi/webots/webots/lib/controller/libController.so")#需要修改路径
# LINK_LIBRARIES("/home/pi/webots/webots/lib/controller/libCppController.so")#需要修改路径
LINK_LIBRARIES("/usr/local/webots/lib/controller/libController.so")# 修改后
LINK_LIBRARIES("/usr/local/webots/lib/controller/libCppController.so")# 修改后
AUX_SOURCE_DIRECTORY(gait_src DIR_SRCS)
AUX_SOURCE_DIRECTORY(locomotion_src DIR_SRCS1)
AUX_SOURCE_DIRECTORY(math_src DIR_SRCS2)
AUX_SOURCE_DIRECTORY(mpc DIR_SRCS3)
AUX_SOURCE_DIRECTORY(source DIR_SRCS4)
AUX_SOURCE_DIRECTORY(source_vmc DIR_SRCS5)
AUX_SOURCE_DIRECTORY(vision_location DIR_SRCS6)
AUX_SOURCE_DIRECTORY(rbdl DIR_SRCS7)
AUX_SOURCE_DIRECTORY(urdf DIR_SRCS8)
AUX_SOURCE_DIRECTORY(common_utils DIR_SRCS9)
AUX_SOURCE_DIRECTORY(model DIR_SRCS10)
AUX_SOURCE_DIRECTORY(cube_vision DIR_SRCS11)
ADD_EXECUTABLE(${PROJECT_NAME} ${DIR_SRCS} ${DIR_SRCS1} ${DIR_SRCS2} ${DIR_SRCS3} ${DIR_SRCS4} ${DIR_SRCS5} ${DIR_SRCS6} ${DIR_SRCS7} ${DIR_SRCS8} ${DIR_SRCS9} ${DIR_SRCS10} ${DIR_SRCS11})
set(CMAKE_COLOR_MAKEFILE ON)
set(CMAKE_CXX_STANDARD 14)
add_subdirectory(qpOASES lib/ EXCLUDE_FROM_ALL)
target_link_libraries(${PROJECT_NAME} qpOASES)
add_subdirectory(yaml-cpp lib/ EXCLUDE_FROM_ALL)
target_link_libraries(${PROJECT_NAME} yaml-cpp)
link_directories($ENV{WEBOTS_HOME}/lib/controller)
link_directories($ENV{WEBOTS_HOME}/lib/webots)
file(GLOB C_SOURCES *.c)
file(GLOB CPP_SOURCES *.cpp)
set(SOURCES ${C_SOURCES} ${CPP_SOURCES})
if (NOT CPP_SOURCES STREQUAL "") # Sources contain C++ files
set (LIBRARIES ${CMAKE_SHARED_LIBRARY_PREFIX}Controller${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_SHARED_LIBRARY_PREFIX}CppController${CMAKE_SHARED_LIBRARY_SUFFIX})
include_directories($ENV{WEBOTS_HOME}/include/controller/c $ENV{WEBOTS_HOME}/include/controller/cpp)
else() # C
set (LIBRARIES ${CMAKE_SHARED_LIBRARY_PREFIX}Controller${CMAKE_SHARED_LIBRARY_SUFFIX})
include_directories($ENV{WEBOTS_HOME}/include/controller/c)
endif()
add_custom_command(TARGET ${PROJECT} POST_BUILD COMMAND ${CMAKE_COMMAND} -E
copy ${CMAKE_BINARY_DIR}/${PROJECT} ${CMAKE_SOURCE_DIR}
)
#add_library(lib_imp ./locomotion_src/force_imp_controller.cpp)
# target_link_libraries(${PROJECT_NAME} /home/pi/Documents/panda_man/controllers/panda_man/locomotion_src/liblib_imp.a)#需要修改路径
target_link_libraries(${PROJECT_NAME} /home/test/man/panda_man/controllers/panda_man/locomotion_src/liblib_imp.a)# 修改后
5. 编译源码
需要先安装cmake编译工具,依次执行以下指令,首先更新软件列表,然后安装cmake,最后检查cmake版本验证安装成功:
sudo apt update
sudo apt install cmake
cmake --version
然后进入控制器文件夹,我的是~/man/panda_man/controllers/panda_man,依次执行以下指令,进行编译操作:
mkdir build
cd build
cmake ..
make
首次编译会报错,发现需要在ubuntu系统上安装eigen, qpOASES, 和boost库,ChatGPT给出的安装方法如下,其中qpOASES需要从github下载然后用cmake编译和安装,其他两个库用apt指令即可直接安装。我用git clone会下载失败,所以是从浏览器下载的压缩包。安装好qpOASES即可把github下载的文件删掉。
在Ubuntu上安装Eigen、Boost和qpOASES库可以使你的C++开发环境更加完善。以下是详细的安装步骤:
1. 安装Eigen
Eigen是一个高性能的线性代数库,用于科学计算和工程项目。以下是安装步骤:
使用APT包管理器安装
sudo apt update
sudo apt install libeigen3-dev
2. 安装Boost
Boost是C++标准库的扩展集合,提供了许多实用的功能库。以下是安装步骤:
使用APT包管理器安装
sudo apt update
sudo apt install libboost-all-dev
3. 安装qpOASES
qpOASES是一个开源的库,用于求解QP(Quadratic Programming)问题。由于Ubuntu的APT仓库中不包含qpOASES,需要从源码编译安装。
从源码编译安装
安装必需工具:
sudo apt update
sudo apt install build-essential cmake git
下载qpOASES源码:
git clone https://github.com/coin-or/qpOASES.git
cd qpOASES
创建并进入构建目录:
mkdir build
cd build
运行CMake配置:
cmake ..
编译和安装:
make
sudo make install
默认情况下,qpOASES会被安装到默认系统目录中,一般是 /usr/local/lib 以及 /usr/local/include。
安装三个库之后,再用cmake …和make指令编译源码,就不会报错了。首次编译会比较漫长,编译成功后会在build文件夹内生成名为panda_man的可执行文件。
6. 运行仿真
打开webots,打开仿真项目中的世界文件,我的在~/man/panda_man/TinyHuman_up1.wbt,然后开始仿真,不出意外的话机器人会先站立一会,然后开始行走:
至此就完成了狗王开源人形机器人仿真环境的搭建,还是比较麻烦的。至于如何进一步开发,参见狗王的知乎文章。