从0入门自主空中机器人-3-【环境与常用软件安装】
关于本课程:
本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让它可以在未知的环境中自由避障穿行。
本次课程的重心主要落在自主空中机器人的搭建、代码部署及调试上,关于自主空中机器人的一些理论基础,例如动力学模型,路径搜索,轨迹规划,地图构建等内容。
课程视频
B站:【完结】从0入门自主空中机器人 | 开源 | 浙江大学Fast-Lab
深蓝学院:从0入门自主空中机器人
相关源码
GitHub:https://github.com/ZJU-FAST-Lab/Fast-Drone-250
Gitee:https://gitee.com/pn_code/Fast-Drone-250
1. 机载电脑环境安装
机载电脑推荐环境
系统:Ubuntu20.04 LST
ROS1:noetic
ROS2:foxy
说明:ROS1和ROS2可以安装在同一个系统,但需要进行一点配置,见【ROS1和ROS2的共存问题】
目前很多算法,包括本教程都是基于ROS1的版本,但ROS2对比ROS1优势很大,而且ROS1目前已经宣布将会在2023年停止更新,因此ROS2已经是大众所趋,建议学有余力的同学在学完ROS1后可以顺带连ROS2也一起学了
1.1 Ubuntu安装
视频教程如下:
- 镜像站地址: http://mirrors.aliyun.com/ubuntu-releases/20.04/ 下载 ubuntu-20.04.4 desktop-amd64.iso
- 烧录软件UltraISO官网:https://cn.ultraiso.net/
- 分区设置:
- **EFI系统分区(主分区)**512M
- **交换空间(逻辑分区)**16000M(内存大小的两倍)
- **挂载点/(主分区)**剩余所有容量
教程中推荐笔记本上也安装Ubuntu,但实际用下来并不推荐安装Ubuntu在笔记本上,很多软件Windows也有,而且笔记本的作用主要就是编辑并发送代码文件到机载电脑上,用VScode+MobaXterm+ssh+nomachine即可
1.2 ROS安装
推荐使用鱼香ros的一键安装脚本:一行代码搭建机器人开发环境(ROS/ROS2/ROSDEP)
wget http://fishros.com/install -O fishros && . fishros
开源地址:https://github.com/fishros/install
问题汇总:一键安装 | 鱼香ROS (fishros.org.cn)更多ROS的资源及教程参考:ROS资源汇总 | MGodmonkeyの世界
2. 必备软件安装
2.1 realsense驱动安装(RGB-D相机)
参考:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md
添加秘钥
sudo apt update
sudo apt-get install apt-transport-https
sudo mkdir -p /etc/apt/keyrings
curl -sSf https://librealsense.intel.com/Debian/librealsense.pgp | sudo tee /etc/apt/keyrings/librealsense.pgp > /dev/null
添加安装源
echo "deb [signed-by=/etc/apt/keyrings/librealsense.pgp] https://librealsense.intel.com/Debian/apt-repo `lsb_release -cs` main" | \
sudo tee /etc/apt/sources.list.d/librealsense.list
sudo apt-get update
以下是README.pdf中的方法
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDEsudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
- 安装包
# 下面两个必装
sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils
sudo apt-get install ros-noetic-realsense2-camera
# 下面两个可选,主要是开发调试用
sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg
- 测试
realsense-viewer
通过realsense-viewer
的指令来检查深度相机是否正确安装并显示
2.2 MAVROS
- 介绍
MAVROS相当于PX4飞控中的MAVLINK模块。MAVROS将话题转为MAVLINK格式消息发送给飞控,飞控中的MAVLINK模块将MAVLINK格式消息转化为uORB消息给PX4各模块间传递消息使用,也可以反过来从uORB消息一直到ROS话题。
代码示例看MAVROS Offboard control example就好了,讲得很清楚。
- 安装
sudo apt-get install ros-noetic-mavros # 这里的noetic是ros的版本,其他版本自行更换名称
cd /opt/ros/noetic/lib/mavros
sudo ./install_geographiclib_datasets.sh
2.3 git、gcc、g++、python与make
sudo apt install git # git
sudo apt install build-essential # gcc、g++
sudo apt install make # make
sudo apt install python3 # python3
检查版本
git --version
gcc --version
g++ --version
make --version
python3 --version
2.4 ceres、glog与ddyanmic-reconfigure
-
介绍
-
ceres是什么
Ceres Solver是一个开源**C++**库,用于建模和解决大型复杂的优化问题。它可以用于解决具有边界约束和一般无约束优化问题的非线性最小二乘问题。它是一个成熟,功能丰富且高性能的库。Ceres Solver是谷歌2010就开始用于解决优化问题的C++库,2014年开源。在Google地图,Tango项目,以及著名的SLAM系统OKVIS和Cartographer的优化模块中均使用了Ceres Solver。 -
glog是什么
glog是google出品的c++日志库,提供了很多非常不错的功能,例如日志分等级打印、条件打印、日志格式化、日志文件滚动大小等。
-
ddynamic-reconfigure是什么
ddynamic-reconfigure是一个ROS软件包,它提供了一个动态重新配置的框架,可以在运行时修改ROS节点的参数。它可以帮助用户在
不停止节点的情况下,实时地调整节点的参数,从而优化节点的性能。
-
-
下载并解压
3rd_party.zip
wget https://gitee.com/pn_code/Fast-Drone-250/blob/master/3rd_party.zip
unzip 3rd_party.zip
- 编译安装
cd ./glog
sudo chmod 777 ./autogen.sh
sudo chmod 777 ./configure
sudo ./autogen.sh && sudo ./configure && sudo make install
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
cd ../ceres-solver-2.0.0rc1
mkdir build
cd build
cmake ..
sudo make -j4
sudo make install
sudo apt-get install ros-noetic-ddynamic-reconfigure
这里的
libcxsparse3
如果有错误,参考下面这篇博客【安装Ceres相关依赖时libcxsparse3.1.2报错_安装ceres相关依赖项时显示找不到_振华OPPO的博客-CSDN博客】
2.4 ego-plannner
参考:ZJU-FAST-Lab/ego-planner (gitee.com)的**Readme.md**中的说明
- 安装uav_simulator需要的Armadillo库
sudo apt-get install libarmadillo-dev
-
下载源码
From github
git clone https://github.com/ZJU-FAST-Lab/ego-planner.git
Or from gitee
git clone https://gitee.com/iszhouxin/ego-planner.git
- 编译源码
cd ego-planner
catkin_make -DCMAKE_BUILD_TYPE=Release
- 执行
在ego-planner
文件夹的一个终端中,打开rviz进行可视化和交互
source devel/setup.bash
roslaunch ego_planner rviz.launch
在ego-planner
文件夹的另一个终端中,打开仿真
source devel/setup.bash
roslaunch ego_planner run_in_sim.launch
3. 常用软件安装
- vscode
- 前往【vscode官网】下载Linux x64 deb包
- 使用
sudo apt install ****.deb
进行安装
- Terminator
- 多窗口命令行终端
- 使用
sudo apt install terminator
进行安装
- Plotjuggler
- 可视化时间时序的工具
- 使用
sudo apt install ros-noetic-plotjuggler ros-noetic-plotjuggler-ros
进行安装 - 使用
rosrun plotjuggler plotjuggler
进行查看
- Net-tools
- 网络工具包,用于查看linux的IP地址
- 使用
sudo apt install net-tools
进行安装 - 使用
ifconfig
进行查看IP地址
- ssh
- 使用
sudo apt install openssh-server
进行安装 - 使用ssh终端等工具连接上机载电脑
- 使用
以上工具的使用方式请自行前往度娘搜索
以上工具的阿里云盘下载地址:【下载入口】
{% pdf https://mybog.s3.bitiful.net/ros/word/readme.pdf %}
相关文章:
从0入门自主空中机器人-3-【环境与常用软件安装】
关于本课程: 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程,包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程,带你从0开始,组装属于自己的自主无人机,并让…...
electron node-api addon开发
解决方案入口 拷贝日志以及json等第三方源码 增加包含目录 编写接口 默认模板已经有一个回调函数了 照葫芦画瓢就行 其中几个重要的点要注意 1.参数传入 比如如下的例子: 头文件定义: public:下增加 Napi::Value StartAnswer (const Napi::Callb…...
如何在嵌入式系统或计算机系统中验证boot程序
在嵌入式系统或计算机系统中,验证boot程序(引导程序)的正确性至关重要,因为它负责初始化系统硬件、加载操作系统内核,并设置系统环境。以下是一些常用的验证boot程序的方法: 一、硬件验证 示波器与逻辑分…...
scala基础学习_运算符
文章目录 scala运算符算术运算符关系运算符逻辑运算符位运算符其他运算符赋值运算符 scala运算符 在 Scala 中,运算符通常被定义为方法。这意味着你可以将运算符视为对象上的方法调用。以下是一些常用的运算符及其对应的操作: 算术运算符 :…...

【ANGULAR网站开发】初始环境搭建
1. 初始化angular项目 1.1 创建angular项目 需要安装npm和nodejs,这边不在重新安装 直接安装最新版本的angular npm install -g angular/cli安装指定大版本的angular npm install -g angular/cli181.2 启动angular 使用idea启动 控制台启动 ng serve启动成功…...

【Java】面试题 并发安全 (2)
文章目录 可重入锁(ReentrantLock)知识总结1. 可重入锁概念与特点2. 基本语法与使用注意事项3. 底层实现原理4. 面试回答要点 synchronized与lock的区别死锁相关面试题讲解死锁产生的四个条件ConcurrentHashMap2. JDK1.7的ConcurrentHashMap结构添加数据…...

springboot启动不了 因一个spring-boot-starter-web底下的tomcat-embed-core依赖丢失
这个包丢失了 启动不了 起因是pom中加入了 <tomcat.version></tomcat.version>版本指定,然后idea自动编译后,包丢了,删除这个配置后再也找不回来, 这个包正常在 <dependency><groupId>org.springframe…...

React 组件的通信方式
在 React 应用开发中,组件之间的通信是构建复杂用户界面和交互逻辑的关键。正确地实现组件通信能够让我们的应用更加灵活和易于维护。以下是几种常见的 React组件通信方式。 一、父子组件通信 1. 通过 props 传递数据(父组件向子组件传递数据࿰…...

WAV文件双轨PCM格式详细说明及C语言解析示例
WAV文件双轨PCM格式详细说明及C语言解析示例 一、WAV文件双轨PCM格式详细说明1. WAV文件基本结构2. PCM编码方式3. 双轨PCM格式详细说明二、C语言解析WAV文件的代码示例代码说明一、WAV文件双轨PCM格式详细说明 WAV文件是一种用于存储未压缩音频数据的文件格式,广泛应用于音频…...
【ES6复习笔记】数值扩展(16)
介绍 在 JavaScript 中,数值扩展提供了一些额外的功能,使得处理数值变得更加方便。本教程将介绍一些常用的数值扩展方法和属性。 1. Number.EPSILON Number.EPSILON 是 JavaScript 表示的最小精度。它的值接近于 2.2204460492503130808472633361816E-…...

百度热力图数据日期如何选择
目录 1、看日历2、看天气 根据研究内容定,一般如果研究城市活力的话,通常会写“非重大节假日,非重大活动,非极端天气等”。南方晴天不多,有小雨或者中雨都可认为没有影响,要不然在南方很难找到完全一周没有…...
Vue.js 高级组件开发:设计模式与实践
Vue.js 高级组件开发:设计模式与实践 引言一、组合式 API 与动态依赖注入1. 基于 provide/inject 的动态依赖2. 动态依赖注入与懒加载 二、动态渲染与自定义渲染函数1. 使用 Render 函数动态生成内容2. 自定义 vnode 操作 三、复杂场景下的动态表单生成与验证四、高…...

《一文读懂卷积网络CNN:原理、模型与应用全解析》
《一文读懂卷积网络CNN:原理、模型与应用全解析》 一、CNN 基本原理大揭秘(一)从人类视觉到 CNN 灵感(二)核心组件详解 二、经典 CNN 模型巡礼(一)LeNet-5:开山鼻祖(二&a…...

MONI后台管理系统-数据敏感字段存储加密
前言: 在我们数据库中,存在很多的敏感数据,如用户表中,存在用户电话、身份证号、邮箱等属于用户的敏感信息,我们通常在存入数据库后,将其进行加密存储,以此来保证数据安全性。 …...
熟悉各类游戏设计模式的用途与限制,如 factory、strategy、mvc、object pool 等
良好的系统分析与设计能力要求开发者熟悉并正确运用各种设计模式来解决特定问题。设计模式是一种针对特定问题的通用解决方案,可提高代码的可复用性、可维护性和可扩展性。以下是对一些常见游戏设计模式的详细分析,包括其用途、限制和代码示例。 一、工厂…...

【RabbitMQ高级篇】消息可靠性问题(1)
目录 1.消息可靠性 1.1.生产者消息确认 1.1.1.修改配置 1.1.2.定义Return回调 1.1.3.定义ConfirmCallback 1.2.消息持久化 1.2.1.交换机持久化 1.2.2.队列持久化 1.2.3.消息持久化 1.3.消费者消息确认 1.3.1.演示none模式 1.3.2.演示auto模式 1.4.消费失败重试机制…...

ASP.NET |日常开发中常见问题归纳讲解
ASP.NET |日常开发中常见问题归纳讲解 前言一、性能问题1.1 数据库访问性能1.2 视图状态(在ASP.NET Web Forms 中) 二、安全问题2.1 SQL 注入2.2 跨站脚本攻击(XSS) 三、状态管理问题3.1 会话状态(Session …...
【【深入浅出TinyRisc-v】】
深入浅出TinyRisc-v 本代码参考于 https://gitee.com/liangkangnan/tinyriscv 自己理解之后又重新写了一遍 tinyriscv.v // 涓嬮潰鏄鏁翠釜top妯″潡鐨勪功鍐? module tinyriscv(input clk ,input rst_n …...

常见的限流算法
常见的限流算法 限流的定义固定窗口算法滑动窗口算法漏桶算法(推荐)令牌桶算法(推荐)限流粒度本地限流(单机限流)分布式限流(多机限流)分布式限流的实现 限流的定义 限流,也称流量控制。是指系统…...
【Leetcode 每日一题】3159. 查询数组中元素的出现位置
问题背景 给你一个整数数组 n u m s nums nums,一个整数数组 q u e r i e s queries queries 和一个整数 x x x。 对于每个查询 q u e r i e s [ i ] queries[i] queries[i],你需要找到 n u m s nums nums 中第 q u e r i e s [ i ] queries[i] q…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...