嵌入式JetSon TX2上使用RealSense D435 (外加IMU芯片) 运行RTAB-Map与VINS-MONO的全流程记录

2023-05-16

本周成功的在JetSon TX2上移植了Vins-Mono与RTAB-Map,并使用摄像头RealSense D435顺利跑通了这两个框架。中间遇到了各种各样神奇的问题,踩坑无数,现整理记录一下整体流程,便于后续查询与复现。

JetSon系列是Nvidia公司推出的面向人工智能领域的嵌入式平台,这块嵌入式板子的出现使得我们可以在移动设备上处理复杂数据。

全流程目录

    • 一、在JetSon TX2上运行VINS-Mono
        • 1、配置Vins-Mono的编译环境
          • (1)ROS Kinetic在JetSon TX2上的安装:
          • (2)ceres-solve在JetSon TX2上的安装:
        • 2、安装Realsense D435摄像头驱动与IMU驱动
          • (1)安装Realsense D435的相机驱动 (librealsense SDK 2.0)
          • (2)安装RealSense相机的ROS版本
          • (3)安装IMU驱动
        • 3、使用Realsense D435摄像头运行Vins-Mono
          • (1)测试Realsense D435摄像头
          • (2)运行Vins-Mono
    • 二、在JetSon TX2上运行RTAB-MAP
        • 1、安装与编译RTAB-MAP
        • 2、使用摄像头RealSense D435运行RTAB-MAP

一、在JetSon TX2上运行VINS-Mono

已有环境配置:我这里JetSon TX2上已经刷好了系统版本JetPack3.2.1
具体刷机流程后面会深入学习一下,到时候再写一篇博客记录下来。

1、配置Vins-Mono的编译环境

在JetSon TX2上安装与编译Vins-Mono框架时,主要流程与Ubuntu 16.04系统下的搭建流程基本一致,具体可以参考本人之前的博客:搭建Vins-Mono环境与评估EuRoc定位精度、安装RealSense ZR300、D435驱动 中的安装流程。

需要安装的依赖项有:ROS Kinetic,OpenCV 3.3.1,Eigen 3.3.4,Ceres-Solver。
其中有两点与Ubuntu 16.04系统下不太一样的地方,需要留意一下:

(1)ROS Kinetic在JetSon TX2上的安装:

直接运行如下命令行安装ROS Kinetic:

mkdir -p ~/ROS
cd ~/ROS
git clone https://github.com/ncnynl/installROSTX2.git
 
# 打开脚本文件
cd installROSTX2
gedit installROS.sh 
#将ros-kinetic-ros-base,更改为:ros-kinetic-desktop-full

#安装
./installROS.sh

安装完,运行:roscore 查看是否安装成功。

(2)ceres-solve在JetSon TX2上的安装:

在TX2上安装ceres-solver时,如果先安装了Eigen 3.3.3的版本,则会出现以下错误:

– Found installed version of Eigen: /usr/lib/cmake/eigen3
– Found Eigen version 3.2.92: /usr/include/eigen3
CMake Error at CMakeLists.txt:240 (message):
– Ceres requires Eigen version >= 3.3.4 on aarch64. Detected version of
Eigen is: 3.2.92.

因此需要升级Eigen版本。在Eigen官网下载大于或等于3.3.4的版本,解压后使用cmake安装。

2、安装Realsense D435摄像头驱动与IMU驱动

由于Vins-Mono算法里融合了IMU惯导数据,所以需要带惯导信息的摄像头才能运行,例如Intel RealSense ZR300,RealSense D435i等。Intel Realsense D435摄像头不含惯导信息,于是我们购买了IMU芯片,与Realsense D435摄像头一起使用。
参考博客:
https://blog.csdn.net/u013595260/article/details/86522385
https://blog.csdn.net/weixin_44580210/article/details/89789416

(1)安装Realsense D435的相机驱动 (librealsense SDK 2.0)

----mod 2021.01.20---
本步骤在后文有更新,之前博文安装的版本太旧会有问题,建议直接从后面----mod 2021.01.20---处查看。

Realsense官方提供的SDK安装方法无法在arm架构上安装成功,于是JetSonhacks提供了针对JetSon TX2的Realsense D400系列SDK安装脚本。
github官方链接:https://github.com/jetsonhacks/buildLibrealsense2TX

本次安装使用的是v0.9版本,发布日期为July,2018,配置要求: L4T 28.2 / L4T 28.2.1 (JetPack 3.2.1)
如果系统不满足上述要求,需要对JetSon TX2重新安装系统。
将源码zip下载并解压,执行如下命令行进行安装:

#重新构建内核
./buildPatchedKernel.sh
#安装SDK
./installLibrealsense.sh 

在安装过程中发生如下错误:
在这里插入图片描述
原因是没有安装CUDA,需要安装CUDA-8.0并添加环境变量,安装命令行如下:

wget http://developer.download.nvidia.com/devzone/devcenter/mobile/jetpack_l4t/013/linux-x64/cuda-repo-l4t-8-0-local_8.0.84-1_arm64.deb
sudo dpkg -i cuda-repo-l4t-8-0-local_8.0.84-1_arm64.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-8-0

在根目录下执行命令 nvcc -V 。如果执行命令后的结果不是CUDA的版本信息而是提示有问题,则需要在JetSon TX2上设置环境变量:

sudo gedit /etc/bash.bashrc

在文件的末尾加入:

export PATH=/usr/local/cuda-8.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH

之后运行nvcc -V如果显示有版本信息,并在CUDA的example目录下执行sudo make能够正确运行示例,则证明CUDA已成功安装,重新执行./installLibrealsense.sh 安装SDK库。

最后执行realsense-viewer如果能正确显示摄像头采集图像界面,如下所示,则证明SDK库已成功安装。
在这里插入图片描述
-------------------------------------------------mod 2021.01.20-----------------------------------------------

由于近期JetSon TX2上的ROS环境出现了问题,卸载重装后发现之前搭建的所有ROS节点都无法使用了,因此需要在TX2上复现这篇博文提到的完整框架,重新进行环境搭建。
在重新复现的过程中对RealSense相关的依赖库有了更全面的了解与认识,发现自己这篇博文有很多地方存在问题与疏漏,特此补充修改。

由于这篇博文写于2019年,当时RealSense SDK没有直接在arm架构下的安装方法,因此我采用了JetSonhacks提供的安装脚本,如上文旧的步骤(1)中所示。
需要注意的是这个SDK安装的是librealsense 2.13.0版本,如今我复现后发现这个旧版本依旧能够正常安装,但之后会与后文步骤(2)中librealsense_ros的安装存在版本冲突,即,当对librealsense_ros进行源码编译安装时,报错如下:

CMake Error at realsense-ros/realsense2_camera/CMakeLists.txt:47 (message):
Intel RealSense SDK 2.0 is missing, please install it from https://github.com/IntelRealSense/librealsense/releases

因此我重新去查看了RealSense SDK的官网,打算安装RealSense SDK的最新版本,新版本安装后问题得以解决(并且安装新版本时无需卸载旧版本,发现可以直接对其覆盖)。

官网查阅后发现如今RealSense SDK已经可以直接在JetSon TX2上进行安装,其安装方式有两种,一个是从源码编译安装,一个是直接apt-get安装。
首先为求便捷直接选择apt-get安装,但没能成功,不过还是记录一下正常的安装流程:

方式1:apt-get安装包进行安装:
官方手册:https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md#installing-the-packages

注册公匙:

sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C8B3A55A6F3EFCDE

添加repositories(Ubuntu 16 LTS):

sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo xenial main" -u

安装library:

sudo apt-get install librealsense2-dkms
sudo apt-get install librealsense2-utils

安装developer和debug packages:

sudo apt-get install librealsense2-dev
sudo apt-get install librealsense2-dbg

测试SDK:

realsense-viewer

这里我遇到的问题有:
1/ 无法添加repositories:
http://ppa.launchpad.net/fcitx-team/nightly/ubuntu/dists/xenial/main/binary-amd64/Packages 404 Not Found
后来尝试把软件&更新中的一些奇怪的源取消勾选后解决了。
2/ 在执行sudo apt-get install librealsense2-dkms时依旧无法定位软件安装包,报错如下:
E: Unable to locate package librealsense2-dkms
这里一直没能解决,于是放弃apt安装,直接对源码进行编译。目前官方提供的最新版本为RealSense SDK 2.41.0,具体流程如下所示:

2021.07.06 目前官方提供的最新版本为RealSense SDK 2.48.0(注意一定要用最新版)

方式2:源码编译进行安装:
官方手册:https://github.com/IntelRealSense/librealsense/blob/master/doc/installation.md

从仓库中git源码到本地:

git clone https://github.com/IntelRealSense/librealsense.git

安装一些依赖库:

sudo apt-get install git libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev

编译与安装:

cd librealsense/build
cmake ../
sudo make uninstall && make clean && make && sudo make install

这里我安装的时候没有遇到什么别的问题,结束后进行librealsense的ROS版本安装。
-----------------------------------------------2021.01.20------------------------------------------------------

(2)安装RealSense相机的ROS版本

----mod 2021.01.20---
本步骤在后文有更新,建议直接从后面----mod 2021.01.20---处查看。

安装基于ROS使用的librealsense_ros包。
官方链接:https://github.com/jetsonhacks/installRealSense2ROSTX

将源码zip下载并解压,执行如下命令行进行安装:

 ./installRealSenseROS.sh

这里不知道为什么一直编译不通过,单独下载realsense源码进行catkin_make也没有用,可能是因为使用的这个版本比较旧后续有改动,导致找不到一些依赖库之类的问题。于是我卸载了之前安装的SDK(否则librealsense会出现版本冲突)命令行:sudo make uninstall,用ROS包进行安装,命令行如下:

sudo apt-get install librealsense2
sudo apt-get install ros-kinetic-realsense2-camera 
sudo apt-get install ros-kinetic-rgbd-launch

执行完毕上面命令后重启系统:sudo reboot 完成ROS上RealSense包的安装。

-------------------------------------------------mod 2021.01.20-----------------------------------------------

这里继续修改和完善ROS包的安装流程,上文步骤(2)的旧安装方式也是通过JetSonhacks提供的安装脚本进行的,但跟SDK一样如今ROS版本也已经可以直接在TX2上进行安装了,并且随着RealSense版本的更新,JetSonhacks提供的脚本会出现很多不适配的问题,如这个issue所示:https://github.com/IntelRealSense/librealsense/issues/4295

于是直接采用Realsense官方提供的用户手册,其安装方式依旧有两种,一个是从源码编译安装,一个是直接apt-get安装ros包。

方式1:apt-get安装包进行安装:
官方手册:https://github.com/IntelRealSense/realsense-ros

首先为求便捷也是直接选择apt-get安装,安装步骤如下:

sudo apt-get install ros-kinetic-realsense2-camera 
sudo apt-get install ros-kinetic-rgbd-launch
sudo apt-get install ros-kinetic-realsense2-description

但安装完成后运行相机ROS节点时roslaunch realsense2_camera rs_camera.launch,发现无法找到realsense2_camera节点,最后还是重新源码编译了…

方式2:源码编译进行安装:
官方手册:https://github.com/IntelRealSense/realsense-ros

从仓库中git源码到本地:

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src/
git clone https://github.com/IntelRealSense/realsense-ros.git
cd realsense-ros/
git checkout `git tag | sort -V | grep -P "^2.\d+\.\d+" | tail -1`
cd ..

编译与安装:

catkin_init_workspace
cd ..
catkin_make clean
catkin_make -DCATKIN_ENABLE_TESTING=False -DCMAKE_BUILD_TYPE=Release
catkin_make install

在步骤(1)中的RealSense SDK 2.41.0安装成功后,这里的ROS版本编译安装也没有问题了。
-----------------------------------------------2021.01.20------------------------------------------------------

(3)安装IMU驱动

由于RealSense D435摄像头不含IMU惯性测量模块,于是我们购入了一块轻量级IMU,集成两个加速度传感器与三个速度传感器(陀螺),用于测量物体三轴姿态角(或角速率)以及加速度,并以此解算出物体的姿态,使得最终的定位结果更加精准。
这里使用的IMU驱动是一位不愿意透露姓名的大神同事自己写的,非常牛逼,涉及到个人版权在这里就不开源了。

直接catkin_make进行编译,之后运行如下命令行:

sudo cp `rospack find serial_com_node`/scripts/jy901.rules  /etc/udev/rules.d
sudo service udev reload
sudo service udev restart
#重启系统
sudo reboot

3、使用Realsense D435摄像头运行Vins-Mono

下面进入激动人心的Vins-Mono运行环节,首先测试Realsense D435摄像头是否能够正常工作。

(1)测试Realsense D435摄像头

打开三个终端,分别执行如下命令行:

source devel/setup.bash
roslaunch realsense2_camera rs_rgbd.launch #运行Realsense2的RGB-D相机
source devel/setup.bash
roslaunch serial_com_node serial.launch  #运行IMU
rosrun rviz rviz

选择CloudPoints2,或者运行roslaunch realsense2_camera rs_camera.launch filters:=pointcloud,如果能够正确看到Realsense D435获得的点云信息,如下图所示,则证明摄像头驱动已正确安装。
在这里插入图片描述

(2)运行Vins-Mono

vins-mono-catkin_ws/src/VINS-Mono/config/realsense/realsense_color_config.yaml文件中订阅的topic更改为Realsense D435与IMU发布的topic,如下所示:

imu_topic: "/imu"
image_topic: "/camera/color/image_raw"
output_path: "/home/nvidia/output/"

打开四个终端,分别执行如下命令行:

source devel/setup.bash
roslaunch realsense2_camera rs_rgbd.launch 
source devel/setup.bash
roslaunch serial_com_node serial.launch 
source devel/setup.bash
roslaunch vins_estimator realsense_color.launch 
source devel/setup.bash
roslaunch vins_estimator vins_rviz.launch 

如果显示界面如下所示,则证明Vins-Mono框架已正确安装,并能够使用Realsense D435摄像头正确运行。
在这里插入图片描述

二、在JetSon TX2上运行RTAB-MAP

RTAB-MAP(Real-Time Appearance-Based Mapping)提供了一个基于外观的定位与构图解决方案,解决大型环境中的在线闭环检测问题。
官方链接:http://introlab.github.io/rtabmap/

1、安装与编译RTAB-MAP

在JetSon TX2上安装与编译RTAB-MAP时遇到了很多问题,并且编译速度很慢,需要一些耐心慢慢解决。
源码链接:https://github.com/introlab/rtabmap
官方用户手册:https://github.com/introlab/rtabmap_ros#installation
参考博客:https://www.ncnynl.com/archives/201706/1749.html

首先检查是否已安装OpenCV3,这里不做过多安装说明,之后直接使用源码安装RTAB-MAP,命令行如下:

#安装依赖项 (Qt, PCL, VTK, OpenCV, ...)
sudo apt-get install ros-kinetic-rtabmap ros-kinetic-rtabmap-ros
cd ~
git clone https://github.com/introlab/rtabmap.git rtabmap #rtabmap源码下载
cd rtabmap/build
cmake ..
make -j4
make install

在编译过程中遇到如下错误:

/home/nvidia/rtabmap/corelib/src/optimizer/OptimizerGTSAM.cpp:45:42: fatal error: gtsam/sam/BearingRangeFactor.h: No such file or directory

分析原因,应该是没有安装GTSAM依赖项。运行如下命令行安装GTSAM:

git clone https://bitbucket.org/gtborg/gtsam.git
cd gtsam
mkdir build
cd build
cmake ..
make check
make install #需改为sudo make install,否则报如下错误

编译到最后一步时出现了一个错误:

[100%] Built target ConcurrentFilteringAndSmoothingExample Install the project... 
-- Install configuration: "Release" 
-- Installing: /usr/local/lib/cmake/GTSAM/gtsam_extra.cmake CMake Error at cmake_install.cmake:44 (file): 
file INSTALL cannot copy file "/home/shruti/gtsam/build/gtsam_extra.cmake" to
"/usr/local/lib/cmake/GTSAM/gtsam_extra.cmake".
Makefile:105: recipe for target 'install' failed make: *** [install] Error 1

发现是权限不够的问题,需要添加sudo来执行, 命令行:sudo make install
安装完GTSAM依赖项后重新进行RTAB-MAP的编译,依旧没有通过,于是又安装了G2O依赖包,命令行如下:

#安装g2o依赖包:
sudo apt-get install cmake libeigen3-dev libsuitesparse-dev
#源码编译g2o
git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o/
mkdir build
cd build/
cmake ../
make

再次进行RTAB-MAP的编译,还是没有通过,报错: error: no matching function for call to ‘g2o::BlockSolver......
分析原因是G2O初始化时Block出错,以及迭代算法部分出错。由于github上的G2O换了新的接口,可以换回高博的旧版G2O,也可以参考博客https://blog.csdn.net/try_again_later/article/details/82585025进行代码部分修改。

然而这里我依旧没能编译成功,于是直接取消了G2O的依赖关系,命令行如下。这次终于能够正确编译,但可能会对RTAB-MAP的重建精度有一些影响。如果有人知道如何正确安装GTSAM与G2O依赖项欢迎一起讨论 ~ ~

cmake -DWITH_G2O=OFF -DWITH_GTSAM=OFF ..
make
sudo make install 

-------------------------------------------------mod 2021.01.20-----------------------------------------------
之前老博文这里遗忘了安装RTAB-MAP的ROS包的过程,补充一下后续安装步骤:

cd ~/catkin_ws
git clone https://github.com/introlab/rtabmap_ros.git src/rtabmap_ros
catkin_make -j1

这里遇到了几个错误,具体描述如下:

1/ No rule to make target '/usr/lib/x86_64-linux-gnu/libproj.so ,needed by '../bin/generate_pointcloud

错误原因是由于/usr/lib/aarch64-linux-gnu/文件夹内没有这个libproj.so库。因此先在该文件夹内搜索是否有同名不同版本的库,如果有 ,可以使用ln -s在该文件夹内部对存在的库链接到一个新建的名为libproj.so 库内,这样就可以使用了,执行命令行如下:

sudo ln -s  /usr/lib/aarch64-linux-gnu/libproj.so.9 /usr/lib/aarch64-linux-gnu/libproj.so 

如果文件夹内部没有此库,需要安装依赖库:sudo apt-get install libproj-dev

2/ /home/ubuntu/ros_ws/devel/lib/librtabmap_ros.so: undefined reference to 'rtabmap::Signature::setWords(std::multimap<int, cv::KeyPoint, std::less, std::allocator<std::pair<int const, cv::KeyPoint> > > const&)'

这里是由于19年安装的时候RTAB-MAP的源码版本为0.19.6,我这里依旧沿用了当时安装的版本,于是就与现在的ROS版本无法兼容与适配,可以参考这篇遇到类似问题的issue:https://github.com/introlab/rtabmap_ros/issues/456
解决办法是在官网上下载与RTAB-MAP的源码版本匹配的ROS版本,发现没有0.19.6这个版本,于是下载Master版本,将之前编译的build与devel文件夹删除后重新编译(切记要clean你的ros工作空间,不同版本编译安装时无法直接覆盖,会出问题),问题得以解决。
-----------------------------------------------2021.01.20------------------------------------------------------

2、使用摄像头RealSense D435运行RTAB-MAP

参考博客:https://answers.ros.org/question/308137/run-rtab-map-but-without-image-open/
首先将rtabmap.launch文件中订阅的topic更改为RealSense D435摄像头发布的信息,如下所示:

<arg name="rgb_topic"               default="/camera/color/image_raw" />
<arg name="depth_topic"             default="/camera/aligned_depth_to_color/image_raw" />
<arg name="camera_info_topic"       default="/camera/color/camera_info" />

之后分别打开三个终端,分别运行如下命令行:

source devel/setup.bash
roslaunch realsense2_camera rs_rgbd.launch 
source devel/setup.bash
roslaunch serial_com_node serial.launch 
#启动RTAB-MAP建图
source devel/setup.bash
roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start"
#或者
source devel/setup.bash
roslaunch rtabmap_ros rtabmap.launch rtabmap_args:="--delete_db_on_start" rviz:=true rtabmapviz:=false

显示如下三维场景重建界面,表明RTAB-MAP已经正确安装,Realsense D435摄像头可以正确运行。
在这里插入图片描述

每天都好困想要冬眠的乔木同学
记于2019年11月21日

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

嵌入式JetSon TX2上使用RealSense D435 (外加IMU芯片) 运行RTAB-Map与VINS-MONO的全流程记录 的相关文章

  • secureCRT串口无法输入

    用串口配置交换机的时候 xff0c 出现的问题 xff1a 用secureCRT建了一个串口COM1后 xff0c 连接上开发板后 xff0c 可以正确接受和显示串口的输出 xff0c 但是按键输入无效 解决方法 xff1a Session
  • 经典编程书籍(C++, 网络, Windows, Linux)【转载】

    书单中列举的都是相关领域的经典书籍 xff0c 必读之作 此书单的编辑参考了很多网站 xff0c 包括一些名家的推荐 xff0c 例如侯捷 xff0c 孟岩 xff0c 荣耀 xff0c 潘爱民等等 xff0c 在此也向这些前辈表示感谢 1
  • Ubuntu 20.04 LTS 发布最终 Beta 版本

    Ubuntu 团队通过邮件列表宣布推出 Ubuntu 20 04 LTS 最终 Beta 版本 xff0c 并预告稳定版将于2020年4月23日发布 虽然是最终的 Beta 版本 xff0c 但毕竟尚处于测试阶段 xff0c 因此不建议在生
  • Git——6个免费的GUI客户端

    目录 1 简介 1 1 测试的工具 1 2 测试方法 2 SourceTree 2 1 详情 2 2 概述 2 3 印象 3 GitHub Desktop 3 1 详情 3 2 概述 3 3 印象 4 Git Extensions 4 1
  • SourceTree Git管理神器使用教程详解

    目录 前言 xff1a SourceTree Github Desktop TortoiseGit 可视化管理工具对比 xff1a SourceTree介绍和Atlassian账号注册和登录教程 xff1a 连接Gitee or GitHu
  • 软件测试项目篇

    目录 1 项目启动2 需求分析3 制定测试方案 xff08 计划 43 策略 xff09 4 测试执行流程 1 项目启动 了解项目背景 2 需求分析 功能需求 xff1a 文件类型 xff1a 支持所有的文件压缩文件个数 xff1a 最多压
  • LTE系统信息(1)-MIB

    1 什么是MIB 为了能正常接入小区 xff0c UE在完成扫频 xff08 无论是指定频点扫频还是全频段扫频 xff0c 目的都是为了找到合适的中心载波频点 xff0c 参考 LTE物理传输资源 xff08 3 xff09 时频资源 xf
  • vi编辑器

    目录 简介 基本操作 1 移动光标 2 定位 3 删除 4 复制 5 查找
  • ubuntu下进行串口通信

    1 首先下载串口通信需要的uart文件 xff0c 用于数据封装json文件 下载地址 xff1a http download csdn net download m zhangjingdong 10164628 http download
  • GPS轨迹飘点处理(原创)

    当我们处理gps设备传过来的数据时 xff0c 最让人头疼的事情莫过于设备定位异常所传输的异常点了 xff0c 我们习惯的叫它为飘点 这些数据是设备层面的异常 xff0c 目前没有什么有效的方法来减少设备发送的飘点 但是我们可以通过程序来过
  • 创建多个带有摄像头的四旋翼gazebo模型

    完整的model文件和launch文件我上传在资源里 xff1a 多个带有摄像头的四旋翼gazebo模型 zip 1 启动多个iris四旋翼模型 PX4源码里有iris sdf等四旋翼模型文件 xff0c 但是如果要启动多个iris模型和m
  • 最全面的PLC学习网站

    http www gkwo net wenku list 13 htm PLC工控资料学习网
  • ImportError: Failed to import test module: 2

    1 在进行unittest测试时 xff0c 运行报错如下 导入import unittest 包 xff0c 创建的文件名字得是 Test 开头的 xff0c 不然报如下的错误 我的文件名字是 2 unittest简单实用 first t
  • 面试:微信朋友圈测试流程(功能测试,性能测试,界面测试,易用性测试,网络测试,兼容性测试,安全性测试)

  • HTTP请求/响应报文结构

    HTTP请求 响应报文结构 HTTP请求报文 一个HTTP请求报文由四个部分组成 xff1a 请求行 请求头部 空行 请求数据 1 请求行 请求行由请求方法字段 URL字段和HTTP协议版本字段3个字段组成 xff0c 它们用空格分隔 比如
  • MySQL数据库面试知识点

    MySQL数据库面试知识点 转自 xff1a https blog csdn net ThinkWon article details 104778621
  • 牛客网试题+答案分析+大牛面试经验(1)

    一 选择题 xff08 1 xff09 有以下程序 xff1a include lt stdio h gt char fun char c if c lt 61 39 Z 39 amp amp c gt 61 39 A 39 c 61 39
  • C++动态链接库中的全局变量面试题

    其实主要问题是三个模块 xff1a 模块 a 静态库 a 模块 b 二进制 b 静态引用a 动态加载c 模块 c 动态链接库c 静态引用a 关键在于静态库a里有一个静态全局变量 xff0c 没错就是我们的日志模块 原先的这个静态的模块中的静
  • 长连接与短连接的区别以及使用场景

    首先介绍下短链接和长连接的区别 xff1a 短连接 连接 gt 传输数据 gt 关闭连接 比如HTTP是无状态的的短链接 xff0c 浏览器和服务器每进行一次HTTP操作 xff0c 就建立一次连接 xff0c 但任务结束就中断连接 因为连
  • 进程的有哪几种状态,状态转换图,及导致转换的事件

    进程的特征与三种基本状态 1 特征 xff1a 1 xff1a 动态性 xff0c 2 xff1a 并发性 xff0c 3 xff1a 独立性 xff0c 4 xff1a 异步性 2 状态 xff1a 1 xff1a 就绪状态 当进程已分配

随机推荐

  • 请问单核机器上写多线程程序,是否需要考虑加锁,为什么?

    参考回答 xff1a 在单核机器上写多线程程序 xff0c 仍然需要线程锁 因为线程锁通常用来实现线程的同步和通信 在单核机器上的多线程程序 xff0c 仍然存在线程同步的问题 因为在抢占式操作系统中 xff0c 通常为 每个线程分配一个时
  • 阿木p200四旋翼配置经验笔记

    本文初次写于2021 06 09 我做编队试验用的阿木P200四旋翼 xff0c 空循环uwb定位下完成了机载计算机控制的编队飞行以及二维码引导降落 记录一下对到手的P200飞机仍需要更改调试的配置 xff1a 硬件加装 加装uwb标签用于
  • Linux C/C++ 学习路线

    一 秋招 Linux C C 43 43 offer 情况 二 Linux C C 43 43 方向的一些思考 三 计算机基础知识的梳理 四 C 43 43 方向的深入学习路线 五 项目 43 亮点 43 面试的一些思考 六 总结 前言 L
  • 如何在简历中描述自己的项目

    项目经历 很多人在描述项目经历的时候容易陷入一个误区 讲套话 xff0c 如 xff1a 用html xff0c css编写基本页面 xff0c 用js XX库完成页面交互 动画 用AJAX xff08 axios库等 xff09 实现前后
  • 网络工程师(路由交换)必备面试题

    一 TCP IP通信原理 物理层 1 OSI七层模型与TCP IP模型的区别 xff1f 2 异步传输与同步传输的优缺点与区别 应用场景 xff1f 3 多模光纤与单模光纤的区别以及用途 xff1f 4 RJ45线序568A和568B的区别
  • git show/diff 界面操作

    最近发现在git show或者git diff的界面 xff0c 也就是显示对比差异的时候 xff0c 无法编辑 xff0c 很不爽 xff0c 在网上也找不到类似说明 xff1a 仔细研究后发现有很多快捷键说明 xff0c 部分如下 xf
  • 在linux上用dd命令实现ghost功能 -- 神奇的fdisk和dd命令

    神奇的fdisk和dd命令 深深的苦恼中 xff0c 灵光乍现 xff1a 神奇的ghost的原理是什么呢 xff1f 不就是数据复制吗 xff1f Linux下的dd命令不就是最强大的数据复制工具 xff01 既然如此 xff0c 我为什
  • Linux笔记:文本编辑器nano简单说明

    文章目录 目的快速使用常用命令nano语法常用选项总结 目的 pico是Linux上的一个文本编辑器 xff0c nano是从pico发展而来的文本编辑器 xff08 很多系统上你使用pico命令打开的也是nano xff09 nano i
  • 在STM32Cube中使用FreeRTOS:入门体验

    文章目录 目的基础说明入门体验基础配置任务调度消息队列信号量互斥量定时器 其它补充使用ST LINK调试中断嵌套 总结 目的 FreeRTOS是现在比较流行的主要应用于单片机等性能相对较低 xff0c 对实时性要求又比较高的嵌入式应用场景中
  • FreeRTOS入门(07):流缓冲区 & 消息缓冲区

    文章目录 目的基础说明流缓冲区相关函数使用演示 消息缓冲区相关函数使用演示 总结 目的 缓冲区是操作系统中常见的一种用于任务间数据传递的机制 这篇文章将对FreeRTOS中相关内容做个介绍 本文代码测试环境见前面的文章 xff1a Free
  • 树莓派4b 安装buster系统 安装ROS与MAVROS 连接pixhawk飞控

    手把手教程 无屏幕的树莓派4b 安装Rapbian buster系统 安装ROS与MAVROS 连接pixhawk飞控 xff08 1 xff09 准备 xff1a 树莓派4b 1 32G内存卡 1 树莓派官方raspbian buster
  • 阿克曼前轮转向车gazebo模型

    想要一个阿克曼转向结构车的gazebo模型 xff0c 要求能够用ros话题控制前进速度和前轮转角 令人惊讶的是 xff0c 网上基本没有这种模型 racecar模型 首先古月居提供了一个racecar的模型 xff0c 可以控制速度和前轮
  • Jetson TX2 在docker容器中import torch 报错的处理方式

    1 Jetson TX2 信息 xff1a 驱动版本 xff1a JetPack 4 6 1 2 docker信息 xff1a docker 镜像 xff1a pull 了 nvcr io nvidia l4t ml r32 7 1 py3
  • 史上最详细的PID教程——理解PID原理及优化算法

    Matlab动态PID仿真及PID知识梳理 云社区 华为云 huaweicloud com 位置式PID与增量式PID区别浅析 Z小旋 CSDN博客 增量式pid https zhuanlan zhihu com p 38337248 期望
  • JAVA经典试卷(理工)

    一 判断题 xff08 本大题共20小题 xff0c 每小题1分 xff0c 总计20分 xff09 1 xff0e final类能派生子类 2 xff0e 子类要调用父类的方法 xff0c 必须使用super关键字 3 xff0e Jav
  • git与gitee学习笔记

    随着时间推移 xff0c 除去常量 xff0c 任何事物都是在变化的 xff0c 如果用一根曲线表示 xff0c 横轴代表时间 xff0c 纵轴代表事物量 xff0c 那么所绘制的曲线 xff0c 在时间足够长的情况下 xff0c 必然是高
  • docker基础命令操作---镜像操作

    1 搜索官方仓库镜像 xff1a docker search image name 镜像名 例如 xff1a docker search nginx 命令执行结果参数说明 xff1a 参数 说明 NAME 镜像名称 DESCRIPTION
  • ESP8266连接天猫精灵(一)

    背景 接触天猫精灵后 xff0c 就想作一些小东西能接入天猫精灵 查看官网的文档后 xff0c 选择了ESP系列 xff0c 官方在文档中也比较推荐 读技术文档是个很难受的事情 xff0c 容易犯困 xff0c 最好有可以操作的设备 准备如
  • Windows下Boost库的安装与使用

    目录 1 基本介绍 2 下载安装 3 配置boost环境 xff08 VS2010 xff09 4 测试 1 基本介绍 Boost库是为C 43 43 语言标准库提供扩展的一些C 43 43 程序库的总称 xff0c 由Boost社区组织开
  • 嵌入式JetSon TX2上使用RealSense D435 (外加IMU芯片) 运行RTAB-Map与VINS-MONO的全流程记录

    本周成功的在JetSon TX2上移植了Vins Mono与RTAB Map xff0c 并使用摄像头RealSense D435顺利跑通了这两个框架 中间遇到了各种各样神奇的问题 xff0c 踩坑无数 xff0c 现整理记录一下整体流程