前段时间花了很多时间来调试,网上也没有一个教程来做,踩了很多很多的坑,于是就自己写一个从编译qt到成功运行的mini cheetah仿真教程以供大家参考。 本教程配置:rk3399 +ubuntu18.04或debian10 +4GB+16GB + xrdp+ 手机分享出来的热点,在这两个linux版本下都成功运行。 xrdp是远程桌面,没有hdmi屏幕,并且懒得去整一个,建议有的还是上专用屏幕,应该仿真速度能上来。 一、qt的新手坑:我找遍了整个网络,下载了无数个.run文件,最终发现qt没有发布现成的基于arm64架构的安装包,于是卡了几天解决qt库的问题,因为sim仿真需要。多半还是因为我是新手的原因吧,不知道这玩意儿没有,以后要多注意这一点才行。 先决条件:预留空间至少9gb,编译8gb+,安装几百M 通过qt源码编译安装5.9.5库: 在 qt官方网站: https://download.qt.io/archive/qt 下载自己需要的qt版本,我下载的是5.9.5,根据linux选择.xz结尾的 安装编译环境
sudo apt-get update
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install freeglut3-dev
sudo apt-get install gdb
sudo apt-get install cmake
sudo apt-get install libxcb-xinerama0-dev
sudo apt-get install libfontconfig1-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install ‘^libxcb.*-dev’ libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
(参考https://blog.csdn.net/l550802356/article/details/126425324)
执行tar -xvf qt-everywhere-src-5.9.5.tar.xz ,将解压后的文件夹放到 /home/用户名/ 根目录下
进入到解压后的目录:
./configure -prefix /opt/qt5.9.5 -confirm-license -opensource -release -make libs -xplatform linux-aarch64-gnu-g++ -pch -qt-libjpeg -qt-libpng -qt-zlib -no-sse2 -no-cups -no-separate-debug-info -no-glib -no-openssl
其中-prefix /opt/qt5.9.5为安装目录, 基于minicheetah源代码./sim中CMakelist.txt文件中下面的配置决定:
set(CMAKE_PREFIX_PATH /opt/qt5.9.5/lib/cmake)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
set(Qt5Core_DIR /opt/qt5.9.5/lib/cmake/Qt5Core)
set(Qt5Widgets_DIR /opt/qt5.9.5/lib/cmake/Qt5Widgets/)
set(Qt5Gamepad_DIR /opt/qt5.9.5/lib/cmake/Qt5Gamepad/)
当前也可以将qt安装到自己喜欢的位置,然后修改CMakelist.txt中相应路径。 其他的也根据实际需要配置,这是我编译成功的配置。
这个步骤如果出错,请查看之前的操作是不是有问题,或者某些依赖库没有弄好,百度相应的错误关键字,或者没有clean干净,重启大法之类的都试试。
然后就是make -j6(榨干rk3399,但是编译仍旧是5个小时左右吧,编译后文件夹8.6gb,所以最好准备9gb以上的空间)
sudo make install
最后就可以在设置的/opt/qt5.9.5目录下查看是否安装成功~
20220907 补充一下,我在编译我的代码的时候出现了 QFontDatabase: Cannot find font directory 主要原因是字体库缺失。 参考这篇文章解决 https://blog.csdn.net/danshiming/article/details/120322458
如果configure或编译过程中出错,最好将整个文件夹删掉重新解压重复以上步骤,过程要一气呵成,不然会有莫名其妙的问题。
二、其他必要环境的配置安装: 1、安装部分缺失库(可选):
sudo apt-get install ros-$ROS_DISTRO-joy ros-$ROS_DISTRO-octomap-ros
ros-$ROS_DISTRO-mavlink python-wstool python-catkin-tools protobuf-compiler libgoogle-glog-dev ros-$ROS_DISTRO-control-toolbox ros-$ROS_DISTRO-mavros
其中$ROS_DISTRO是根据当前系统下安装的ros版本自动填充查找相应的ros包,如果没有安装则根据下面调用确定的ros版本: linux版本 -> 对应ros版本 ubuntu 20.04 -> noetic ubuntu 18.04 -> melodic ubuntu 16.04 -> kinetic debian 10 -> noetic debian 9 -> lunar 比如我系统是ubuntu18.04 时,应该是 sudo apt-get install ros-melodic-**** debian10系统,sudo apt-get install ros-noetic-**** 2、查看gcc g++版本: gcc -v g++ --version 如果没有安装的 : sudo apt-get install gcc g++ 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
4、安装Eigen sudo apt-get install libeigen3-dev 再执行 sudo cp -r /usr/include/eigen3 /usr/local/include (将eigen3复制到位,否则仿真环境编译会出错) 5.安装JAVA(需要在安装LCM前安装JAVA保证后续链接成功): sudo apt install default-jdk 6、安装cmake sudo apt-get install cmake 7、安装LCM实时通信库:
git clone https://github.com/lcm-proj/lcm.git
cd lcm
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
8.安装IPOPT(重要):
sudo apt-get install libblas-dev checkinstall
sudo apt-get install liblapack-dev checkinstall
(下面这个步骤我参考原教程,总是出错,但是好像不影响整个工程的正常运行) 下载文件,百度网盘地址: 链接:https://pan.baidu.com/s/1NfmADd2TaHnUAqeN83Wg0g 提取码:d9kl #或者命令下载: wget https://www.coin-or.org/download/source/Ipopt/Ipopt-3.12.7.zip unzip Ipopt-3.12.7.zip
cd /Ipopt-3.12.7/ThirdParty/Blas
./get.Blas
cd ../Lapack
./get.Lapack
cd ../Mumps
./get.Mumps
cd ../Metis
./get.Metis
cd ../../
mkdir build
cd build
../configure
make
make install
sudo ldconfig
mkdir /usr/local/ipopt
mkdir /usr/local/ipopt/include
sudo cp -a /home/exbot/Downloads/Ipopt-3.12.7/build/include/coin/* /usr/include/.
sudo cp -a /home/exbot/Downloads/Ipopt-3.12.7/build/lib/* /usr/include/.
三、下载编译mini cheetah 先决条件:编译后要1gb+空间,再加上交换空间2gb,总共3gb空闲空间。 下载: git clone https://github.com/mit-biomimetics/Cheetah-Software 下载完成后,先修改源代码./sim中CMakelist.txt文件:
set(CMAKE_PREFIX_PATH /opt/qt5.9.5/lib/cmake)
SET(CMAKE_INCLUDE_CURRENT_DIR ON)
set(Qt5Core_DIR /opt/qt5.9.5/lib/cmake/Qt5Core)
set(Qt5Widgets_DIR /opt/qt5.9.5/lib/cmake/Qt5Widgets/)
set(Qt5Gamepad_DIR /opt/qt5.9.5/lib/cmake/Qt5Gamepad/)
设置交换空间:
sudo fallocate -l 2G /swapfile
sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
sudo mkswap /swapfile
sudo swapon /swapfile
free
PS:这个只是做了一个临时的文件,记得不用交换空间之后自行删掉swapfile文件:
swapoff /swapfile
sudo rm /swapfile
-如果想长期生效,参考源教程执行
https://zhuanlan.zhihu.com/p/140961253
处理一直卡在google_test 最近我们网络环境太和谐了,卡在这里的一般都是无法解决了的。 所以注释掉#if(CMAKE_SYSTEM_NAME MATCHES Linux) 到 #endif(CMAKE_SYSTEM_NAME MATCHES Linux) 之间的代码,googletest在后面的仿真中一直没有用上,如下:
include_directories(".")
include_directories("include/" )
include_directories("/usr/local/include/lcm/")
include_directories("../lcm-types/cpp/")
include_directories("../third-party/inih")
include_directories("../third-party/osqp/include")
include_directories("../third-party/ParamHandler")
include_directories("/usr/local/include/eigen3")
include_directories("FootstepPlanner")
include_directories(${CMAKE_BINARY_DIR})
include_directories(${PROJECT_SOURCE_DIR})
file(GLOB_RECURSE sources "src/*.cpp")
add_library(biomimetics SHARED ${sources})
target_link_libraries(biomimetics inih dynacore_param_handler JCQP osqp)
add_subdirectory(FootstepPlanner)
然后在源代码文件夹中,编译四件套:
mkdir build
cd build
cmake ..
make -j6
这里编译到中途会出现 g++: internal compiler error: Killed (program cc1plus) make -j3 降低线程运行
编译完成: 仿真成功。 sim进程占用cpu 200%+ mit_ctrl进程70%+ 仿真帧率很低,并且将我热点带宽占满了,网页都打不开,可能和远程桌面有关(可能性较小),有时间改为HDMI等接口直接显示屏试试
当然,在本平台仿真界面速度是很慢的,不过通过这一步,下一步就是将mini cheetah 运行代码迁移到arm架构上,写写底层驱动,改改硬件,做做接口,这样就可以脱离upboard了吧。
https://zhuanlan.zhihu.com/p/80686651 (多谢大佬无私奉献)
|