ROS学习笔记之——gazebo仿真

2023-05-16

本博文是本人学习gazebo的学习记录。

 

Gazebo是一款3D仿真器,支持机器人开发所需的机器人、传感器和环境模型,并且通过搭载的物理引擎可以得到逼真的仿真结果。Gazebo是近年来最受欢迎的三维仿真器之一,并被选为美国DARPA机器人挑战赛7的官方仿真器。因此它再接再厉,即便是开源仿真器,却具有高水准的仿真性能,因此在机器人工程领域中非常流行。不仅如此,负责开发和普及ROS,且担任社区的Open obotics在开发ROS和Gazebo,因此ROS和Gazebo非常兼容。

Gazebo不仅提供虚拟机器人的外形,还可以检测机体的碰撞,也可以测量位置,还能虚拟地使用IMU传感器和摄像机传感器。

 

目录

Gazebo 测试

run gazebo

world files

Environment Variables

Model files

基于turtlebot3的gazebo测试

Gazebo 基本介绍

User Interface

The Toolbars

菜单

通过gazebo创建一个机器人

创建一个world仿真环境

添加目标

下载gazebo模型

保存创建的world

gazebo仿真环境的特性

Physics Properties

Connect to ROS

采用roslaunch来启动gazebo

基于ROS的gazebo深度相机

基于ROS的gazebo遥控仿真

BUG解决

参考资料


 

Gazebo 测试

http://gazebosim.org/tutorials?cat=get_started

之前在安装ROS的时候已经安装好了gazebo。(没安装的可以参考http://gazebosim.org/tutorials?cat=guided_b&tut=guided_b1)

run gazebo

通过下面代码就可以直接打开gazebo

gazebo

此时打开的将会是一个空的gazebo空间,如下图所示

导入机器人pioneer2dx。运行下面command

gazebo worlds/pioneer2dx.world

Note: If you don't have the pioneer2dx model already, Gazebo will download it from the online model database which may take some time.

结果如下图所示

world files

The world description file contains all the elements in a simulation, including robots, lights, sensors, and static objects. This file is formatted using SDF (Simulation Description Format), and typically has a .world extension.

world文件其实就是所建立的gazebo仿真环境的模型。

这个网站有一系列word文件的文档(https://bitbucket.org/osrf/gazebo/src/default/worlds/)

The Gazebo server (gzserver) reads this file to generate and populate a world.

Environment Variables

Gazebo uses a number of environment variables to locate files, and set up communications between the server and clients. Default values that work for most cases are compiled in. This means you don't need to set any variables

 

 

Model files

A model file uses the same SDF format as world files, but should only contain a single <model> ... </model>. The purpose of these files is to facilitate model reuse, and simplify world files. Once a model file is created, it can be included in a world file using the following SDF syntax:

<include>
  <uri>model://model_file_name</uri>
</include>

所谓的模型文件应该就是加载到仿真环境的物体了

这个网址有一系列模型的文件(https://bitbucket.org/osrf/gazebo_models/src/default/)

 

基于turtlebot3的gazebo测试

首先运行roscore

然后在gazebo内运行turtlebot

roslaunch turtlebot_gazebo turtlebot_world.launch

由于我已经定义了自己的turtlebot模型,所以可以运行为

roslaunch turtlebot3_gazebo turtlebot3_world.launch

结果如下图所示

类似于RVIZ,gazebo也可以用鼠标来控制不同的视角。如下图所示

然后运行rviz来可视化gazebo仿真环境

具体可以参考博客https://blog.csdn.net/m0_37340621/article/details/104111415?utm_source=blogxgwz4

打开键盘遥控节点

 roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

 

Gazebo 基本介绍

gazebo是一种适用于复杂室内多机器人和室外环境的仿真环境。它能够在三维环境中对多个机器人、传感器及物体进行仿真,产生实际传感器反馈和物体之间的物理响应。

User Interface

Gazebo的界面如下图所示

首先中间部分为仿真器的场景

通过拖动将其与场景分隔开的栏,可以显示、隐藏或调整左右两侧面板的大小。

在gazebo的左边主要有以下三个标签:

  • WORLD: The World tab displays the models that are currently in the scene, and allows you to view and modify model parameters, like their pose. You can also change the camera view angle by expanding the "GUI" option and tweaking the camera pose.

  • INSERT: The Insert tab is where you add new objects (models) to the simulation. To see the model list, you may need to click the arrow to expand the folder. Click (and release) on the model you want to insert, and click again in the Scene to add it.

  • LAYERS: The Layers tab organizes and displays the different visualization groups that are available in the simulation, if any. A layer may contain one or more models. Toggling a layer on or off will display or hide the models in that layer.

The Toolbars

The Gazebo interface has two Toolbars. One is located just above the Scene, and the other is just below.

菜单

 

通过gazebo创建一个机器人

http://gazebosim.org/tutorials?cat=build_robot

Gazebo is able to dynamically load models into simulation either programmatically or through the GUI. Models exist on your computer, after they have been downloaded or created by you. 

由于本人并不是做机械设计等。接下来在仿真用到的机器人都将是直接下载的模型或者加载已有的模型。但感兴趣的reader可以参考上面的连接来看怎么定义自己的机器人。

 

创建一个world仿真环境

http://gazebosim.org/tutorials?cat=build_world

Terminology(术语)

  • World: The term used to describe a collection of robots and objects (such as buildings, tables, and lights), and global parameters including the sky, ambient light, and physics properties.
  • Static: Entities marked as static (those having the <static>true</static> element in SDF), are objects which only have collision geometry. All objects which are not meant to move should be marked as static, which is a performance enhancement.
  • Dynamic: Entities marked as dynamic (either missing the <static> element or setting false in SDF), are objects which have both inertia and a collision geometry.

首先运行gazebo

添加目标

gazebo有两个地方可以添加物体

The first is a set of simple shapes, located above the render window.

The second is via the model database, which is accessible by selecting the Insert tab in the upper left corner.

The pose of each model may be altered through the translate and rotate tools:

 

下载gazebo模型

cd ~/.gazebo/
ls

cd ~/.gazebo/models/

wget http://file.ncnynl.com/ros/gazebo_models.txt

wget -i gazebo_models.txt

(下载比较耗费时间~)

下载完需要解压

ls model.tar.g* | xargs -n1 tar xzvf

解压完后会看到多了很多模型

然后运行下面命令可以删除压缩包(省点空间哈哈)

rm -fr model.tar.g*

因为文件名都是以“rm -fr model.tar.g*”形式命名的,*是数字

添加一系列机器人,结果如下图所示

 

保存创建的world

Once you are happy with a world it can be save through the File menu.

Select the File menu now, and choose Save World As.

A pop-up will appear asking you to enter a new filename. Enter my_world.sdf and click okay.

运行下面命令即可打开之前所创建的文件了

gazebo 文件的绝对路径

 

gazebo仿真环境的特性

In the World tab, select the scene item. A list of scene properties will be displayed in the list box below. Click the triangle to expand the properties.

 

These properties allow you to change the ambient light. Note: The background color will not change if the Sky is enabled.

其实就是改变场景的颜色

Physics Properties

这部分实际上就是一些物理特性,比如中立等等的设置(平时仿真中直接默认就好了)

In the World tab, select the physics item. A list of physics properties will be displayed in the list box below.

  • The enable physics check-box can be used to disable physics while allowing plugins and sensors to continue running.
  • The real time update rate parameter specifies in Hz the number of physics updates that will be attempted per second. If this number is set to zero, it will run as fast as it can. Note that the product of real time update rate and max step sizerepresents the target real time factor, or ratio of simulation time to real-time.
  • The max step size specifies the time duration in seconds of each physics update step.

In the gravity block:

  • The xy and z parameters set the global gravity vector components in m/s^2.

In the solver block:

  • The iterations parameter specifies the number of iterations to use for iterative LCP solvers (used by ODE and bullet).
  • The SOR parameter stands for successive over-relaxation, which can be used to try to speed the convergence of the iterative method.

The constraints block contains several parameters related to solving constraints:

  • The CFM and ERP parameters stands for Constraint Force Mixing and Error Reduction Parameter and are used by ODE and bullet. The CFM and ERP parameters can be related to linear stiffness and damping coefficients. The max velocity and surface layer parameters are used to resolve contacts with a split impulse method. Any contacts with that penetrate deeper than a depth specified by surface layer and have a normal velocity less than max velocity will not bounce.

这个连接是描述这些参数的(http://osrf-distributions.s3.amazonaws.com/sdformat/api/dev.html#physics12)

 

Connect to ROS

(http://gazebosim.org/tutorials?cat=connect_ros)

由于本人学习gazebo的最主要目的就是用于ROS的仿真上,为此这一部分讲一下gazebo跟ROS的联系

关于ROS的介绍,之前的博客已经有讲过了,可以参考《复习笔记之——ROS(robot operating system)》

The set of ROS packages for interfacing with Gazebo are contained within a new meta package (catkin's version of stacks) named gazebo_ros_pkgs.在这个连接里有ROS与gazebo的包(https://wiki.ros.org/gazebo_ros_pkgs)

They provide the necessary interfaces to simulate a robot in Gazebo using ROS messages, services and dynamic reconfigure Some features :

  • Supports a stand alone system dependency of Gazebo, that has no ROS bindings on its own
  • Builds with catkin
  • Treats URDF and SDF as equally as possible
  • Reduces code duplication with Gazebo
  • Improves out of the box support for controllers using ros_control
  • Integrates real time controller efficiency improvements from the DARPA Robotics Challenge
  • Cleans up old code from previous versions of ROS and Gazebo

安装对应版本的gazebo_ros_pkgs

sudo apt-get install ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-control

安装成功

下面来测试一下

Be sure to always source the appropriate ROS setup file, which for melodic is done like so:

source /opt/ros/melodic/setup.bash

Source the catkin setup.

source ~/catkin_ws/devel/setup.bash

然后运行

roscore
rosrun gazebo_ros gazebo
rostopic list

rosservice list

 

采用roslaunch来启动gazebo

The roslaunch tool is the standard method for starting ROS nodes and bringing up robots in ROS. To start an empty Gazebo world similar to the rosrun command in the previous tutorial, simply run

roslaunch gazebo_ros empty_world.launch

关于用roslaunch来启动gazebo有一系列的参数。可以参考(http://gazebosim.org/tutorials?tut=ros_roslaunch&cat=connect_ros)但一般采用默认的,就是直接打开

当然,通过不同的launch文件可以导入不同的world,如下图所示

基于ROS的gazebo深度相机

http://gazebosim.org/tutorials?tut=ros_depth_camera&cat=connect_ros

Because Gazebo and ROS are separate projects that do not depend on each other, sensors from the gazebo_models repository(存储库) (such as depth cameras) do not include ROS plugins by default.

由于ros和gazebo都是分别的project。所以直接从gazebo的模型库中导入的模型是不会带有ROS插件的。这意味着我们需要基于已有的gazebo存储库来创建自己的camera,使得该camera可以发布点云和图像到ROS中

通过这个网址来下载模型(http://bitbucket.org/osrf/gazebo_tutorials/raw/default/ros_depth_camera/files/kinect.zip)这是一个Kinect sensor

由于这个模型本身已经存在gazebo的库里面了,所以将这个包重命名为kinect_ros

To change the model's name, you should update the folder name, the <name> stored in the .config file, and the model name in the model.sdf file.(关于这些文件的介绍可以参考http://gazebosim.org/tutorials?tut=model_contrib&cat=build_robot)

然后添加ROS插件

Now you need to add the ROS plugin to publish depth camera information and output to ROS topics. A list of ROS plugins, with example code, can be found in the plugins tutorial(http://gazebosim.org/tutorials?tut=ros_gzplugins&cat=connect_ros).

在这里我们会使用"Openni Kinect" plugin. You can (and should) use this plugin for other types of depth cameras besides the Kinect (it's an older plugin, and so it retains its old name).

Open the model.sdf file in your new model's directory. Add the following SDF markup inside the <sensor> tag, immediately after the closing </camera> tag:如下图所示

        <plugin name="camera_plugin" filename="libgazebo_ros_openni_kinect.so">
          <baseline>0.2</baseline>
          <alwaysOn>true</alwaysOn>
          <!-- Keep this zero, update_rate in the parent <sensor> tag
            will control the frame rate. -->
          <updateRate>0.0</updateRate>
          <cameraName>camera_ir</cameraName>
          <imageTopicName>/camera/color/image_raw</imageTopicName>
          <cameraInfoTopicName>/camera/color/camera_info</cameraInfoTopicName>
          <depthImageTopicName>/camera/depth/image_raw</depthImageTopicName>
          <depthImageCameraInfoTopicName>/camera/depth/camera_info</depthImageCameraInfoTopicName>
          <pointCloudTopicName>/camera/depth/points</pointCloudTopicName>
          <frameName>camera_link</frameName>
          <pointCloudCutoff>0.5</pointCloudCutoff>
          <pointCloudCutoffMax>3.0</pointCloudCutoffMax>
          <distortionK1>0</distortionK1>
          <distortionK2>0</distortionK2>
          <distortionK3>0</distortionK3>
          <distortionT1>0</distortionT1>
          <distortionT2>0</distortionT2>
          <CxPrime>0</CxPrime>
          <Cx>0</Cx>
          <Cy>0</Cy>
          <focalLength>0</focalLength>
          <hackBaseline>0</hackBaseline>
        </plugin>

As you can see, this plugin allows you a lot of fine-grained control over how the information is passed to ROS. A few points to note:

  • The updateRate parameter should be set to 0, which will cause the plugin to publish depth information as the same rate as the parent SDF sensor. If updateRate is not 0, it will do additional throttling on top of the parent sensor's update rate.
  • The topic names and frameName can be set to whatever you'd like, but the ones shown above match the default topics that are published by commonly used ROS packages, such as openni2_launch. Keeping the topic names the same will help make switching between real and simulated cameras easier.
  • The distortionX parameters should match those in the <distortion> tag of the parent camera. If there is no <distortion> tag, then use 0 for all the distortionX values.
  • pointCloudCutoff and pointCloudCutoffMax is the minimum and maximum distance for points, respectively. No points beyond this distance will be shown. This is an additional restriction to any clipping that has been set in the parent sensor.

Once you've renamed the model, added the above code to your .sdf file, and saved your changes, you should be ready to roll!

接下来测试。

打开gazebo

roslaunch gazebo_ros empty_world.launch

添加model("Kinect ROS" model)

 

然后运行rviz

rosrun rviz rviz

You can also run RViz (rosrun rviz rviz). First, set the RViz Fixed Frame in the left panel's Global Options section to match the value you set for <frameName> in the plugin XML code. Then, add a PointCloud2 and/or an Image display to RViz. For an Image, set the Image Topic to the value you used in the <imageTopicName> tag. For the PointCloud2, set the Topic to the name you used in the <depthImageTopicName> tag. See the screenshot below for an example that matches the values in the example sensor XML above:

结果如下图所示

 

基于ROS的gazebo遥控仿真

(http://emanual.robotis.com/docs/en/platform/turtlebot3/simulation/#gazebo-3d)

在ROS教程里,本身就有基于gazebo的slam仿真。通过这一事例,看看ros和gazebo的关系

为了在Gazebo运行TurtleBot,先安装相关的功能包。要安装的功能包有gazebo_ros_pkgs metapack和turtlebot3_gazebo。前者的功能是连接Gazebo和ROS,已经安装。后者是与TurtleBot3的三维仿真有关的功能包(均已安装)

通过下面命令打开turtlebot3

roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch

添加几个turtlebot3机器人如下图所示

通过下面命令运行一个仿真环境

roslaunch turtlebot3_gazebo turtlebot3_world.launch

然后运行下面命令来用键盘遥控

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

通过下面命令用rviz打开

roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

运行下面命令可以更换机器人的模型

export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo turtlebot3_world.launch

启动机器人(让它自动运动或者键盘遥控)

roslaunch turtlebot3_gazebo turtlebot3_simulation.launch

打开rviz

export TURTLEBOT3_MODEL=waffle
roslaunch turtlebot3_gazebo turtlebot3_gazebo_rviz.launch

如下图所示

但是直接在gazebo环境再添加一个turtlebot3机器人却是不能控制的

新增加的机器人在rviz中是可以看到的

 

 

BUG解决

突然出现的一个bug是,当运行过下面命令来打开创建的gazebo文件后,再输入gazebo无法打开,那篇用rosluanch打开gazebo文件出现的还是创建的环境

gazebo 文件的绝对路径

感觉应该是缓存没有去掉而导致的。运行下面两条命令可以清一下重新打开就可以了。

killall gzserver
killall gzclient

 

 

 

参考资料

http://learn.turtlebot.com/2015/02/03/1/

http://gazebosim.org/tutorials/

https://www.cnblogs.com/linuxAndMcu/p/10876005.html

https://blog.csdn.net/qq_36170626/article/details/90417359

 

 

 

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

ROS学习笔记之——gazebo仿真 的相关文章

  • CMake引入三方库

    做移动端的NDK开发经常需要引入三方库 xff0c 本文以常见的JSON库为例进行说明 jsoncpp源码下载地址https github com open source parsers jsoncpp 下载1 9 5的tag 1 纯源码依
  • C++中泛型算法详解5:面向泛型算法的迭代器类别

    前言 任何算法最基本的特性是要求迭代器提供那些操作 根据算法要求的迭代器操作 xff0c 可以分为如下迭代器类别 xff1a 1 input iterator 2 output iterator 3 forward iterator 4 b
  • CMake&CMakeList.txt

    1 各种关系 在各种开源项目中 xff0c 经常会发现项目中除了代码源文件 xff0c 还包含了 CMakeList txt Makefile 文件 xff0c 在项目的编译时候需要用到的命令有 cmake make 我们本次想搞清楚他们之
  • 使用Docker制作镜像并推送到镜像仓库

    本文会告诉你如何使用docker从远端下载一个镜像 xff0c 然后对镜像做修改 xff0c 最后再把镜像推送到你自己的镜像仓库 1 安装Docker 这个没啥说的 xff0c 根据你自己的环境下载对应的安装包安装就是了 docker官网下
  • Mac上几款免费的MySql客户端

    由于开发需要在Mac上连接MySql数据库 xff0c 虽然命令行也能用 xff0c 但是我还是喜欢用带UI的客户端去连 就用过的mysql客户端来说 xff0c 最好用的是Navicate xff0c 不过后来收费了 xff0c 还收的贼
  • Mac M1芯片安装 Numpy Pandas

    本文教你如何简单的在M1芯片的MacBook上安装Numpy和Pandas 刚入手了一个Mac Pro xff0c 是M1芯片的 xff0c 结果在安装Numpy和Pandas时遇到了各种莫名奇妙的问题 第1种报错 xff0c 很长 xff
  • addr2line

    1 符号表 1 1什么是符号表 符号表是内存地址与函数名 文件名 行号的映射表 符号表元素如下所示 xff1a lt 起始地址 gt lt 结束地址 gt lt 函数 gt lt 文件名 行号 gt 1 2为什么要配置符号表 为了能快速并准
  • 一些有用的Python库

    1 制作动态排序图的库 做出来像这种效果 https mp weixin qq com s DQf35t7PUcFmi3j942Q7A 2 基于matplotlib轻松绘制漂亮的表格 比自己在ppt或者excel中搞出来的表格好看多了 像这
  • Android创建杀不死的Service

    在Android开发中我们经常会遇到一些特殊的需求需要让我们的服务常驻内存 xff0c 但是会遇到各种清理软件或者用户在设置中手动停止程序的情况而导致我们的服务被异常的终止掉 虽然没有办法保证绝对的常驻内存 xff0c 但是通过策略我们还是
  • Mac 从Bash切换到Zsh的注意事项

    1 第一步要安装Zsh xff0c 可以参考现成的文章 xff0c 推荐一篇https zhuanlan zhihu com p 19556676 2 安装完成之后退出命令行重新进入 xff0c 就可以看到Zsh的效果啦 3 及得切换默认的
  • 数组求实际长度(逻辑长度)

    有很多情况下 xff0c 比如我们定义了一个数组 xff0c byte a 61 new byte 100 但是给数组赋值的时候只赋了10个 xff0c 虽然这个数组在内存中的长度仍然是100 xff0c 但是我们想得到的确实数组的实际长度
  • java清空数组

    定义一个数字byte a 61 new byte 20 如果给数组赋值后又想让数组恢复到初始的状态 xff0c 那如何做呢 xff0c 其实很简单 xff0c 直接上方法 将byte数组置空 public static byte reset
  • 使用gazebo的官方模型库文件

    首先下载所有的gazebo模型库文件 xff0c 我已经打包上传到csdn了 xff0c 可以从如下链接中下载 xff1a 下载link 然后将下载好的文件存放在如下目录 xff1a cd gazebo models 如果没有上述目录就自行
  • 作为一个普通的程序员,到底应不应该转型AI工程师?

    动不动就是50万的毕业生年薪 xff0c 动不动就是100万起步价的海归AI高级人才 xff0c 普通员到底应不应该转型AI工程师 xff0c 普通程序员到底应该如何转型AI工程师 xff1f 下面就分享几个特别典型的普通程序员成功转型AI
  • 树莓派Odroid等卡片式电脑上搭建NAS教程系列1-Ubuntu系统安装

    我用的是韩国hardkernel公司做的Odroid XU板子 xff0c 类似于树莓派香蕉派 xff0c 看下它的真面目 相关参数点他 gt Odroid XU 搭建NAS之前先来安装好Ubuntu系统 下载安装文件 在Odroid里安装
  • 立创eda学习笔记一:pcb板基础知识

    整理了一下零基础学习pcb板画图需要了解的一些基础知识 xff0c 否则后面画图很困扰 什么是pcb板 xff1f PCB xff08 Printed Circuit Board xff09 xff0c 中文名称为印制电路板 xff0c 又
  • 立创eda学习笔记二:画pcb板流程(极简入门版)

    一般PCB基本设计流程如下 xff1a 前期准备 gt PCB结构设计 gt PCB布局 gt 布线 gt 布线优化和丝印 gt 网络和DRC检查和结构检查 gt 制版 一 画原理图 完成后检查元件的封装 连线是否正确 核实电路结构 xff
  • 立创eda学习笔记十一:立创eda、立创商城、嘉立创的区别

    简单来说 xff1a 立创eda是一个画原理图和pcb的eda软件 xff0c 类似于ad 立创商城是一个卖元器件网上平台 xff0c 类似于淘宝 嘉立创是一个生产pcb板 给pcb板贴片的生产厂家 一般情况下 xff0c 你可以在立创ed
  • 立创eda学习笔记十七:铺铜

    铺铜是pcb设计很常用的指令 xff0c 或者是必然用到的指令 xff0c 很多时候布线的时候不去画gnd的线 xff0c 把其他线画好了之后 xff0c 再统一铺铜作为gnd xff0c 这样方便很多 铺铜这个概念可以理解为大面积的布线
  • 立创eda学习笔记二十六:手把手教你使用立创eda的官方教程

    可以通过以下办法找到教程 xff1a 1 xff0c 在软件界面点帮助 使用教程 2 xff0c 在网站首页 帮助 教程进入 如何使用教程 xff1a 这里是一级目录 xff0c 其实对新手最有用的是前面3个部分 xff0c 后面的仿真先不

随机推荐

  • 立创eda学习笔记二十四:拼板

    这里主要是两部分 xff1a 自带拼板和手动拼板 xff0c 软件自带拼板功能 xff0c 那么手动拼板当然就是自己重新画图拼板了 一般用自带拼板功能就可以了 xff0c 把单板画好之后很容易就拼好了 xff0c 完全不用动任何器件和丝印编
  • Prometheus实战教程:监控mysql数据库

    今天我们使用prometheus 43 Grafana 43 mysql exporter实现监控mysql数据库各项指标数据 mysql exporter xff1a 采集mysql数据库各项指标数据 prometheus xff1a 获
  • prometheus常用exporter下载地址大全

    1 node exporter下载 https github com prometheus node exporter releases 2 blackbox exporter下载 https github com prometheus b
  • 论文润色 ‖ 一分钟教你如何写好SCI论文里的主题句,事半功倍

    今天 xff0c 小编来分享一下论文润色 xff0c SCI论文的主题句 xff08 Topic Sentences xff09 怎么写 xff1a 01什么是主题句 xff1f 主题句通常是段落开头的一句话 xff0c 是整个段落的小主题
  • Go xml文件处理

    在开发中会常遇到xml数据序列化和反序列化 xff0c 这里我们介绍go语言处理xml数据 encoding xml 包实现了一个简单的xml 1 0解析器 xff0c 可以理解xml名称空间 读取xml 示例 xff1a package
  • UC/OS-III 消息队列

    消息队列 一 消息队列基本概念讲解1 消息队列基本概念2 消息池2 1 消息池概念2 2 消息池初始化2 3 消息队列的运作机制2 4 消息队列的阻塞机制2 5 消息队列的应用场景 二 消息队列创建步骤1 定义消息队列2 创建消息队列 三
  • Altium Designer绘制stm32f103c8t6最小系统原理图

    文章目录 前言芯片封装自定义封装原理图绘制总结 前言 本文提供了初学者绘制stm32最小系统 xff0c 同时初学者的同学可以跟着小白学习绘制原理图哦 芯片封装 提示 xff1a 下载安装好Altium Designer之后才能进行以下操作
  • Jetson Xavier NX安装opencv3.x以及踩过的坑

    Jetson Xavier NX默认安装的是opencv4 x xff0c 在很多项目中其与opencv3 x xff0c 其中opencv3与opencv4中有部分函数是完全不同的 xff08 例如点一些Point的定义 xff0c Cv
  • 【导航算法】无人机路径跟踪L1导航算法

    L1导航算法是非常经典的非线性无人机路径跟随算法 xff0c 最早由MIT于2004年提出 xff0c 论文为 A New Nonlinear Guidance Logic for Trajectory Tracking xff0c 其导航
  • 【人工智能】1.问题求解:状态空间图和盲目搜索

    什么是问题求解 xff1f 问题求解可以理解为利用知识 xff0c 尽可能有效的找到问题的解 xff0c 或者最优解的过程 xff0c 主要包括 xff1a 1 xff09 问题描述方法 xff1a 状态空间法 xff0c 与或树表示法 x
  • 【路径规划】A*三维全局路径规划(附Python实现源码)

    1 A 启发式搜索 A 算法介绍 xff1a 启发式搜索算法 xff0c 除了wiki之外比较全的一个参考资料 xff1a A 启发式搜索算法详解 人工智能 这里是用Python写了一个简单的路径规划例子供参考 2 Matplotlib库
  • 【数据结构】3.图、最小生成树

    一 图的基本概念 1 什么是图 图表示一种多对多的关系 图包括 xff1a 1 xff09 一组顶点 xff1a 通常用 V Vertex 表示顶点集合 2 xff09 一组边 xff1a 通常用 E Edge 表示边的集合 3 xff09
  • 【NLP】主题模型文本分类

    自然语言处理之主题模型文本分类 LDA主题模型 1 主题模型 xff08 Topic Model xff09 主题模型是以非监督学习的方式对文集的隐含语义结构进行聚类的统计模型 主题模型主要被用于自然语言处理中的语义分析和文本挖掘问题 xf
  • 【NLP】Word2Vec模型文本分类

    自然语言处理之词向量模型聚类分析 Word Embedding 词嵌入向量 Word Embedding 是NLP里面一个重要的概念 xff0c 我们可以利用Word Embedding一个单词固定长度向量的表示一种表示形式 Word Em
  • (6.1)Kubernetes的Sevice服务间调用

    1 场景1 选择器 xff08 selector xff09 在k8s上运行了两个pod replicas 2 我们通过Service来整合这两个pod 在创建 Service 时 xff0c 就要通过选择器 xff08 selector
  • 【飞控算法】四旋翼飞行器控制原理与设计入门

    从动力学建模和几个四旋翼核心算法角度分析半自主飞控系统的建立 xff0c 即实现传统四旋翼的姿态控制和高度控制的过程 xff0c 文章主要借鉴了北航多旋翼设计课程 正点原子minifly微型四旋翼的资料 四旋翼无人飞行器设计 清华出版社 x
  • 【开源飞控】匿名飞控TI版解析(1)

    准备电赛的飞控题 xff0c 买来了匿名的飞控学习一下 xff0c 这里整理了一下匿名飞控中比较关键的几部分 xff0c 学习了一下原理 xff0c 然后代码解读都写注释里了 xff0c 篇幅较长 目录 一 遥控器信号接收 1 代码解读 2
  • 【开源飞控】匿名飞控TI版解析(2)

    因为电赛 xff0c 买来匿名飞控研究一下 xff0c 感觉相比其他的一下开源飞控 xff0c 易开发性和稳定性都是比较好的 xff0c 但就是比较贵 匿名TI版飞控是从32版改过来的 xff0c 硬件上就换了个芯片 xff0c 程序里也有
  • ROS中机器人与电脑的网络配置

    打开网络连接菜单 xff1a 选择网络 xff0c 输密码 并连接 xff08 以350502为例 xff0c 这里我就不连进去这个WiFi了 xff0c 还是连回402 xff0c 意思到了就行 xff09 查看连接信息 xff08 GU
  • ROS学习笔记之——gazebo仿真

    本博文是本人学习gazebo的学习记录 Gazebo是一款3D仿真器 xff0c 支持机器人开发所需的机器人 传感器和环境模型 xff0c 并且通过搭载的物理引擎可以得到逼真的仿真结果 Gazebo是近年来最受欢迎的三维仿真器之一 xff0