SLAM从入门到精通(robot上层软件开发)

news2024/12/28 21:10:26

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        前面我们了解到,ros系统基本上都是依赖于ubuntu和linux来运行的。如果ros是只是跑在机器人的系统上面,不涉及到上层交互,这些都问题不大。但如果做成产品,发布出去,这样就会或多或少有点麻烦。因为大多数fae、或者客户,他们的系统都是windows系统,很少用linux系统。毕竟客户本身通常只是专注于自己的业务,如果是非专业人士,很少会涉及到linux系统。

        既然是在windows侧的软件系统开发,那么开发的路径就很多了。一般来说,基本上就是qt、c#、web开发这些。因为我们用ros开发本身就是用c++开发的,所以,这里我们先说明用qt开发上位机,后面会讨论下其他方法。

1、qt上位机的好处

        qt本身支持多平台,不仅仅是windows,它对linux和mac也非常支持,跨平台方面几乎是非常优秀。

2、qt和ros通信的方法

        qt是运行在windows系统上面,ros是运行在linux系统上面。那么这个时候如果需要他们之间进行通信,有两种办法。第一种办法就是自定义通信协议,这样的协议就是私有协议,稍微麻烦点;还有一种就是直接用xmlrpc进行通信。这种通信方法一般都是基于tcp来完成的,对网络要求较高。

3、ros底层的适配

        如果上层用windows系统的话,底层又需要ros开发,ros这边就需要开发一个适配包。它负责接收windows过来的所有命令,并且返回结果;对ros下面,则负责命令分发和收集反馈。有了这么一个流程,ros系统相当于和上位机就做了切割,每一部分专注于完成自己的事情就ok了。

4、qt开发方法

        qt有两种开发方法,一种是用qt creator + mingw来进行开发,这种开发方法不依赖于visual studio;另外一种开发方法是qt + ms visual studio,这相当于大部分代码还是通过vs来进行编写调试的。

5、更推荐的一种开发方法

        如3所示,开发的语言还是用的c++。那么这个时候,有人会说,如果不想用c++,但是想用qt开发应该怎么做?方法就是使用python+qt的方法进行处理。这个时候qt本身就是一层皮,主要的逻辑最好还是用c/c++进行开发,这样至少说可以保证效率。

6、从招人角度说怎么开发

        如果说ros用c++开发,这是没办法的事情,但是windows层面进行界面开发,如果还是选用c++,这样从招聘角度来说并不合适。市场上面合适的c++开发人员并不多,而上位机这块供给充足的开发人员其实是c#。一方面c#语法简单,特别容易上手,另外一方面c#第三方库特别丰富,c#&wpf几乎是界面开发的标配。

        此外上位机本来就是业务导向为主,因此对开发人员的要求不宜过高。而c#恰恰可以帮助我们弥补这方面的不足,让开发人员专注于业务,专注于服务本身。

7、上位机开发的内容

        上位机开发的内容主要和内容相关,基本技术一般有配置加载、多线程、图形界面、数据库、网络通信、日志打印、传感器标定、任务监控等内容。具体的内容还要看实际的需求,这方面不同语言的开发流程都是差不多的。

8、其他的开发方法

        当然除了上位机,也可以用web进行开发。这个时候,前后端就会分离开来。比如说,前端主要侧重于交互部分,而后端则侧重于业务逻辑部分。如果业务不复杂的话,用element ui + webpy开发也是不错的一个选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1123443.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LeetCode:1402. 做菜顺序、2316. 统计无向图中无法互相到达点对数

1. 1402 做菜顺序 题目详细为: 一个厨师收集了他 n 道菜的满意程度 satisfaction ,这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间(包含之前每道菜所花费的时间)乘以这道菜…

外汇天眼:本周无牌裸奔平台名单出炉,你踩“坑”了么?!!

监管信息早知道!外汇天眼将每周定期公布监管牌照状态发生变化的交易商,以供投资者参考,规避投资风险。如果平台天眼评分过高,建议投资者谨慎选择,因为在外汇天眼评分高不代表平台没问题! 以下是监管牌照发生…

Gartner发布2024 年十大战略技术趋势

10月17日,Gartner 发布2024年企业机构需要探索的****十大战略技术趋势。Gartner研究副总裁Bart Willemsen表示:“由于技术变革以及社会经济方面的不确定性,我们必须大胆采取行动并从战略上提高弹性,而不是采取临时措施。IT领导者的…

塔望3W消费战略全案丨九代拉祜人,一饼古树茶

存木香 客户:云南双江存木香茶叶商贸有限公司 品牌:存木香 时间:2019年 (项目部分内容保密期) 沧海桑田 存木香依然 存木香 CUNMUXIANG( 全称云南双江存木香茶业有限公司 ), 成立于2011 年 , 总部设于北回归线横…

小红书内测「群AI」功能;大模型技术图谱;曾鸣「看十年」智能商业演讲实录;GPT最佳实践-大白话编译版 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 小红书内测「群AI」功能,可以创建虚拟角色并加入群聊 小红书正在内测「群AI」新功能。日报根据站内分享贴拼出了一份教程&…

C++并发编程(1)-- 多线程的基础知识

1 进程、线程和协程 (1)进程 进程可以简单理解成正在执行的一个程序,比如你电脑上运行的QQ、360杀毒软件等就是进程。 进程是程序资源管理的最小单位。 进程会管理那些资源呢?通常包括内存资源、IO资源、信号处理等。 这里对…

众和策略:华为汽车概念活跃,圣龙股份斩获12板,华峰超纤涨10%

华为轿车概念23日盘中再度生动,到发稿,华峰超纤涨超10%,佛山照明、圣龙股份、隆基机械、银宝山新等涨停,赛力斯涨近6%。 值得注意的是,圣龙股份已接连12个交易日涨停。 昨日晚间,圣龙股份宣布前三季度成果…

Cisco交换机关于DHCP SNOOPING的配置指令

在Cisco交换机上配置DHCP Snooping(DHCP欺骗防护) DHCP Snooping的作用 DHCP Snooping是一项重要的网络安全功能,可用于维护网络的安全性和可靠性,减少潜在的网络问题,并提供日志和监控功能,以便网络管理…

【Servlet】实现Servlet程序

文章目录 1. 最朴素方式1. 创建项目2. 引入依赖3. 创建目录4. 编写代码5. 打包程序6. 部署程序7. 验证程序 2. 更方便方式1. 安装Smart TomCat插件2. 启动 1. 最朴素方式 1. 创建项目 选择Maven项目 2. 引入依赖 Maven项目创建完后会生成一个pom.xml文件,我们可…

rancher2.6.4配置管理k8s,docker安装

docker快速安装rancher并管理当前k8s集群。 1、拉镜像 docker pull rancher/rancher:v2.6.4 2、启动rancher 启动很慢 --privileged必须拥有root权限,并挂载卷 docker run --privileged -d --restartunless-stopped -p 80:80 -p 443:443 -v /usr/local/docker_vo…

rocketmq集群部署DLedger Controller

目录 rockermq集群部署DLedger Controller到官网下载rockermq集群模式:3切片主从建目录配置Nameserver先修改内存 启动NameServer停止NameServer配置Broker启动Broker启动管制台直接docker 启动即可,修改 -e 后面 nameserver 参数即可端口列表导入 rocke…

h5插件_h5页面嵌入客户端调试

当h5页面嵌入客户端之后&#xff0c;若是遇到问题无法调试&#xff0c;比如点击按钮无反应 —> 但是开发却看不到控制台、看不到接口返回值… 此时可以使用调试工具来查看… edura 引入1 <script src"https://cdn.jsdelivr.net/npm/eruda"></script&g…

向某文件中逐秒追加带序号输入当前时间 fgets fputs fprintf sprintf

//向某文件中逐秒追加带序号输入当前时间 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include <unistd.h> int main(int argc, char const *argv[]) { time_t tv; // time(&tv);//法1:获取秒数 …

2023面试经典 Redis未授权漏洞与组合拳

文前漫谈 之前面试里碰见过&#xff0c;属于面试经典了&#xff0c;有空了了解一下 2015年的洞了&#xff0c;从以前乌云一个师傅的文章那了解到 Redis 有关的漏洞具有明显的时间分段性&#xff0c;在15年11月之前&#xff0c;主要是未授权导致的数据泄露&#xff0c;获得一些…

自增还是UUID,数据库主键的类型该如何选择?

一、自增(auto_increment)和UUID优缺点 自增 &#xff08;auto_increment&#xff09;的优点: 1.字段长度较uuid小很多&#xff0c;可以是bigint甚至是int类型&#xff0c;这对检索的性能会有所影响。 2.在写的方面&#xff0c;因为是自增的&#xff0c;所以主键是趋势自增的&…

小游戏外包开发流程及费用

小游戏的开发流程和费用会因项目的规模、复杂性和所选技术平台而有所不同。以下是一般的小游戏开发流程和可能的费用因素&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 开发流程&#xff1a; 概念和…

Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包

Gradle中&#xff0c;没有Assemble任务 1. 在编译aar包或者编译module的时候&#xff0c;没有release包&#xff0c;我们一般都是通过assemble进行编译。 如果在Gradle中找不到task。 可以通过设置File->setting -->Experimental→取消勾选“Do not build Gradle task …

TransactionScope的使用

TransactionScope的使用 简介1. 命名空间2.创建事务范围3.嵌套事务4.事务提交和回滚5.支持分布式事务6.配置选项7.资源管理器8.分布式事务协调器 应用1.未设置分布式事务2.设置分布式事务 简介 TransactionScope 是 .NET Framework 和 .NET Core 中的一个类&#xff0c;用于简化…

Java数组—精讲篇

Java数组—精讲篇 先进行专栏介绍 二维数组定义格式初始化静态初始化动态初始化 举例声明并初始化一个3行4列的整型二维数组访问二维数组元素访问二维数组array中第2行第3列的元素 遍历二维数组遍历二维数组array并打印每个元素的值强调 应用举例总结 程序展示二维数组元素打乱…

ThingsBoard的版本控制整合gitee

1、注册gitee账号,创建自己的空间,并且创建一个用于存储ThingsBoard相关的仓库 2、进入ThingsBoard的租户层,然后找到版本控制,进行配置 输入gitee的仓库地址 仓库URL:指定你的gitee的参考地址 仓库分支:master 身份验证:密码、访问令牌 用户名:登录账号 密码/访问令…