原文链接
最近比较火的小米机器狗开卖了,搞机器人的多么希望有一条自己的机器狗啊!
机器狗铁蛋,能走能遛能空翻
机器狗买不到,仿真总还是能跑吧。那么就来跑跑控制机器狗跑的算法吧。听说机器狗也有开源的算法,大家都用MIT Mini Cheetah在开发,那么就来一探究竟吧。
1.下载代码并编译
地址
https://github.com/mit-biomimetics/Cheetah-Software#readme
什么都不安装,编译
mkdir build
cd build
cmake ..
./../scripts/make_types.sh
make -j4
1.1解决cmake错误1
在cmake …这一步骤停在
Cloning into ‘googletest-src’…
网速給力点就下载好了…
1.2解决qt错误
ls: cannot access '/home/qian/Qt/': No such file or directory
By not providing "FindQt5Gamepad.cmake" in CMAKE_MODULE_PATH this project
has asked CMake to find a package configuration file provided by
"Qt5Gamepad", but CMake did not find one.
解决参考
Mit Mini Cheetah开源代码开发环境搭建
(1)先改cmakelist.txt将qt路径改为我的qt安装路径
直接改.sh或者改set(CMAKE_PREFIX_PATH /opt/Qt5.9.1/5.9.1/gcc_64/lib/cmake)
Cannot generate a safe runtime search path for target sim because files in
some directories may conflict with libraries in implicit directories:
runtime library [libQt5Widgets.so.5] in /usr/lib/x86_64-linux-gnu may be hidden by files in:/opt/Qt5.9.1/5.9.1/gcc_64/lib
提示说不安全。
查找一下
sudo find / -name qwindowdefs.h
/usr/include/x86_64-linux-gnu/qt5/QtGui/qwindowdefs.h
/usr/include/qt4/Qt/qwindowdefs.h
/usr/include/qt4/QtGui/qwindowdefs.h
发现好多个qt版本啊,不敢删呀,好多都用到了,编译不成功没有找到原因,cmake 功力还是不够啊,不知道怎么改cmakelist.txt,看到别人都是用虚拟机搞的,暂时搞不定,打算也用虚拟机吧,或者把cmakelist改好。
反正是兴趣爱好,不能急啊,打游戏不也是消耗时间吗??有时间就弄弄,搞技术要有一颗平静淡定的心。
解决思路
(1)打印find_package后qt路径
在cmakelist.txt后加入打印可见变量的语句
foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
打印环境变量及其值
execute_process(COMMAND "${CMAKE_COMMAND}" "-E" "environment")
发现找到的qt路径不在我的自定义安装路径下 /opt/Qt5.9.1/
所以不同版本冲突。
(2)修改所有的find_package路径,只在指定路径下查找
如下
find_package(Qt5Core CONFIG REQUIRED PATHS /opt/Qt5.9.1/5.9.1/gcc_64/lib/cmake NO_DEFAULT_PATH )
find_package(Qt5Widgets CONFIG REQUIRED PATHS /opt/Qt5.9.1/5.9.1/gcc_64/lib/cmake NO_DEFAULT_PATH)
get_target_property(QtCore_location Qt5::Core LOCATION)
message(STATUS ${QtCore_location})
find_package(Qt5Gui CONFIG REQUIRED PATHS /opt/Qt5.9.1/5.9.1/gcc_64/lib/cmake NO_DEFAULT_PATH)
find_package(Qt5Core COMPONENTS QtGamepad REQUIRED PATHS /opt/Qt5.9.1/5.9.1/gcc_64/lib/cmake NO_DEFAULT_PATH)
find_package(Qt5Gamepad REQUIRED PATHS /opt/Qt5.9.1/5.9.1/gcc_64/lib/cmake NO_DEFAULT_PATH)
再次cmake后,cmake就不提示版本冲突了。
1.3安装依赖库
sudo apt install mesa-common-dev freeglut3-dev coinor-libipopt-dev libblas-dev liblapack-dev gfortran liblapack-dev coinor-libipopt-dev cmake gcc build-essential libglib2.0-dev
安装
1.4安装LCM 1.3.1
git clone https://github.com/lcm-proj/lcm.git
cd lcm
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
安装好后执行
./../scripts/make_types.sh
make -j4
1.5 设置eigen3目录
报
error: /usr/local/include/eigen3: No such file or directory [-Werror=missing-include-dirs]
错误
这是由于安装eigen3的时候默认安装在/usr/include目录,而编译起器以为安装在 /usr/local/include目录,因此找不到对应文件。这时候可以把eigen3文件夹直接复制到/usr/local/include目录下。
解决1
sudo cp -r /usr/include/eigen3 /usr/local/include/eigen3
尝试在.bashrc中加入,发现不行。。。
export C_INCLUDE_PATH=/usr/local/include/eigen3/:/usr/include/eigen3/
编译,还差最后一个错误
SimControlPanel.cpp:408:12: error: no matching function for call to ‘QMetaObject::invokeMethod(SimControlPanel*, SimControlPanel::on_startButton_clicked()::<lambda()>::<lambda(std::__cxx11::string)>::<lambda()>)’
});
^
In file included from /usr/include/x86_64-linux-gnu/qt5/QtGui/qwindowdefs.h:38:0,
qt5的错误。。。
官方说版本为Qt 5.10
在这里快速下载安装,修改cmakelist
https://mirrors.tuna.tsinghua.edu.cn/qt/development_releases/qt/5.14/5.14.0-rc/
将上文的搜索路径改为新安装的qt安装路径所在的cmake文件夹
cmake ..
./../scripts/make_types.sh
make -j8
终于编译成功了!!!!!来张图
断断续续搞了几个星期,终于成功了!机器狗,我来啦!
参考
https://zhuanlan.zhihu.com/p/80686651
https://zhuanlan.zhihu.com/p/87052862