Gitee

用 Python 打造无人机战争仿真平台

陌路散爱 提交于 2021-02-06 00:39:31
智能无人机路径规划仿真系统是一个具有操作控制精细、平台整合性强、全方向模型建立与应用自动化特点的软件。 它以A、B两国在C区开展无人机战争为背景,该系统的核心功能是通过仿真平台规划无人机航线,并进行验证输出,数据可导入真实无人机,使其按照规定路线精准抵达战场任一位置,支持多人多设备编队联合行动。 视频简介 一、主要特点 系统以开源无人机仿真平台SITL为支撑,通过FlightGear渲染真实战场环境,集成了动力学模型建模、二维俯视、三维模拟、脚本控制、地面站监控、数据处理等功能,此外,仿真系统支持加载多种全球地图,模拟各大重点地域的三维环境,可应用于全球各处遥感监测的场景中。 1. 软件界面 软件界面 2. 软件架构(部分扩展功能的插件待实现) 软件架构 3. 代码编写 代码编写 4. 多维视图 二维视图(一) 二维视图(一) 二维视图(二) 二维视图(二) 三维视图 三维视图 5. 无人机控制 控制台控制 控制台控制 智能控制 智能控制 地面站控制 地面站控制 6. 制定飞行任务 飞行任务(一) 飞行任务(一) 飞行任务(二) 飞行任务(二) 飞行任务(三) 飞行任务(三) 二、解决问题 智能无人机路径规划仿真系统解决了普通无人机无法精准规划路径的问题,且普通无人机不够托底,不便控制,难以运用于实际战争。本软件可以预先为飞行任务设计航线

【刷穿 LeetCode】17. 电话号码的字母组合(中等)

爱⌒轻易说出口 提交于 2021-02-04 17:51:40
题目描述 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 输入:"23" 输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. 说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 DFS 回溯解法 对于字符串 ds 中的每一位数字,都有其对应的字母映射数组。 在 DFS 中决策每一位数字应该对应哪一个字母,当决策的位数 i == n ,代表整个 ds 字符串都被决策完毕,将决策结果添加到结果集: class Solution { Map<String, String[]> map = new HashMap<>(){{ put("2", new String[]{"a", "b", "c"}); put("3", new String[]{"d", "e", "f"}); put("4", new String[]{"g", "h", "i"}); put("5", new String[]{"j", "k", "l"}); put("6", new String[]{"m", "n", "o"}); put("7", new String[]{"p", "q", "r", "s"}); put(

【每日算法】【刷穿 LeetCode】22. 括号生成(中等)

半世苍凉 提交于 2021-02-04 14:18:52
点击 这里 可以查看更多算法面试相关内容~ 题目描述 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。 示例 1: 输入:n = 3 输出:["((()))","(()())","(())()","()(())","()()()"] 示例 2: 输入:n = 1 输出:["()"] 提示: 1 <= n <= 8 DFS 解法 既然题目是求所有的方案,那只能爆搜了,爆搜可以使用 DFS 来做。 从数据范围 1 <= n <= 8 来说, DFS 应该是稳稳的 AC。 这题的关键是我们要从题目中发掘一些性质: 括号数为 n ,那么一个合法的括号组合,应该包含 n 个左括号和 n 个右括号,组合总长度为 2n 一对合法的括号,应该是先出现左括号,再出现右括号。那么意味着 任意一个右括号的左边,至少有一个左括号 其中性质 2 是比较难想到的,我们可以用反证法来证明性质 2 总是成立: 假设某个右括号不满足「其左边至少有一个左括号」,即其左边没有左括号,那么这个右括号就找不到一个与之对应的左括号进行匹配。 这样的组合必然不是有效的括号组合。 使用我们「20. 有效的括号(简单)」的思路(栈)去验证的话,必然验证不通过。 掌握了这两个性质之后,我们可以设定一个初始值为 0 的得分值,令往组合添加一个 ( 得分值 + 1,往组合添加一个 ) 得分值

感谢有你! Linux Foundation APAC服务中国,为会员打造更健康的开源生态

。_饼干妹妹 提交于 2021-02-04 03:24:44
感谢有你 ! Linux Foundation APAC 服务中国 为会员打造更健康的开源生态 Linux Foundation APAC (LFAPAC)自成立以来,不知不觉已经为中国开源社区服务 多 年 了。 作为一个开源技术的布道者,我们每一位同事都对开源充满了热爱,这些年我们一直不断通过各种渠道持续地关注大家感兴趣的开源技术,努力学习这些开源技术并推广给身边的朋友们。当我们看到越来越多的中国公司拥抱开源,努力成为全球开源的领跑者,我们也开始在调整我们的角色! 开源人才教育者 一个开源项目的成功有很多因素,除了优良的技术和一个稳定的项目核心团队之外,还需要能够凝聚一个强大的开源社区。 一直以来,开发者如果希望学习一个开源技术,往往需要花大量的时间在网上搜索资料,在交流群看专家分享,在GitHub上阅读文档,就算是K8s这样明星级的项目,有海量资源可以让我们看到饱,但是在这个资讯爆炸的年代,快速掌握准确的资讯才是关键! 还有一些关键项目因为地域,语言,人才和技术复杂度等原因,大家可以找到的有用资料并不多。 为了降低进入开源项目的门槛和提高学习新技术的效率, LFAPAC 引入 Linux基金会开源软件大学, 联合技术源头的专家为关键开源项目设计和开发了一系列的线上和线下认证课程,通过标准化技术认证培训来加速技术的推广和普及。 Linux

你都知道那些Kafka副本机制?

爷,独闯天下 提交于 2021-02-02 14:36:22
前言 在日常开发过程中使用kafka来实限流削峰作用但是往往kafka会存放多份副本来防止数据丢失,那你知道他的机制是什么样的吗?本篇文章就带给大家讲解下。 一、Kafka集群 Kafka 使用 Zookeeper 来维护集群成员 (brokers) 的信息。每个 broker 都有一个唯一标识 broker.id ,用于标识自己在集群中的身份,可以在配置文件 server.properties 中进行配置,或者由程序自动生成。下面是 Kafka brokers 集群自动创建的过程: 每一个 broker 启动的时候,它会在 Zookeeper 的 /brokers/ids 路径下创建一个 临时节点 ,并将自己的 broker.id 写入,从而将自身注册到集群; 当有多个 broker 时,所有 broker 会竞争性地在 Zookeeper 上创建 /controller 节点,由于 Zookeeper 上的节点不会重复,所以必然只会有一个 broker 创建成功,此时该 broker 称为 controller broker。它除了具备其他 broker 的功能外, 还负责管理主题分区及其副本的状态 。 当 broker 出现宕机或者主动退出从而导致其持有的 Zookeeper 会话超时时,会触发注册在 Zookeeper 上的 watcher 事件,此时 Kafka

企业是如何解决HDFS单点问题的?

為{幸葍}努か 提交于 2021-02-02 12:40:28
前言 在早期Hadoop刚出来的时候是没有解决HDFS单点问题的,这就意味着当NameNode的服务器宕机了就会导致整个集群瘫痪,这是非常危险的于是在Hadoop不断的更新下提出了Hadoop HA来解决NameNode单点问题,接下来我们就来聊一聊。 解决HDFS单点问题解决方案 解决HDFS点单问题其实可以部署两个NameNode,但是真正对外服务只有一个,部署两个NameNode那他们之间的元数据信息是不是需要共享元数据信息呀,不然当其中一个NameNode挂掉了元数据信息没有同步不就会有问题。 根据appche提出的解决方案目前有三种解决方案如下 方案一、目录共享 目录共享是在appche社区中提出但是现在没有引用,目录共享也是一个单点问题,如果当目录共享挂掉了是不是也会导致HDFS挂掉。所以就被一些企业抛弃了。 方案二、使用JournalNode方案 我们使用JN来保存元数据信息就不会造成单点问题,JN也是一个集群,我们一般部署JN一般会选择基数例如3,5,7,9等。JN有一个政策只要存活的节点大于 二分之一 就是一个正常的服务。 注意: 我们不要为了解决NameNode的单点问题选择的的组件也是单点问题,这个根本还是没有解决。 JN中的信息都是一样的,那为什么也是其中的一个NameNode就是写数据其中一个就是读取数据那? 其实NameNode也是有角色之分的写的为

【刷穿 LeetCode】20. 有效的括号(简单)

梦想的初衷 提交于 2021-02-02 11:50:25
题目描述 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。 示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true 栈 + 哈希表解法 这是道模拟题,同一类型的括号,一个右括号要对应一个左括号。 不难发现可以直接使用 栈 来解决: class Solution { HashMap<Character, Character> map = new HashMap<Character, Character>(){{ put(']', '['); put('}', '{'); put(')', '('); }}; public boolean isValid(String s) { Deque<Character> d = new ArrayDeque<>(); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '(' || c ==

MyBatis架构和源码

孤街浪徒 提交于 2021-02-02 07:25:56
Mybatis架构解读 1. 架构图 如题,这就是 MyBatis 的执行架构图。 解释一下: 我们在使用 MyBatis 的 CRUD 操作的时候,一般有两种方式,一、直接调用 sqlSession 的 crud 方法;二、通过调用 getMapper 获取到接口代理的实现类,然后在代理方法中调用了 crud 方法。 可以看到,本质相同,最终调用的都是 sqlSession 的方法,上图就是 CRUD 执行的流程 2. 执行流程图 我们先来看一下我们执行一个 MyBatis 的查询,需要做什么。 //加载一个配置文件 InputStream resourceAsStream = Resources.getResourceAsStream( "main.xml" ); SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder(); SqlSessionFactory build = sqlSessionFactoryBuilder.build(resourceAsStream); SqlSession sqlSession = build.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper

为什么不能使用for循环遍历Queue

ε祈祈猫儿з 提交于 2021-02-01 15:07:54
为什么不能使用for循环遍历Queue 昨天有个朋友问我一道算法题,给出了他和答案的两个版本,这道题我看过,并查集问题,左看右看就是没发现它有问题,于是进行 debug ,发现数据读取没有问题,于是继续判断合并是否有误,发现也没有问题,最后发现他使用的 PriorityQueue 他使用的 for 循环进行遍历,好家伙,我当场好家伙! 1. 遍历 public static void main(String[] args) { // 默认是小顶堆 PriorityQueue<Integer> queue = new PriorityQueue<>(Arrays.asList(1, 5, 3, 7, 8, 6, 9, 2)); for (Integer num : queue) { System.out.print(num+" "); } } 上面的程序有不少人会以为输出的结果为 1 2 3 5 6 7 8 9 ,但是实际上呢,输出结果为: 1 2 3 5 8 6 9 7 2. 原因 原因的话,学过堆排序的朋友就应该知道,在 PriorityQueue 中实际上内部是维持着一棵二叉排序树,利用堆排序的规则实现的,具体的可以看 PriorityQueue 的源码,实际上树是一种虚拟出来的数据结构,底层都是基于数组实现的。只是对于左右节点的访问采用了不同的下标规则。 当我们使用 for

Postman+Newman+Git+Jenkins实现接口自动化测试持续集成

这一生的挚爱 提交于 2021-02-01 08:02:55
接口测试脚本一般的执行流程 做接口测试的话,首先要考虑的是如何选择一个合适的工具? 在忽略工具是否好用,是否能满足业务要求的前提下,需要考虑以下2点: 1、要考虑工具的学习成本 2、要考虑团队的协作  接口测试脚本的执行流程: 团队成员协作编写接口用例->用例归档到git/svn->脚本集成jenkins,在环境更新后自动触发执行或定时执行。 Postman工具常见的接口测试流程是怎样的? 使用Postman+Newman+Git+Jenkins+钉钉 /邮件提醒 Windows系统Newman安装 1、下载Node.js进行安装,然后配置node的环境变量 2、借助npm工具,安装Newman npm install -g newman 3、运行Newman 通过Newman来运行某个postman脚本: newman run mycollection.json 用newman执行postman脚本的效果如下: Centos系统Newman安装 1、先下载安装nodejs ( 必须安装10.0以上的版本 ) 从http://nodejs.cn/download/下载linux系统压缩包 ,,解压,配置环境变量 tar xvJf ***.tar.xz echo "export PATH=\"\$PATH:/root/tools/node-v14.8.0-linux-x64/bin\