(mini cheetah仿真教程)基于ubuntu18.04.2或debian10系统,arch64架构的rk3399,arm

前段时间花了很多时间来调试,网上也没有一个教程来做,踩了很多很多的坑,于是就自己写一个从编译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结尾的
在这里插入图片描述
(mini cheetah仿真教程)基于ubuntu18.04.2或debian10系统,arch64架构的rk3399,arm_第1张图片
安装编译环境

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

#下载第三方库(否则make IpExpansionMatrix.hpp会报错)
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
# include 
sudo cp -a /home/exbot/Downloads/Ipopt-3.12.7/build/include/coin/*  /usr/include/.
# lib
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
(mini cheetah仿真教程)基于ubuntu18.04.2或debian10系统,arch64架构的rk3399,arm_第2张图片
最近我们网络环境太和谐了,卡在这里的一般都是无法解决了的。
所以注释掉#if(CMAKE_SYSTEM_NAME MATCHES Linux)
到 #endif(CMAKE_SYSTEM_NAME MATCHES Linux)
之间的代码,googletest在后面的仿真中一直没有用上,如下:

# Source/Include files 文件目录
include_directories(".")
include_directories("include/" )                 # common includes
include_directories("/usr/local/include/lcm/")   # lcm includes
include_directories("../lcm-types/cpp/")
include_directories("../third-party/inih")       # inih includes
include_directories("../third-party/osqp/include")       # osqp includes
include_directories("../third-party/ParamHandler")
include_directories("/usr/local/include/eigen3")   # lcm includes
include_directories("FootstepPlanner")
include_directories(${CMAKE_BINARY_DIR})
include_directories(${PROJECT_SOURCE_DIR})
file(GLOB_RECURSE sources "src/*.cpp")                   # common library cpp files

# Library 生成动态库 使用特定的源码为项目增加lib 
add_library(biomimetics SHARED ${sources})       # produce a library used by sim/robot 生成库给仿真或实体使用
# 将biomimetics库同其他库链接
target_link_libraries(biomimetics inih dynacore_param_handler JCQP osqp)

#if(CMAKE_SYSTEM_NAME MATCHES Linux)
# Pull in Google Test 添加Gtest test 异常处理相关库
#include(CTest)
#    if (CMAKE_VERSION VERSION_LESS 3.2)
#    set(UPDATE_DISCONNECTED_IF_AVAILABLE "")
 #   else()
 #   set(UPDATE_DISCONNECTED_IF_AVAILABLE "UPDATE_DISCONNECTED 1")
#    endif()
#include(DownloadProject.cmake)
#download_project(PROJ                googletest
#                 GIT_REPOSITORY      git://github.com/#google/googletest.git
#                 GIT_TAG             master
#                 ${UPDATE_DISCONNECTED_IF_AVAILABLE}
#                QUIET
#)
#set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
#add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
#if (CMAKE_VERSION VERSION_LESS 2.8.11)
 #   include_directories("${gtest_SOURCE_DIR}/include"
  #                      "${gmock_SOURCE_DIR}/include")
#endif()
# Pull in Google Test 添加Gtest end
# Test
#file(GLOB_RECURSE test_sources "test/test_*.cpp")             # test cpp files
#add_executable(test-common ${test_sources})
#target_link_libraries(test-common gtest gmock_main lcm rt inih osqp dynacore_param_handler pthread biomimetics)
#target_link_libraries(test-common Goldfarb_Optimizer)
#target_link_libraries(test-common JCQP)
#add_test(NAME example_test COMMAND test-common)
#endif(CMAKE_SYSTEM_NAME MATCHES Linux)
# Our libraries
add_subdirectory(FootstepPlanner)

然后在源代码文件夹中,编译四件套:

mkdir build 
cd build
cmake ..
make -j6  #榨干3399,注意加风扇

这里编译到中途会出现
g++: internal compiler error: Killed (program cc1plus)
make -j3 降低线程运行

编译完成:
仿真成功。
sim进程占用cpu 200%+
mit_ctrl进程70%+
仿真帧率很低,并且将我热点带宽占满了,网页都打不开,可能和远程桌面有关(可能性较小),有时间改为HDMI等接口直接显示屏试试
(mini cheetah仿真教程)基于ubuntu18.04.2或debian10系统,arch64架构的rk3399,arm_第3张图片

(mini cheetah仿真教程)基于ubuntu18.04.2或debian10系统,arch64架构的rk3399,arm_第4张图片

(mini cheetah仿真教程)基于ubuntu18.04.2或debian10系统,arch64架构的rk3399,arm_第5张图片
(mini cheetah仿真教程)基于ubuntu18.04.2或debian10系统,arch64架构的rk3399,arm_第6张图片
当然,在本平台仿真界面速度是很慢的,不过通过这一步,下一步就是将mini cheetah 运行代码迁移到arm架构上,写写底层驱动,改改硬件,做做接口,这样就可以脱离upboard了吧。

https://zhuanlan.zhihu.com/p/80686651 (多谢大佬无私奉献)

你可能感兴趣的:(arm,qt,linux)