GAAS 无人机自动驾驶学习(01-使用机载电脑,通过OFFBOARD模式进行控制飞行)

2023-05-16

原文网址:https://gaas.gitbook.io/guide/wu-ren-ji-zi-dong-jia-shi-xi-lie-offboard-kong-zhi-yi-ji-gazebo-fang-zhen

介绍:无人机可以使用机载电脑,通过OFFBOARD模式进行控制飞行。控制过程主要通过一连串的MAVROS命令来实现,而MAVROS是MAVLink的一层高级封装,从而免去了我们通过MAVLink控制无人机的繁琐。通过MAVROS,我们可以轻松实现很多功能,例如:起飞,降落,指点飞行,朝向控制等等。

 

第一节:如何通过机载电脑,在模拟器中控制无人机飞行。

1. 源码编译

!!!!!特别提示:第一节这里我在自己的Ubuntu16.04系统上编译PIX4的时候,也就是下面的“004.PX4 Firmware”这一步,提示说部分文件的编译文件过旧。分析原因可能是原先编译PIX4 Firmware使用的gazebo版本较低,现在替换成gazebo后编译需要匹配。。。。balabala其实这里的原因我至今没搞清楚,也很好奇制作镜像的人是怎么编译的,其实也在技术交流群里问了,但是没有得到答案。好吧,那就应了那句话,不要重复造轮子,就直接上镜像吧。

链接:https://pan.baidu.com/s/1rURSO8Df4PwNe6wsl3p-eA
提取码:nfey 

 

这里我把下载的镜像iso以及用到的刻录工具Rufus 以及最重要的一个神器百度云盘的PJ下载(4.7G的文件十几分钟搞定)。都放到了我的分享链接内,大家自取。最后再唠叨一句,刻录镜像的时候U盘引导如果装的双系统一定要设置优先U盘启动,如果刻录不成功,多试几次。

最最后!!!如果直接上镜像,下面的部分就不用看了,可直接跳转到 “006. 控制无人机”,我是直接考皮的原文网址的内容。

//------------------------------------------------------------分割-------------------------------------------------------------------//

001.环境配置:Ubuntu 16.04 LTS 以及ROS-Kinetic环境下测试通过// 可以选择逐个安装依赖包,也可以直接使用Docker。这里使用前者。

基本依赖项,为了使用所有脚本的功能,请先按照如下安装依赖项:

pip install \
	pandas \
	jinja2 \
	pyserial \
	cerberus \
	pyulog \
	numpy \
	toml \
	pyquaternion
sudo apt install -y \
	ninja-build \
	exiftool \
	python-argparse \
	python-empy \
	python-toml \
	python-numpy \
	python-yaml \
	python-dev \
	python-pip \
	ninja-build \
	protobuf-compiler \
	libeigen3-dev \
	genromfs 

这里可能会有报错:

gzip: stdout: No space left on device
E: mkinitramfs failure find 141 cpio 141 gzip 1
update-initramfs: failed for /boot/initrd.img-4.15.0-50-generic with 1.
run-parts: /etc/kernel/postinst.d/initramfs-tools exited with return code 1
dpkg: error processing package linux-image-4.15.0-50-generic (--configure):
 subprocess installed post-installation script returned error exit status 1
Errors were encountered while processing:
 initramfs-tools
 linux-image-4.15.0-47-generic
 linux-image-4.15.0-50-generic
E: Sub-process /usr/bin/dpkg returned an error code (1)

原因是第一句话,表示boot空间不足,可以卸载旧的内核腾一下空间,参考这篇博客

https://blog.csdn.net/Tong_jy/article/details/79730247

  • Linux 中 /boot 是存放系统启动文件的地方,安装 ubuntu 时单独分区给 200M 足够,但是系统内核更新后,老的内核依然保存在 /boot 分区内,几次升级后,就会提示 /boot 空间不足。
  • 我们只要删掉老的内核,将空间释放出来就可以了。
  • 先查看已安装的内核版本
dpkg --get-selections |grep linux
#能看到已经安装的版本,其中带image的一般就是旧版本
#deinstall代表是已经删除的旧版本
#install是还没有删除的旧版本内核​​

uname -r
#查看当前内核版本

sudo apt-get remove linux-image-xxxx
#删除旧版本内核,xxx为内核版本号

 

002.ROS-Kinetic

ROS (Robot Operating System) 是一个在机器人领域应用非常广泛的框架,它包含了很多有用的库以及工具,我们在本课以及接下来的所有课程中都会使用ROS Kinetic,首先,让我们安装ROS Kinetic。

安装 ROS Kinetic,请按照如下步骤:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-kinetic-desktop-full
sudo rosdep init
rosdep update
echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
sudo apt install python-rosinstall python-catkin-tools python-rosinstall-generator python-wstool build-essential

# install ros-gazebo plugins
sudo apt install ros-kinetic-gazebo-*

注:浏览 http://wiki.ros.org/kinetic/Installation/Ubuntu 以便了解更多信息

完成上列步骤后,你可以通过下面的命令来测试是否成功安装

roscore

显示:

chen@chen-Inspiron-M5110:~$ roscore
... logging to /home/chen/.ros/log/2c5313f6-8119-11e9-a061-24b6fd2c7abd/roslaunch-chen-Inspiron-M5110-1553.log
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://chen-Inspiron-M5110:42875/
ros_comm version 1.12.14


SUMMARY
========

PARAMETERS
 * /rosdistro: kinetic
 * /rosversion: 1.12.14

NODES

auto-starting new master
process[master]: started with pid [1568]
ROS_MASTER_URI=http://chen-Inspiron-M5110:11311/

setting /run_id to 2c5313f6-8119-11e9-a061-24b6fd2c7abd
process[rosout-1]: started with pid [1581]
started core service [/rosout]

如果 ROS 安装成功,你可以看到以上结果。

接下来,需要生成catkin工作空间,你所有的基于ROS的库都可以存放在此。

mkdir -p ~/catkin_ws/src

 

003.MAVROS

如之前所说,MAVROS是一层MAVLink与ROS通信的封装,旨在方便无人机与机载电脑通信。若要安装,你可以选择通过apt安装,或者从源码编译。请参考如下步骤:

# 你可以使用下列任何一种方法

# 方法 1
sudo apt-get install ros-kinetic-mavros ros-kinetic-mavros-extras

# 安装geographic lib :
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo chmod a+x install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh


# 方法 2
cd ~/catkin_ws
catkin init && wstool init src
rosinstall_generator --rosdistro kinetic mavlink | tee /tmp/mavros.rosinstall
rosinstall_generator --upstream mavros | tee -a /tmp/mavros.rosinstall
wstool merge -t src /tmp/mavros.rosinstall
wstool update -t src -j4
rosdep install --from-paths src --ignore-src -y

# 安装geographic lib :
sudo ./src/mavros/mavros/scripts/install_geographiclib_datasets.sh
sudo apt install ros-kinetic-catkin python-catkin-tools
catkin build

注:若要了解更多关于Mavros信息,请参考如下网址:
https://github.com/mavlink/mavros/blob/master/mavros/README.md#installation

采用的第一种方法亲测安装没有报错,最后一条指令./install_geographiclib_datasets.sh提示需要root权限,前加sudo就可以了。

 

004.PX4 Firmware (自注:编译posix_sitl_default gazebo不能通过,有时间再详细找原因)

我们会在此课以及接下来的课程中使用 PX4 v1.8.0固件。

cd ~/catkin_ws/src

# 请保证网络连接正常,此步骤耗时较长
git clone https://github.com/PX4/Firmware.git
cd Firmware
git checkout v1.8.0
make posix_sitl_default gazebo

若以上步骤通过,此时会弹出Gazebo模拟器窗口,你会看到一架无人机出现在环境中,现在将窗口关闭即可。

修改环境变量,这样每次打开新的终端都可以保持环境变量一致:

# Use your favorite editor, we will be using gedit
# NOTE: you will need to use ROOT to edit bashrc
sudo gedit ~/.bashrc

# 在bashrc中,拷贝以下内容到bashrc尾端
source ~/catkin_ws/devel/setup.bash # 如果通过第一种方式安装了MAVROS,忽略此步。
source ~/catkin_ws/src/Firmware/Tools/setup_gazebo.bash ~/catkin_ws/src/Firmware/ ~/catkin_ws/src/Firmware/build/posix_sitl_default
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/src/Firmware
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/src/Firmware/Tools/sitl_gazebo

打开一个新终端,输入:

roslaunch px4 posix_sitl.launch

或者你可以直接输入:

roslaunch px4 mavros_posix_sitl.launch

一个如下图所示的窗口会弹出

                                                              Figure 1, Gazebo and PX4 simulation in empty world

在一个新终端,输入

rostopic echo /mavros/state

你可以看到:

header: 
  seq: 1
  stamp: 
    secs: 730
    nsecs: 280000000
  frame_id: ''
connected: True
armed: False
guided: False
mode: "MANUAL"
system_status: 3
---

如果你看到上面的connected为True,那就代表你的Gazebo仿真环境配置成功,同时你的MAVROS通信也成功设置。

005. OFFBOARD 控制

首先,将仿真需要的文件获取到本地环境,文件包括无人机模型,世界模型以及其他一些你会用到的内容。此课程中我们将只关注基于python的MAVROS例子,如果你感兴趣的话可以试试GAAS提供的其他功能。

git clone git@github.com:generalized-intelligence/GAAS.git

你可以看到四个文件夹:

  • demo: 本课用到的所有内容都可以在此文件夹内找到;

  • hardware: 制作无人机所需的硬件资料可以在此文件夹找到;

  • simulator: 包含仿真用到的模型等;

  • software: 包含了例如ObstacleMap, SLAM,Local 以及Global path planner等内容。

你可以在各个文件夹内的README.md 中了解更多信息。

现在,将模型文件所在地址更新到环境变量中:

echo "export GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:(GAAS_PATH)/simulator/models" >> ~/.bashrc
我的环境下:
 echo "expert GAZEBO_MODEL_PATH=${GAZEBO_MODEL_PATH}:/home/gaas_folder/GAAS//simulator/models" >> ~/.bashrc

将模型以及配置文件拷贝到对应文件夹中:

cp -r (GAAS_PATH)/simulator/models/* ~/catkin_ws/src/Firmware/Tools/sitl_gazebo/models/
cp -r (GAAS_PATH)/simulator/worlds/* ~/catkin_ws/src/Firmware/Tools/sitl_gazebo/worlds/
cp -r (GAAS_PATH)/simulator/posix-config/* ~/catkin_ws/src/Firmware/posix-configs/SITL/init/ekf2/

我的环境下:
cp -r /home/gaas_folder/GAAS/simulator/models/* ~/catkin_ws/src/Firmware/Tools/sitl_gazebo/models/
cp -r /home/gaas_folder/GAAS/simulator/worlds/* ~/catkin_ws/src/Firmware/Tools/sitl_gazebo/worlds/
cp -r /home/gaas_folder/GAAS/simulator/posix-config/* ~/catkin_ws/src/Firmware/posix-configs/SITL/init/ekf2/

006. 控制无人机

 

!!!如果用的是镜像安装,这里可以直接忽略以上步骤。

如果你使用的是Docker(见下),执行:

cd /root/gi/px4/Firmware && make posix_sitl_default gazebo

 

接下来,无论你通过哪种方式配置的环境,都需要用同样的命令启动仿真环境,打开一个终端,输入:

roslaunch px4 mavros_posix_sitl.launch 

同时,不要忘记检查MAVROS连接情况:

# 请确保 connected 结果为 True
rostopic echo /mavros/state

如果Gazebo仿真环境成功启动且MAVROS连接成功,在一个新的终端,改变路径到GAAS下的DEMO文件夹,执行python脚本:

# 如果你使用的是Docker
cd /root/gi/GAAS/demo/tutorial_1/1_px4_mavros_offboard_controller
python px4_mavros_run.py

# 如果你使用第一种安装方法
cd (GAAS_PATH)/demo/tutorial_1/1_px4_mavros_offboard_controller
python px4_mavros_run.py
你可以看到一个无人机逐渐起飞到3米高并悬停在此。在另外一个终端中:
python commander.py

你可以看到无人机按照下面的顺序飞行:

  1.向右飞一米;

  2.逆时针旋转90度;

  3.降落。

或者你可以打开一个新的终端,使用提供的API来控制无人机:

# in folder '1_px4_mavros_offboard_controller'
python

# import packages
from commander import Commander
import time

# create Commander instance
con = Commander()

# control the drone to move 1 meter to the right
con.move(1,0,0)
# wait for 2 seconds 
time.sleep(2)

# control the drone to move 1 meter to the front
con.move(0,1,0)
# wait for 2 seconds
time.sleep(2)

# control the drone to move 1 meter to the left
con.move(-1,0,0)
# wait for 2 seconds
time.sleep(2)

# control the drone to move 1 meter to the back
con.move(0,-1,0)
# wait for 2 seconds
time.sleep(2)

# control the drone to move 1 meter above
con.move(0,0,1)
# wait for 2 seconds

# land
con.land()

你可以看到无人机按照正方形运行,升高之后降落。你可能已经发现无人机运动时总是按照”当前“位置作为坐标系,此时运动的参考系为BODY_OFFSET_ENU 或 FLU(Forward,Left,Up),每次运动命令总会控制无人机按照机身坐标系进行运动。move 方法中的第一个参数控制无人机向前飞行(注意,向前飞行不等于向北飞行),第二个参数控制无人机向左飞行,第三个参数向上飞行。飞机飞行的默认参考系为BODY_OFFSET_ENU。如果你想使用LOCAL_ENU坐标系,此时运动按照的参考系是对于“起飞”时的位置,你可以在move方法中添加第四个参数,如下:

con = Commander()

# for BODY_OFF_SET_ENU or FLU frame
con.move(x,y,z)

# for LOCAL_ENU frame
con.move(x,y,z,BODY_OFF_SET_ENU=False)

                                                                                   Figure 4, FLU body frame

接下来,你可以在模拟器中试试其他提供的API。

下一课,我们会讲解一下如果在模拟器环境中通过OFFBOARD模式制作一个3D模型。

 

阅读资料:

若有兴趣,请阅读如下资料:

  1. General ROS introduction: http://wiki.ros.org/

  2. MAVROS: http://wiki.ros.org/mavros

  3. MAVLINK: https://mavlink.io/

  4. Gazebo: http://gazebosim.org/

  5. rep-105: https://www.ros.org/reps/rep-0105.html

  6. https://github.com/PX4/Devguide/blob/master/en/ros/external_position_estimation.md

 

//---------------------------------------------------------------分割-------------------------------------------------------------------//

两种方式配置环境,可以选择逐个安装依赖包,也可以直接使用Docker。

以上是逐个安装依赖包,进行环境配置,下面有第二种环境配置方式,直接使用Docker(这是个什么锤子?咱也不清楚,咱也没有查,反正原博主说了推荐使用源码配置方式,有时间再研究)

//----------------------------------------------------------------分割------------------------------------------------------------------//

2. 使用Docker

如果你想直接跳过上面的步骤,可以使用Docker来运行仿真。Docker的使用较为简单,但是需要的资源较多,所以使用Docker的话GUI程序帧率以及分辨率会较低。我们使用VNC作为GUI交互,它的使用很广泛,可以用在包括Macos, Windows以及Android的多种平台上。

001. 使用VNC并获取Docker镜像

为了在Docker环境下使用GUI程序,需要在本地环境中安装VNC-viewer。你可以访问下面的网站了解更多信息:

https://www.realvnc.com/en/connect/download/viewer/

对于Linux系统来说,你可以直接下载下面的二进制文件:

wget https://www.realvnc.com/download/file/viewer.files/VNC-Viewer-6.19.107-Linux-x64

之后:

# NOTE the exact file name might differ
# 注意文件名可能会不一样
chmod +x VNC-Viewer-6.19.107-Linux-x64 
./VNC-Viewer-6.19.107-Linux-x64

其他平台的安装很简单,我们在此跳过。VNC-viewer安装后,需要获取Docker镜像到你的本地环境下:

docker pull gaas/mavros-gazebo7-px4

若要使用Docker,打开一个终端并输入:

# 取决于硬件配置,此过程可能需要3-5分钟
docker run -p 6080:80 -p 5900:5900 gaas/mavros-gazebo7-px4:latest

在使用Docker过程中,视需求需要使用ROOT权限。

在另一个终端:

# 文件名或者文件路径可能会不一样
./VNC-Viewer-6.19.107-Linux-x64

你可以看到一个如下窗口弹出:

                                                                                  Figure 2, VNC viewer window

输入如下地址:

# 你可以更改使用的端口,在Docker运行时修改对应参数即可
127.0.0.1:5900

回车后,你可以看到一个LXDE桌面的Ubuntu系统窗口:

本课所需要的所有资料都可以在如下文件夹内找到:

/root/gi/GAAS/demo/tutorial_1

最后,每次打开Docker后,使用仿真前,你都需要手动执行下列命令:

cd /root/gi/px4/Firmware && make posix_sitl_default gazebo

仿真环境窗口弹出后,让我们暂时将它关闭。

现在,你可以直接跳到 “006.控制无人机” 部分了!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GAAS 无人机自动驾驶学习(01-使用机载电脑,通过OFFBOARD模式进行控制飞行) 的相关文章

  • http请求digest auth认证

    1 post请求 public static String postMethod String url String query String host throws IOException String content 61 null 认
  • npm install 报错? fs 不能被resolve ?

    先看一下报错信息 然后我按照他的提示去 node modules 里面找到对应文件 xff0c 注释掉 fs 相关就ok了 可是这样毕竟不雅 经过苦苦寻找 xff0c 终于找到原因了 在 webpack config js 中添加如下 与
  • 树莓派3B+安装Ubuntu16.04系统(64位)

    目录 系统下载 Ubuntu16 04系统 补丁 刷系统 换源 改DNS网关 无线 U盘挂载 原文 系统下载 感谢公众号 xff1a 树莓派爱好者基地 更多系资源请关注公众号 Ubuntu16 04系统 链接 xff1a https pan
  • 将浏览器请求直接导入到 Postman Apifox 中

    方法就是如下图所示 xff0c 好像不需要过多文字来赘述了 应用场景就是浏览器 F12 debug 到的请求 xff0c 可以直接拷贝为 cURL 请求 xff0c 拷贝的内容 xff0c 包含了 请求头 参数 请求体所有内容 xff0c
  • SMPL-论文解读

    文章目录 创新点算法shape blend shape xff1a pose blend shapeJoint locationSMPL model 训练过程Pose Parameter Trainingjoint regressorSha
  • Jetson Xavier NX 刷机烧录及备份还原

    文章目录 前言一 准备二 详细流程1 准备OS升级包2 主机和Jetson产品连接3 系统安装4 载入镜像5 提取 Jeston Xavier NX 母板镜像5 1 在PC端搭建烧录环境5 2 提取镜像 6 镜像还原 xff08 批量复制烧
  • 第二章.1节 进程基本概念

    xff08 PS xff1a 个人课下整理的操作系统笔记 xff0c OneNote直接拷贝过来的 xff0c 图片看不了就将就一下 xff0c 配合张伟老师的PPT看效果更好 xff09 一 进程定义 1 进程是具有某一个功能的程序 在某
  • 使用bladeRF和树莓派+YateBTS做GSM基站

    个人出于对无线电的好奇加入了gnuradio的学习 本次测试是基于以下链接网址内容进行的相关测试 xff1a https www freebuf com geek 102729 html 我的安装步骤是一个大神给我找的 xff1a http
  • linux中使用crontab添加定任务执行失败,提示Permission denied

    问题 xff1a 在linux中 xff0c 使用普通账户创建定时任务执行shell脚本时 xff0c 任务会自动执行 xff0c 但总执行失败 xff08 shell脚本编写确认无误 xff09 如下 xff1a 使用sudo cront
  • Win10 USB转串口连接Linux主机调试

    先梳理一下Linux里的console和tty这两个概念 xff1a Console 控制台 xff0c 用于接收所有的内核消息 xff0c 告警 xff0c 允许用户log in 只有text模式 xff0c 也就是说 xff0c 用户通
  • FreeRTOS:卡在configASSERT( ( pxQueue ) )问题的解决

    使用二值信号量过程中 xff0c 刚开始程序还是正常运行 xff0c 一段时间后出现了死机 通过仿真发现程序卡在了 xQueueSemaphoreTake 函数的 configASSERT pxQueue 中 通过查看 xQueueSema
  • 记录复现“VIBE”遇见的BUG

    docker配置 xff1a ubuntu18 01 xff0c cuda10 1 输入视频测试demo时 xff0c 依次遇见下列问题 第一个问题 39 EGL span class token punctuation span cann
  • 软件专业大学生常用的刷题、找答案、找资源的网站

    接下来介绍的主要是结合个人和身边同学经常使用的几个网站 xff0c 肯定有很多不全 xff0c 欢迎大佬们查漏补缺 刷题 一 牛客网 xff08 https www nowcoder com xff09 牛客网 是一个专注于程序员的学习和成
  • Linux设备驱动

    Linux设备驱动 介绍 Linux系列文章记录自己学习Linux开发的历程 最近终于把迅为4412开发环境搞定了 xff0c 先吐槽一波迅为 xff0c 版本太 的多了 xff0c 安卓Linux搞在一起 xff0c 还有那个硬件原理图
  • Linux 磁盘坏块修复处理(错误:read error: Input/output error)

    当磁盘出现坏块时 xff0c 你对所关联的文件进行读取时 xff0c 一般会出现 read error Input output error 这样的错误 反过来讲 xff0c 当你看到 read error Input output err
  • docker给运行中的容器添加端口映射

    问题描述 docker上面运行容器 xff0c run p 的时候只映射了一个端口 xff0c 后面对该nginx做扩展 xff0c 需要开放其他端口 当然重新再启一个容器在docker启动参数里多配置几个 p端口映射是能解决的 xff0c
  • Git常用命令符

    1 强制推送 xff08 慎用 xff0c 除非你认为其他冲突等可以丢弃 或者不是很重要 xff09 git push force 2 创建文件等小命令 touch a 创建一个a文件 echo 1234 gt gt a 把1234这个内容
  • 全网最全的 LeetCode 国人大神刷题指南,全部 Go 语言实现

    大家好 xff0c 我是欧盆索思 xff08 opensource xff09 xff0c 每天为你带来优秀的开源项目 xff01 说到 LeetCode xff0c 作为一个程序员来说 xff0c 应该不陌生 xff0c 近几年参加面试都
  • ROS实现串口通信

    虚拟串口的搭建 参考Linux下添加虚拟串口 xff0c 接收和发送数据 com py文件代码如下 xff1a span class token comment usr bin env python span span class toke
  • 基于Linux的UART驱动框架源码分析笔记

    文章目录 前言一 I MX6ULL串口接收和发送方式1 非DMA方式1 1 接收方式1 2 发送方式 2 DMA方式2 1 接收方式2 2 发送方式 二 UART驱动注册1 uart register driver 函数解析2 serial

随机推荐

  • cmake install 命令

    install指令用于定义安装规则 xff0c 安装的内容可以包括目标二进制 动态库 静态库以及文件 目录 脚本等 需要引入一个新的cmake指令和一个非常有用的变量 cmake install prefix 法一 xff1a cmake
  • 基于全景相机的视觉里程计算法研究

    一 视觉里程计 视觉里程计技术首先建立相机的成像模型 xff0c 接着通过标定算法计算相机参数 xff0c 最后建立相邻图像的关联并估计相机运动轨迹 1 1相机在空间中运动的描述 描述相机在三维空间中的运动状态 xff0c 即求解相机在空间
  • 多旋翼无人机组成(小白上路)

    1 无人机组成 1 1 机架 四旋翼最常见的两种机身布局如下图 xff1a 机架指无人机的承载平台 xff0c 通常用轴距衡量机架的大小 xff0c 轴距是指对角线两个螺旋桨的距离 xff0c 一般以mm为单位 xff0c 如F330表示轴
  • freertos创建任务后进入prvStartFirstTask发生HardFault_Handler中断

    在stm32f103zet6环境中移植成功freertos之后 xff0c 创建第一个任务之后 xff0c 会进入硬件中断 xff0c 经过排查发现死在了prvStartFirstTask 排查原因 xff1a 发现是启动文件startup
  • 解决无法对docker容器进行端口映射的问题

    初学docker的时候 xff0c 不知道为啥 xff0c 按着教程里打的代码 xff0c 最后却出现了映射失败的情况 即 xff1a 在docker内部设置的映射端口 xff0c 外部却没有办法访问 想了想 xff0c 不外乎两个原因 x
  • K8s手工创建kubeconfig

    我们通过 kubectl 命令行连接 k8s apiserver 时需要依赖 kubeconfig 文件 kubeconfig 文件通常包含了 context xff08 上下文 xff09 列表 xff0c 每个 context 又会引用
  • grep命令总结

    grep命令总结 1 关于 nbsp ps ef grep php grep v grep wc l grep v grep 代表在查询的最终结果中去掉grep命令本身 wc l 标示统计查询到的结果数量 grep常用命令 1 grep n
  • Ubuntu 16.04安装realsense D435i SDK以及realsense-ros

    先直接上一个报错信息 xff0c 折腾了半天才解决 在使用catkin make编译realsense ros时 xff0c 报错 traversing 4 packages in topological order realsense c
  • 关于视觉SLAM的一些常识(纯小白学习笔记)

    本文只是小白对于视觉slam的一个非常泛的介绍 xff0c 对于视觉slam中的数学运算均没有提及 xff0c 适合于对没有接触过视觉slam的新人进行一个简单的科普 作者即小白 xff0c 文章如有错误 xff0c 非常非常非常欢迎指正
  • 使用CubeMX快速搭建FREERTOS

    如何使用STM32快速搭建FREERTOS 小编之前一直使用正点原子家的产品 xff0c 最近准备学习学习TOUCHGFX 要用到HAL 43 RTOS 原子家的使用起来不方便 于是琢磨着使用STM32CUBEMX直接生成FREERTOS
  • 使用DMA+SPI驱动Aliyun Things 上的ST7789H2 LCD屏幕

    目录 前言硬件CUBEMX时钟树GPIOSPI 代码部分LCD驱动中断服务函数测试代码现象 前言 1 xff1a 驱动程序参考自https blog csdn net BearPi article details 104311705 2 x
  • SLAM测试5-YGZ-Stereo-Inertial(GAAS双目视觉ygz -立体惯性SLAM)

    这篇主要测试GAAS开源无人机里用到的一种SLAM算法 xff0c 目的是先对该SLAM算法进行熟悉 xff0c 再开始入手GAAS视觉定位 GIThub上的代码地址为 xff1a https github com gaoxiang12 y
  • Linux之线程条件变量cond

    概念 xff1a 条件变量不是锁 xff0c 要和互斥量组合使用 条件变量就是生产者 生产 完成 xff0c 消费者才能 使用 xff0c 如果没有 产品 xff0c 消费者就会被条件变量cond阻塞等待生产者 生产 xff08 生产者与消
  • Linux之线程-信号量sem_*

    1 概念 信号量可理解为进化版的互斥锁 量 xff0c 允许多个线程访问共享资源 由于互斥锁的力度比较大 xff0c 如果希望在多个线程间对某一对象的部分数据进行共享 xff0c 使用互斥锁是没有办法实现的 xff0c 只能将整个数据对象锁
  • 4、树(中篇)

    前言 前节二叉树只能适用于静态查找 不能实现动态插入 删除等 如何解决以下两个问题 静态查找与动态查找 针对动态查找 数据如何组织 4 1 二叉搜索树 4 1 1 什么是二叉搜索树 二叉搜索树 BST Binary Search Tree
  • SNMP源码分析

    源码下载 http www net snmp org download html 源码目录结构 net snmp程序逻辑 xff08 1 xff09 main主函数 span class token macro property span
  • SNMP Trap的session问题

    1 前言 最近遇到了个问题 xff0c SNMPv3 Trap上报 xff0c 在snmp agent侧修改了用户密码 xff0c 管理站mibbroswer上没有修改trap用户的密码 xff0c 仍然可接收到trap上报消息 通过Wir
  • Rancher RKE K8s 集群 etcd 恢复

    背景 在 Rancher 中基于 RKE 创建的 K8s 集群 xff0c 因为服务器磁盘故障 xff0c 导致 3个 master 节点有2个节点的 etcd 数据文件损坏 xff0c 导致整个集群不可用 etcd 三个节点集群时 xff
  • PIXHAWK飞控固件及代码基础介绍

    PIXHAWK飞控 xff1a 固件 xff1a 开源固件PIXHAWK 软件 xff1a 两套固件代码 xff08 1 xff09 原生固件代码PIX4 xff0c 地面站采用QGC xff08 界面比较合理清晰 xff0c 易做修改 x
  • GAAS 无人机自动驾驶学习(01-使用机载电脑,通过OFFBOARD模式进行控制飞行)

    原文网址 xff1a https gaas gitbook io guide wu ren ji zi dong jia shi xi lie offboard kong zhi yi ji gazebo fang zhen 介绍 xff1