自组装mid360便捷化bag包采集设备

一、问题一:电脑太重,换nuc

采集mid360数据的过程中,发现了头疼的问题,得一手拿着电脑,一手拿着mid360来采集,实在是累胳膊。因此,网购了一个intel nuc, 具体型号是12wshi5000华尔街峡谷nuc12i5厚版,买来之后,发现有点坑爹,windows系统下驱动啥都都挺全的,但是ubuntu下驱动貌似不全,1)有线网识别不了(也就是直接把mid360的网口数据线插到nuc上,识别不出来,差点导致我放弃了)。2)一直报opengl错误,也不知道该如何解决。

1.好在买了一个网口转usb的转换接口,插到电脑后发现可以采集数据了,但是opengl问题导致用./LivoxViewer.sh还是无法启动显示。考虑到只是采集数据,因此足够了。

2.其实换个jetson nano会不会更好,我感觉会更好,至少不用考虑opengl能不能用问题。另外jetson nano一般供电是5v,这样和屏幕供电是一样了。但是买完nuc已经是下了血本,无钱购买jetson nano了,算了,凑合用吧,争取发篇论文。

二、问题2:不可能在数据采集过程中把鼠标键盘全部带着

因此需要做一个 开机自启动软件,用QT来做,具体的代码如下:

mainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QWidget>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public:
    QPushButton*  m_launchBtn;
    QPushButton*  m_recordBtn;
    QPushButton*  m_killRecordBtn;
    QWidget* m_widget;

public slots:
    void launchBtn_clicked();
    void recordBtn_clicked();
    void killRecordBtn_clicked();
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainWindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    m_widget = new QWidget(this);
    this->setCentralWidget(m_widget);


    m_launchBtn = new  QPushButton(QString::fromUtf8("启动launch"),this);
    m_recordBtn = new  QPushButton(QString::fromUtf8("开始录包"),this);
    m_killRecordBtn = new  QPushButton("结束录包",this);

//    m_launchBtn->setGeometry(200,200,100,50);
//    m_recordBtn->setGeometry(300,200,100,50);
//    m_killRecordBtn->setGeometry(400,200,100,50);


    //
    QVBoxLayout *pVLayout = new QVBoxLayout(this);

    pVLayout->addWidget(m_launchBtn);
    pVLayout->addWidget(m_recordBtn);
    pVLayout->addWidget(m_killRecordBtn);


    m_widget->setLayout(pVLayout);


    connect(m_launchBtn,SIGNAL(clicked()),this,SLOT(launchBtn_clicked()));
    connect(m_recordBtn,SIGNAL(clicked()),this,SLOT(recordBtn_clicked()));
    connect(m_killRecordBtn,SIGNAL(clicked()),this,SLOT(killRecordBtn_clicked()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void record_rosbag_btn()
{
//    std::string path = "./bag_name.bag";
//    std::string topics = " /top2record";
//    std::string node_name = " __name:=my_record_node";
//    std::string cmd_str = "gnome-terminal -x bash -c 'rosbag record -O " + path + topics + node_name + "'";
//    int ret = system(cmd_str.c_str()); // #include <stdlib.h>
}

void kill_rosbag_record()
{
//#include <ros/ros.h>

//ros::V_string v_nodes;
//ros::master::getNodes(v_nodes);

//std::string node_name = std::string("/my_record_node");
//auto it = std::find(v_nodes.begin(), v_nodes.end(), node_name.c_str());
//if (it != v_nodes.end()){
//    std::string cmd_str = "rosnode kill " + node_name;
//    int ret = system(cmd_str.c_str());
//    std::cout << "## stop rosbag record cmd: " << cmd_str << std::endl;
//}

}


// 参考网站:https://blog.csdn.net/qq_25368751/article/details/102594811?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-102594811-blog-83106748.235^v43^pc_blog_bottom_relevance_base8&spm=1001.2101.3001.4242.1&utm_relevant_index=1
void MainWindow::launchBtn_clicked()
{

    QMessageBox::information(nullptr,"launch start","COntent",QMessageBox::Yes|QMessageBox::No,
                             QMessageBox::Yes);

    system("gnome-terminal -x bash -c 'source ~/ws_livox/devel/setup.bash; roslaunch livox_ros_driver2 msg_MID360.launch'&");
    return;
}

void MainWindow::recordBtn_clicked()
{
//    QMessageBox::information(nullptr,"launch start","record",QMessageBox::Yes|QMessageBox::No,
//                              QMessageBox::Yes);

//    std::string cmd_str = "gnome-terminal -x bash -c 'rosbag record -a'&";
//    system(cmd_str.c_str()); // #include <stdlib.h>
    return;
}

void MainWindow::killRecordBtn_clicked()
{
//    QMessageBox::information(nullptr,"launch start","killRecord",QMessageBox::Yes|QMessageBox::No,
//                             QMessageBox::Yes);
    return;
}



界面长这样:

其中开始录包和结束录包没用。

直接点启动launch就可以。

三、需要做成开机自启动,否则意外断电后,再开机没有鼠标键盘也是个尴尬事情

主要参考:Ubuntu执行文件 开机自启动设置方法_乌班图自启动文件-CSDN博客

1.使用 cd 命令进入 /etc/xdg/autostart目录,可以看到里面有很多 .desktop文件

2.使用 cp 命令任意复制其中一个 .desktop文件至当前目录下,以便修改使用

sudo cp xx.decktop  qt_mid360.desktop

3.打开刚刚复制的文件,修改其中的内容:sudo gedit qt_mid360.desktop

                可以只保留下面四项:

                Name:执行程序的名字

                Exec:执行程序的路径+执行程序的名字

                Type和NoDisplay修改如下。

四、设置msg_MID360.launch自动录制包

找到 ws_livox/src/livox_ros_driver2/launch_ROS1中的 msg_MID360.launch文件,设置rosbag_enable为true,就可以同时启动数据采集和包录制了。

五、开机不要开机密码了,避免使用键盘

参考:Ubuntu取消开机密码自动登录_ubuntu如何取消密码登陆-CSDN博客

设置----详细信息----用户---在菜单栏中的【解锁】---输入密码---打开自动登录

六、组装设备

买一个支架可以支撑mid360,并且能够手握着。

买三块电池,nuc供电需要20v,需要买20v的电池。mid360需要供电9-27v可以用20v的电池。还有一个是要买一个触屏,手指头点击可以关闭终端。

再买个布包和一个背带绳子。

背着主机+电池,屏幕固定在mid360的支架上,qt程序开机自启动,启动后,点击launch开始,就可以开始采集数据了,然后手指点击关闭触屏中的终端,一个包包就录制完毕了。

凑合能用吧。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python私教张大鹏 PyWebIO通过事件回调实现表格的编辑和删除功能

从上面可以看出&#xff0c;PyWebIO把交互分成了输入和输出两部分&#xff1a;输入函数为阻塞式调用&#xff0c;会在用户浏览器上显示一个表单&#xff0c;在用户提交表单之前输入函数将不会返回&#xff1b;输出函数将内容实时输出至浏览器。这种交互方式和控制台程序是一致的…

在Ubuntu 18.04.6 LTS 交叉编译生成Windows 11下的gdb 8.1.1

1. 安装mingw sudo apt-get install mingw-w64 2. 下载 gdb 8.1.1源码 https://ftp.gnu.org/gnu/gdb/gdb-8.1.1.tar.gz 解压命令 tar -xf gdb-8.1.1.tar.gz 进入目录,创建build目录: hq@hq:~/gdb-8.1.1/build$ 执行配置 ../confi

视频云计算的未来发展趋势:智能化、个性化与云端协同助力智慧城市安防监控

随着信息技术的飞速发展&#xff0c;云计算作为一种全新的服务模式&#xff0c;正在改变我们处理数据和信息的方式。而视频云计算技术&#xff0c;作为云计算领域的一个重要分支&#xff0c;以其独特的优势&#xff0c;正在逐步渗透到我们生活的各个领域。 一、视频云计算技术…

[leetcode hot 150]第一百二十二题,买卖股票的最佳时机Ⅱ

题目&#xff1a; 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有 一股 股票。你也可以先购买&#xff0c;然后在 同一天 出售。 返回 你能获得的 最大…

javaScript利用indexOf()查找字符串的某个字符出现的位置

1 创建字符串 2 利用indexof()查询字符串的字符 3 利用while循环判断indexOf是否等于-1&#xff0c;不等于-1就打印一次并且索引号1去查下一个字符 //创建字符串var str1234567812311231;var indexstr.indexOf(1);//查询该字符while(index !-1)//indexOf()没有查到会返回-1{…

企业本地大模型用Ollama+Open WebUI+Stable Diffusion可视化问答及画图

最近在尝试搭建公司内部用户的大模型,可视化回答,并让它能画图出来, 主要包括四块: Ollama 管理和下载各个模型的工具Open WebUI 友好的对话界面Stable Diffusion 绘图工具Docker 部署在容器里,提高效率以上运行环境Win10, Ollama,SD直接装在windows10下, 然后安装Docker…

Linux中彩色打印

看之前关注下公众号呗 第1部分&#xff1a;引言 1.1 Python在文本处理中的重要性 Python作为一种广泛使用的高级编程语言&#xff0c;以其简洁的语法和强大的功能在文本处理领域占有一席之地。无论是数据清洗、自动化脚本编写&#xff0c;还是复杂的文本分析&#xff0c;Py…

甄选范文“论云上自动化运维及其应用”,软考高级论文,系统架构设计师论文

论文真题 云上自动化运维是传统IT运维和DevOps的延伸,通过云原生架构实现运维的再进化。云上自动化运维可以有效帮助企业降低IT运维成本,提升系统的灵活度,以及系统的交付速度,增强系统的可靠性,构建更加安全、可信、开放的业务平台。 请围绕“云上自动化运维及其应用”…

Typora failed to export as pdf. undefined

变换版本并没有用&#xff0c;调整图片大小没有用 我看到一个博客后尝试出方案 我的方法 解决&#xff1a;从上图中的A4&#xff0c;变为其他&#xff0c;然后变回A4 然后到处成功&#xff0c;Amazing&#xff01; 参考&#xff1a; Typora 导出PDF 报错 failed to export…

识图生成代码:通义千问vsGPt4o,有点小崩

今日对比一下通义千问和GPt4o&#xff0c;在通过识别图片然后去生成前端代码 在当今ai的时代&#xff0c;通过ai去生成页面的代码可以很大的提高我们的开发效率下面是我们要求的生成的图片截图&#xff0c;这是掘金的榜单 效果对比 首先我们使用通义千问&#xff0c;让他去帮我…

Tesseract Python 图片文字识别入门

1、安装tesseract Index of /tesseract https://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-w64-setup-v5.3.0.20221214.exe 2、安装中文语言包 https://digi.bib.uni-mannheim.de/tesseract/tessdata_fast/ 拷贝到C:\Program Files\Tesseract-OCR\tessdata 3、注…

Linux基础 - BIND加密传输缓存服务器

目录 零. 简介 一. 安装 二. 安全的加密传输 三. 部署缓存服务器 四. 总结 零. 简介 BIND&#xff08;Berkeley Internet Name Domain&#xff09;是一款广泛使用的开源 DNS&#xff08;域名系统&#xff09;服务器软件。 域名系统的主要作用是将易于人类理解的域名&…

《昇思25天学习打卡营第12天 | 昇思MindSpore基于MindSpore的GPT2文本摘要》

12天 本节学习了基于MindSpore的GPT2文本摘要。 1.数据集加载与处理 1.1.数据集加载 1.2.数据预处理 2.模型构建 2.1构建GPT2ForSummarization模型 2.2动态学习率 3.模型训练 4.模型推理

Windows怎么实现虚拟IP

在做高可用架构时&#xff0c;往往需要用到虚拟IP&#xff0c;在linux上面有keepalived来实现虚拟ip的设置。在windows上面该怎么弄&#xff0c;keepalived好像也没有windows版本&#xff0c;我推荐一款浮动IP软件PanguVip&#xff0c;它可以实现windows上面虚拟ip的漂移。设置…

MySQL学习(3):SQL语句之数据定义语言:DDL

1.SQL通用语法与分类 &#xff08;1&#xff09;通用语法 &#xff08;2&#xff09;分类 2.DDL 2.1数据库操作 show DATABASES; #查询所有数据库select DATABASE(); #查询当前数据库create DATABASE 数据库名称 [default charest 字符集] [collate 排列规则]; #default cha…

43.三倍游戏

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/390 题目描述 三倍游戏是一种单人游戏。玩…

3d模型怎么一缩放模型都散了?---模大狮模型网

在3D建模和渲染中&#xff0c;缩放是常见的操作&#xff0c;用来调整模型的大小以适应不同场景或视角需求。然而&#xff0c;有时在进行缩放操作时&#xff0c;模型可能会出现不希望的散乱现象&#xff0c;这可能导致模型的外观和结构受到影响。模大狮将探讨为何会出现这种问题…

ISO26262标准

什么是ISO26262&#xff1f; ISO 26262(国际功能安全标准)是一个涵盖整个汽车产品开发过程的汽车功能安全标准。ISO 26262继承或改编自工业自动化行业的安全要求标准IEC61508&#xff0c;但专门为汽车行业量身定制。最新版本是ISO26262-1:2018。 它包括诸如需求分析、安全分析…

uniapp+php开发的全开源多端微商城完整系统源码.

uniappphp开发的全开源多端微商城完整系统源码. 全开源的基础商城销售功能的开源微商城。前端基于 uni-app&#xff0c;一端发布多端通用。 目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 采用该资源包做商城项目&#xff0c;可以节省大量的开发时间。 这…

存储管理(三):分区表

什么是分区表 假设存在表t&#xff1a; CREATETABLE t (ftimedatetime NOT NULL,c int(11) DEFAULT NULL,KEY (ftime) )ENGINEInnoDB DEFAULT CHARSETlatin1 PARTITION BY RANGE (YEAR(ftime)) (PARTITION p_2017 VALUES LESS THAN (2017) ENGINE InnoDB,PARTITION p_2018 VA…