EPSILON环境配置和本地测试

news2024/9/21 0:49:12

文章目录

  • 一、环境配置
    • 1.1 拉取镜像构建容器
    • 1.2 在容器中安装常用的包
    • 1.3 安装依赖
    • 1.4 安装OOQP
      • 1.4.1 安装blas
      • 1.4.2 安装ma27
      • 1.4.3 安装OOQP
    • 1.5 安装Protobuf
  • 二、本地编译测试
    • 2.1 拉取源码并编译
    • 2.2 X11转发docker图形化界面
    • 2.3 测试一个小例子
  • 三、镜像

一、环境配置

  • 宿主机基础环境
    • 系统:ubuntu22.04
    • CPU: Intel® Core™ i9-14900K
    • GPU: NVIDIA GeForce RTX 4090
    • Docker version 26.0.0, build 2ae903e
    • Driver Version: 535.171.04
    • CUDA Version: 12.2

1.1 拉取镜像构建容器

拉取合适的ros版本镜像创建容器,这里拉取ros-melodic

docker run --gpus all --name EPSILON --net=host -v /home/kemove/dockerShareFile/EPSILON:/workspace/data -it ros:melodic-ros-base-bionic bash

在dockrhub上,ros官方提供的镜像有几种命名方式,这里简要说明说一下,方便大家拉取合适的镜像

  • melodic-ros-core-bionic:基于Ubuntu18.04(Bionic Beaver)的melodic版本
  • molodic-ros-core-stretch:基于Debian Stretch操作系统的melodic版本
  • ros-core和ros-base:ros-core仅包含ROS核心包(通信、节点管理等最基本的功能),适合最小化安装,用户根据需求手动安装其他包;ros-base在 ros-core 的基础上,包含了更多常用的ROS包,但不包含GUI工具,如rviz、gazebo等。适合需要非图形化的ROS功能开发。
  • melodic-robot-bionic:主要用于部署在机器人系统中,不需要图形化界面但包含机器人运行时所需的核心功能包,适合资源有限的环境(如嵌入式设备)或只需要核心机器人功能的系统
  • melodic-perception:适用于需要处理感知任务的系统,比如机器人视觉、环境建模、图像和视频数据处理等,适合在需要复杂传感器数据处理、识别和分析的应用场景中使用

1.2 在容器中安装常用的包

# 获取最新软件包
apt-get update
# 安装vim
apt-get install vim
# 安装ping命令
apt-get install iputils-ping
# 安装wget
apt-get install wget
# 安装ps
apt-get install procps
# 安装git
apt-get install git
# 安装pip
apt-get install python3-pip

一条命令安装

apt-get update &&
apt-get install vim iputils-ping wget procps git python3-pip

1.3 安装依赖

sudo apt-get install libgoogle-glog-dev libdw-dev libopenblas-dev gfortran
pip install empy pygame

1.4 安装OOQP

OOQP 是一个面向对象的 C++ 包,基于原对偶内点方法,用于解决凸二次规划问题 (QP)。它包含可“开箱即用”解决各种结构化 QP 的代码,包括一般稀疏 QP、支持向量机产生的 QP、Huber 回归问题以及具有边界约束的 QP。
OOQP 还可以用作一个框架,用于为新类型的结构化 QP 设计高效的求解器。其设计允许轻松替换线性代数模块,从而允许尝试不同的标准线性代数包。
EPSILON使用OOQP求解二次规划问题。

1.4.1 安装blas

#创建目录
mkdir /workspace/myLib
# 进入指定目录
cd /workspace/myLib
# 拉取压缩包
wget http://www.netlib.org/blas/blas.tgz
# 解压压缩包
tar zxf blas.tgz
# 进入解压后的路径
cd BLAS-3.12.0/
# 使用gfortran编译器编译fortran源码
gfortran -O3 -std=legacy -m64 -fno-second-underscore -fPIC -c *.f
# 创建静态库
ar r libfblas.a *.o
# 为静态库libfblas.a生成符号表
ranlib libfblas.a
# 删除编译产生的巍峨间
rm -rf *.o     
# 更新环境变量
vim ~/.bashrc
## 在文件最后一行添加
export BLAS=/workspace/myLib/BLAS-3.12.0/libfblas.a 
# 保存并退出编辑器,刷新环境变量
source ~/.bashrc

1.4.2 安装ma27

cd /workspace/myLib
git clone https://github.com/HITSZ-LeggedRobotics/ma27.git
cd ma27/ma27-1.0.0
# 执行配置脚本
bash ./configure CPPFLAGS="-fPIC" CFLAGS="-fPIC" FFLAGS="-fPIC"
# 将生成的可执行文件、库文件安装到系统目录
sudo make install

1.4.3 安装OOQP

  • 拉取ooqp源码
cd /workspace/myLib
git clone https://github.com/emgertz/OOQP.git
  • 将libma27.a文件复制到ooqp文件夹下
cd /workspace/myLib/ma27/ma27-1.0.0/src
cp -r libma27.a /workspace/myLib/OOQP/lib
  • 编译安装
cd /workspace/myLib/OOQP
./configure
make
sudo make install

1.5 安装Protobuf

  • 安装依赖
sudo apt update
sudo apt install autoconf automake libtool curl make g++ unzip
  • 拉取源码编译安装
# 进入指定目录
cd /workspace/myLib
# 下载压缩包
wget https://github.com/protocolbuffers/protobuf/releases/download/v21.12/protobuf-all-21.12.zip
# 进入目录
cd protobuf-21.12
# 配置编译选项
./configure
# 编译
make 
# 安装
sudo make install
# 更新动态库缓存
sudo ldconfig
  • 验证安装
protoc --version

二、本地编译测试

2.1 拉取源码并编译

  • 进入到root目录下,拉取EPSILON源码,这里我拉取的是我fork的仓库,方便后续修改存档,大家可以根据源项目的链接拉取
cd /root
mkdir ./epsilon_planner/src
cd ./epsilon_planner/src
git clone https://github.com/zf-account/EPSILON.git
  • 编译
catkin_make
  • 刷新环境变量
	source ~/epsilon_planner/devel/setup.bash

2.2 X11转发docker图形化界面

关于如何显示docker中的图形化界面,请参考我的这个博客:docker中图形化界面的转发
这里选用X11转发docker图形化界面,X11转发需要在构建容器时即挂载文件,因此我们先从之前构建的容器中提取镜像出来,再根据提取出来的镜像构建容器同时挂载目录

  • 从容器中提取镜像
docker commit EPSILON epsilon:v1.0
  • 在宿主机上新开终端,允许X11接受来自Docker容器的连接
xhost +local:docker
  • 运行Docker容器并设置DISPLAY变量,在运行容器时,需要将宿主机的X11 socket目录映射到容器内,并设置DISPLAY变量,指定宿主机的X显示服务。
docker run --name epsilon_planner --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all -v /etc/localtime:/etc/localtime:ro   -v /tmp/.X11-unix:/tmp/.X11-unix   -e DISPLAY=unix$DISPLAY   -e GDK_SCALE   -e GDK_DPI_SCALE --network="host" --privileged -v /dev/bus/usb:/dev/bus/usb -it epsilon_planner:v1.0 /bin/bash

2.3 测试一个小例子

  • 新建终端启动roscore
roscore
  • 新建终端启动rviz
roscd phy_simulator/rviz/
rviz -d phy_simulator_planning.rviz
  • 新建终端启动planner节点和AI节点
roslaunch planning_integrated test_ssc_with_eudm_ros.launch
roslaunch ai_agent_planner onlane_ai_agent.launch
  • 启动仿真器
roslaunch phy_simulator phy_simulator_planning.launch

此时,在宿主机上会显示仿真动画

三、镜像

上述环境配置过程均在docker中完成,配置完成后,我提取出了镜像上传到了dockerhub,大家可以跳过繁琐的环境配置过程,直接使用以下链接拉取我配置好的镜像使用,后续会更新对EPSILON代码的解读

  • 拉取镜像
docker pull aitotra/epsilon-planner:v1.0
  • 运行容器
docker run --name epsilon_planner --gpus all -e NVIDIA_DRIVER_CAPABILITIES=all -v /etc/localtime:/etc/localtime:ro   -v /tmp/.X11-unix:/tmp/.X11-unix   -e DISPLAY=unix$DISPLAY   -e GDK_SCALE   -e GDK_DPI_SCALE --network="host" --privileged -v /dev/bus/usb:/dev/bus/usb -it epsilon_planner:v1.0 /bin/bash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2150636.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3:$attrs实现组件通信

目录 一.性质 1.响应式 2.包含所有非prop属性 3.动态属性 二.作用 1.访问非prop属性 2.灵活性 3.组件重用 三.使用 1.爷爷组件 2.父亲组件 3.儿子组件 四.代码 1.爷爷组件代码 2.父亲组件代码 3.孙子组件代码 五.效果图 在Vue 3中,$attrs 是一个响…

string类的模拟实现以及oj题

前言 上篇博客实现了string类的begin()、end()、构造函数、析构函数、c_str、size()、clear()、capacity()、[ ]、reserve()、push_back、append()、insert()、。这篇博客实现剩下的一些重要功能。 string类的模拟实现 string.h #include<iostream> #include<stri…

稳了,搭建Docker国内源图文教程

大家好&#xff0c;之前分享了我的开源作品 Cloudflare Workers Proxy&#xff0c;它的作用是代理被屏蔽的地址&#xff0c;理论上支持代理任何被屏蔽的域名&#xff0c;使用方式也很简单&#xff0c;只需要设置环境变量 PROXY_HOSTNAME 为被屏蔽的域名&#xff0c;最后通过你的…

强化信息安全:密码机密钥管理的策略与实践

强化信息安全&#xff1a;密码机密钥管理的策略与实践 随着信息技术的飞速发展&#xff0c;信息安全已成为企业和社会关注的焦点。密码机作为加密通信和数据保护的关键设备&#xff0c;其密钥管理直接关系到整个信息系统的安全性。本文旨在探讨密码机密钥管理的策略与实践&…

如何根据协议请求去捕捉在个文件中发出去的

场景&#xff1a;随着业务越来越复杂&#xff0c;一个“触发”可能发出去N个协议&#xff0c;此时有某一个协议发生了报错&#xff0c;需要去找这个协议&#xff0c;去文件中走读逻辑&#xff0c;去找该协议&#xff0c;效率很慢&#xff0c;业务极其复杂的情况下&#xff0c;很…

渐变色代码主题你受得了吗

分享一个vscode编辑器的渐变色主题 效果图如下 vscode扩展搜索 gradient theme安装即可。

毕业设计选题:基于springboot+vue+uniapp的驾校报名小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…

二级C语言2023-9易错题

1 二叉树结点数计算&#xff1a; 一棵二叉树有10个度为1的结点&#xff0c;7个度为2的结点&#xff0c;则该二叉树共有____个结点。 解&#xff1a; 2 指针&#xff1a; 有以下程序 #inctude<stdio.h> #include<stdlib.h> main() { int *a&#xff0c;*b&…

OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【扩展组件】上

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 子系统开发内核 轻量系统内核&#xff08;LiteOS-M&#xff09; 轻量系统内核&#…

CSS01-语法规范、基础选择器

一、CSS语法规范 示例&#xff1a; 二、CSS的基础选择器 选择器(选择符)就是根据不同需求把不同的标签选出来这就是选择器的作用。 简单来说&#xff0c;就是选择标签用的。 选择器的分类&#xff1a; 1、标签选择器 2、类选择器&#xff08;开发最常用&#xff09; 长字符命名…

本地搭建我的世界服务器(JAVA)简单记录

网上参考教程挺多的&#xff0c;踩了不少坑&#xff0c;简单记录一下&#xff0c;我做的是一个私人服务器&#xff0c;就是和朋友3、4个人玩。 笨蛋 MC 开服教程 先放一个比较系统和完整的教程&#xff0c;萌新可用&#xff0c;这个教程很详细&#xff0c;我只是记录一下自己的…

相亲交友系统源码 连接你我,不再孤单

在这个数字时代&#xff0c;人们的生活方式已经发生了巨大的变化。随着工作压力增大和社会竞争激烈化&#xff0c;很多人发现自己很难有时间和机会去结识新的朋友&#xff0c;更不用说找到适合自己的伴侣了。相亲交友系统正是在这种背景下应运而生&#xff0c;它不仅简化了交友…

操作系统 | 学习笔记 | | 王道 | 5.2 设备独立软件

5.2 设备独立性软件 IO核心子系统 磁盘IO也属于IO调度问题 5.2.1 与设备无关的软件 与设备无关的软件是I/O系统的最高层软件&#xff0c;它的下层是设备驱动程序。 设备保护&#xff1a; 操作系统需要实现文件保护功能&#xff0c;不同的用户对各个文件有不同的访问权限&am…

BUUCTF-MISC-隐藏的钥匙

下载题目文件&#xff0c;获得了一张格式为jpg的路飞图片 按照习惯&#xff0c;首先使用十六进制编译器打开文件&#xff0c;这里我使用winhex打开文件 首先考虑有没有flag直接隐写在文件中&#xff0c;按照图示步骤查找flag字段 我们查到了flag&#xff0c;通过经验和图中base…

[Python]案例驱动最佳入门:股票分析 Python数据分析与可视化实战

在股票市场中&#xff0c;价格波动和投资决策紧密相连。通过数据分析&#xff0c;投资者可以识别市场趋势、价格波动背后的规律&#xff0c;并做出明智的投资决策。Python凭借其强大的数据处理和可视化功能&#xff0c;在金融市场分析中被广泛应用。本文将通过一个假设的股票市…

java踩坑

1.mybatis在idea可以正常运行&#xff0c;但是打jar包后&#xff0c;就报链接超时&#xff0c;可能是参数设置有问题&#xff0c;但是idea自动忽略了。 出问题的配置&#xff1a;&#xff08;圈出来的地方乱码了&#xff0c;idea有纠错能力&#xff0c;它自动调整为正确的&…

three.js shader 实现天空中白云

three.js shader 实现天空中白云 预览&#xff1a; https://threehub.cn/#/codeMirror?navigationThreeJS&classifyshader&idwhiteCloud 更多案例 可见 预览&#xff1a; https://threehub.cn import * as THREE from "three"; import { OrbitControls …

web基础—dvwa靶场(十二)JavaScript Attacks

JavaScript Attacks (前端攻击) 本章节中的攻击旨在帮助您了解如何在浏览器中使用 JavaScript 以及如何对其进行操作&#xff0c;攻击可以通过分析网络流量来实现&#xff0c;但这不是本章节的重点而且可能要困难得多。 只需提交单词 “success” 即可攻击成功&#xff0c;显然…

开石开放式耳机怎么样?南卡、开石、声阔开放式耳机测评

​作为一名多年的数码博主&#xff0c;我本人也是个耳机发烧友&#xff0c;我最近注意到数码圈特别是蓝牙耳机圈中&#xff0c;有一种耳机特别火&#xff0c;叫开放式耳机&#xff0c;这类耳机的佩戴舒适度是非常高的&#xff0c;这也激起了我对这类耳机的兴趣&#xff0c;因此…

感知笔记4:YOLO 3D 物体定位

如何在 ROS 中使用 YOLO 如何在 2D 中检测人和大象如何在 3D 中检测人和大象 有许多可用的深度学习库。您可能听说过&#xff1a;Keras、TensorFlow 和 Darknet。 在这里我们将使用 Darknet&#xff0c;因为它实现了 YOLOv3&#xff0c;这是一个对象检测模型。它非常快&…