Arm架构AI环境配置

内容纲要

机器人开发环境搭建

第1步:安装基本环境

apt install libcairo2-dev libpixman-1-dev libgoogle-glog-dev libgflags-dev libsuitesparse-dev libatlas-test libatlas-base-dev liblapack-dev libblas-dev libboost-dev libmetis-dev

第2步:安装说明文档

apt install libcairo2-doc libgoogle-glog-doc libgflags-doc libsuitesparse-doc libatlas-doc liblapack-doc libboost-doc

第3步:安装其他可能使用的软件

apt install libatlas-cpp-0.6-3 libatlas-cpp-0.6-dev libatlas-cpp-0.6-tools

abseil

Abseil 由 Google 的基础 C ++ 和 Python 代码库组成,包括一些正支撑着如 gRPC、Protobuf 和 #TensorFlow 等开源项目并一起“成长”的库。目前已开源 C++ 部分,Python 部分将在后续开放。

Abseil 目前开放的 C++ 标准库的扩充库,是从 Google 内部 C ++ 代码库抽取出来的基础库的合集。#这些库在 Google 内部经过广泛的测试和生产使用,是 Google 大量运行内容的基石。

安装步骤:

git clone https://github.com/abseil/abseil-cpp #下载
cd abseil-cpp   #切换目录
mkdir bulid     #用于构建
mkdir install   #用于安装
cd build  #切换目录
#安装路径
cmake .. -D CMAKE_INSTALL_PREFIX=/opt/abseil-cpp/install/ 
#编译
make
#安装
make install

安装头文件,头文件就在/opt/abseil-cpp/install/目录中,只要将文件夹include中的absl文件夹复制到/usr/include目录即可

cp -R /opt/abseil-cpp/install/include/absl/ /usr/local/include/

安装静态库文件,默认产生了一大堆静态库文件,使用不方便,所以我们将所有的静态库打包成一个libabsl.a静态库

find ./ -name "*.o" | xargs ar cr libabsl.a

进入刚才创建的build目录,执行上面的命令,会生成一个静态库libabsl.a

cp /opt/abseil-cpp/build/libabsl.a /usr/lib

将生成的库复制到系统路径,这样abseil库就安装好了。

测试代码

#include <iostream>
#include <absl/strings/string_view.h>

using namespace std;

int main()
{
    absl::string_view sv = "hello world";

    cout<<sv<<endl;

    return 0;
}

文件名abseil.cpp

g++ -o abseil hello.cpp -labsl

./abseil 

hello world

eigen3.3.7

安装:

apt install libeigen3-dev  libeigen3-doc 

查看版本:

cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h

测试程序 testEigen3

#include <iostream>
#include <Eigen/Dense>
using namespace Eigen;

int main()
{
    Matrix2d a;
    a << 1, 2,
    3, 4;

    MatrixXd b(2,2);
    b << 2, 3,
    1, 4;

    std::cout << "a + b =\n" << a + b << std::endl;
    std::cout << "a - b =\n" << a - b << std::endl;
    std::cout << "Doing a += b;" << std::endl;
    a += b;
    std::cout << "Now a =\n" << a << std::endl;

    Vector3d v(1,2,3);
    Vector3d w(1,0,0);

    std::cout << "-v + w - v =\n" << -v + w - v << std::endl;

    return 0; 
}

执行复制命令,将Eigen文件夹及其内容放在/usr/include

sudo cp -r /usr/include/eigen3/Eigen /usr/include

需要执行上面命令,否则下面编译会找不到头文件,就可以如下面使用头文件 include <Eigen/Dense> 编译

g++ -o eigen3_test1 eigen3_test1.cpp

lua5.2.4

安装:

apt install lua5.2 liblua5.2-0 liblua5.2-0-dbg liblua5.2-dev  lua5.2-doc

测试:

lua -v
lua hellolua.lua

protoc3.17.0

google protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++、C#、Go等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。

#基本环境安装
apt-get install autoconf  automake  libtool curl make  g++  unzip libffi-dev -y

开始编译

#基本环境安装
#执行自动安装脚本
./autogen.sh
#安装路径
./configure --prefix=/usr/local/protobuf
#编译
make
#检查
make check
#安装
make install

(1) vim /root/.bashrc,添加

export PATH=$PATH:/usr/local/protobuf/bin/
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

保存执行,source /root/.bashrc。同时在~/.bashrc中添加上面两行代码,否则会出现登录用户找不到protoc命令。

(2) 配置动态链接库,vim /etc/ld.so.conf,在文件中添加/usr/local/protobuf/lib(注意: 在新行处添加),然后执行命令:

ldconfig

查看版本

protoc --version

addressbook.proto文件

protoc --version
protoc --cpp_out=/home/rostest/protobuf-3.17.0 addressbook.proto

g++ addressbook.pb.cc write.cpp -o write `pkg-config --cflags --libs protobuf`
g++ addressbook.pb.cc read.cpp -o read `pkg-config --cflags --libs protobuf`
./write file
./read file

编译

protoc --cpp_out=/home/rostest/protobuf-3.17.0 addressbook.proto

write.cpp文件,向文件中写入AddressBook信息,该文件是二进制的

  #include <iostream>
  #include <fstream>
  #include <string>
  #include "addressbook.pb.h"

  using namespace std;

  void PromptForAddress(tutorial::Persion *persion) {
      cout << "Enter persion name:" << endl;
     string name;
     cin >> name;
     persion->set_name(name);

     int age;
     cin >> age;
     persion->set_age(age);
 }

 int main(int argc, char **argv) {
     //GOOGLE_PROTOBUF_VERIFY_VERSION;

     if (argc != 2) {
         cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl;
         return -1;
     }

     tutorial::AddressBook address_book;

     {
         fstream input(argv[1], ios::in | ios::binary);
         if (!input) {
             cout << argv[1] << ": File not found. Creating a new file." << endl;
         }
         else if (!address_book.ParseFromIstream(&input)) {
             cerr << "Filed to parse address book." << endl;
             return -1;
         }
     }

     // Add an address
     PromptForAddress(address_book.add_persion());

     {
         fstream output(argv[1], ios::out | ios::trunc | ios::binary);
         if (!address_book.SerializeToOstream(&output)) {
             cerr << "Failed to write address book." << endl;
             return -1;
         }
    }

     // Optional: Delete all global objects allocated by libprotobuf.
     //google::protobuf::ShutdownProtobufLibrary();

     return 0;

read.cpp文件,从文件中读出AddressBook信息并打印

#include <iostream>
#include <fstream>
#include <string>
#include "addressbook.pb.h"

using namespace std;

void ListPeople(const tutorial::AddressBook& address_book) {
    for (int i = 0; i < address_book.persion_size(); i++) {
        const tutorial::Persion& persion = address_book.persion(i);

        cout << persion.name() << " " << persion.age() << endl;
    }
}

int main(int argc, char **argv) {
    //GOOGLE_PROTOBUF_VERIFY_VERSION;

    if (argc != 2) {
        cerr << "Usage: " << argv[0] << " ADDRESS_BOOL_FILE" << endl;
        return -1;
    }

    tutorial::AddressBook address_book;

    {
        fstream input(argv[1], ios::in | ios::binary);
        if (!address_book.ParseFromIstream(&input)) {
            cerr << "Filed to parse address book." << endl;
            return -1;
        }
        input.close();
    }

    ListPeople(address_book);

    // Optional: Delete all global objects allocated by libprotobuf.
    //google::protobuf::ShutdownProtobufLibrary();

    return 0;
}

最后:

g++ addressbook.pb.cc write.cpp -o write `pkg-config --cflags --libs protobuf`
g++ addressbook.pb.cc read.cpp -o read `pkg-config --cflags --libs protobuf`
./write file
./read file

ceres-solver-2.0.0

在github中下载

git clone https://ceres-solver.googlesource.com/ceres-solver

安装

#解压
unzip ceres-solver-2.0.0.zip
#新建目录
mkdir ceres-bin
#切换目录
cd ceres-bin
#指定安装路径
cmake .. -D CMAKE_INSTALL_PREFIX=/opt/ceres-solver-2.0.0/install/
#编译
make
#检查
make check
#安装
make install 
#测试
cd /usr/local/ceres-solver-2.0.0/ceres-bin
bin/simple_bundle_adjuster ../data/problem-16-22106-pre.txt

opencv-python 4.5.1

spdlog1.8.5

spdlog是一个快速的C++日志库,能够兼容C++11,具备快速、无需依赖第三方库、支持多线程、多平台的优良特性!

g2o

g2o图优化则是将优化问题和图论相结合,最典型的作用就是将待优化问题通过测量的数据建立最小二乘并将该最小二乘问题通过图论中的边的顶点表示出来,之后调用g2o库通过求解对应的图来实现对最小二乘问题的求解以达到优化的目的。

Ipopt 3

Ipopt是一款用来计算大规模非线性优化的开源软件包

PCL 点云

实现了大量点云相关的通用算法和高效数据结构,涉及到点云获取、滤波、分割、配准、检索、特征提取、识别、追踪、曲面重建、可视化等。
如果说OpenCV是2D信息获取与处理的结晶,那么PCL就在3D信息获取与处理上具有同等地位

ros-noetic-desktop

ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面ROS相当于一种“机器人框架(robot frameworks)”类似的“机器人框架”有:Player,YARP,Orocos,CARMEN,Orca,MOOS和 Microsoft Robotics Studio。

GYM

Gym是一个开发和比较强化学习算法的工具包。更多介绍参考官网:https://gym.openai.com/

智能家居Home Assistant

家庭助理为家庭控制和家庭自动化提供了一个平台。家庭助理不仅仅是一个应用程序:它是一个嵌入式系统,可以提供像其他消费者现成产品一样的体验:入职、配置和更新都是通过一个易于使用的界面完成的。

sdkman

管理sdk工具

Antlr4

Antlr4 是一款强大的语法生成器工具,可用于读取、处理、执行和翻译结构化的文本或二进制文件。基本上是当前 Java 语言中使用最为广泛的语法生成器工具。Twitter搜索使用ANTLR进行语法分析,每天处理超过20亿次查询;Hadoop生态系统中的Hive、Pig、数据仓库和分析系统所使用的语言都用到了ANTLR;Lex Machina将ANTLR用于分析法律文本;Oracle公司在SQL开发者IDE和迁移工具中使用了ANTLR;NetBeans公司的IDE使用ANTLR来解析C++;

在安装antlr4之前需要先安装jdk8,先参考jdk8安装配置文件

更多介绍参考官网:https://www.antlr.org/

FTP

ZSH

C++ OpenGL

python3-opengl

这些都去官网按照步骤安装即可,不再赘述。

code enjoy! 🐾🐾🐾🐾🐾🐾🐾🐾🐌🐝

作者:indeex

链接:https://indeex.club

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


发表评论

您的电子邮箱地址不会被公开。