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

news2024/10/7 20:36:41

一、问题一:电脑太重,换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.coloradmin.cn/o/1875958.html

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

相关文章

PyTorch(五)自动微分

#c 概述 文档概述 涉及到的知识点讲解&#xff1a;「自动微分」&#xff0c;「梯度」&#xff0c;「权重」&#xff0c;「偏置」&#xff0c;「反向传播」&#xff0c;「计算图」。 主要讲解了「自动微分」与「梯度计算」&#xff0c;「计算图」之间的概念关系。 1 基本概念…

网页如何快速被收录?

其实就是要要吸引搜索引擎爬虫更快地抓取你的网页&#xff0c;想让爬虫爬取网页&#xff0c;首要做的自然是创建并提交站点地图。站点地图是搜索引擎了解你网站结构的重要工具。它可以帮助爬虫更快地发现和抓取你网站上的所有重要页面。通过Google Search Console提交站点地图&…

【Linux】生物信息学常用基本命令

wget网址用于直接从网上下载某个文件到服务器&#xff0c;当然也可以直接从网上先把东西下到本地然后用filezilla这个软件来传输到服务器上。 当遇到不会的命令时候&#xff0c;可以使用man “不会的命令”来查看这个命令的详细信息。比如我想要看看ls这个命令的详细用法&…

【Sklearn-驯化】sklearn中决策树cart的用法,看这篇就够了

【Sklearn-驯化】sklearn中决策树cart的用法&#xff0c;看这篇就够了 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 免费获取相关内容文档…

仓库管理系统17--客户管理

原创不易&#xff0c;打字不易&#xff0c;截图不易&#xff0c;多多点赞&#xff0c;送人玫瑰&#xff0c;留有余香&#xff0c;财务自由明日实现 1、添加用户控件 <UserControl x:Class"West.StoreMgr.View.CustomerView"xmlns"http://schemas.microsof…

信息安全前沿技术有哪些?

目前信息安全领域&#xff08;不限于技术层面&#xff09;有哪些前沿的研究方向&#xff0c;代表人物有哪些&#xff1f;有哪些新的研究成果&#xff1f;以及从哪些地方可以获得这些咨询&#xff1f; 我在做 system 方向的安全研究&#xff0c;最近发现其实中美两国都在 TEE (…

洞察数据资产的奥秘:深入剖析数据资产在企业运营中的核心作用,提出一套全面、系统的数据资产解决方案,帮助企业实现数据资产的最大化利用和增值

一、引言 在数字化浪潮汹涌的今天&#xff0c;数据已成为企业最宝贵的资产之一。数据资产不仅记录了企业的历史运营轨迹&#xff0c;更蕴含着指导未来决策的智慧。然而&#xff0c;如何有效管理、利用这些数据资产&#xff0c;使其转化为企业的竞争优势和利润增长点&#xff0…

【ArcGIS 脚本工具】拯救密恐,隐藏唯一值渲染图层的标记符号

最近拿到了【Hello 图狗】制作的三调/变更样式符号库&#xff0c;确实比之前网上下载的版本好用很多。 ArcGIS Pro三调23变更符号库V1.02&#xff08;汇总&#xff09;_中大比例尺.stylx和样式属性对调 不过使用过程中触发了一个旧病&#xff0c;就是匹配样式之后&#xff0c;…

网络配置(IP、NETMASK、GATEWAY、DNS、DHCP) <持续更新中>

参考&#xff1a; 初学Linux之网络配置(IP、NETMASK、GATEWAY、DNS、DHCP)-CSDN博客【学习笔记】网关 & 路由_网关和路由-CSDN博客【学习笔记】计算机网络 IP地址与MAC地址_根据mac分配ip-CSDN博客【学习笔记】TCP 和 UDP 协议_tcp 发送 syn 应答没有syn ack-CSDN博客 一…

若依 ruoyi 分离版 vue 简单的行内编辑实现

需要实现的效果&#xff1a;双击文本 - 修改文本 - 保存修改。 原码&#xff1a;仅文本显示文字内容 <el-table-column label"商品" align"center" prop"goodsName" width"200" v-if"columns[1].visible" /> 实现…

小程序web-view无法打开该页面的解决方法

问题&#xff1a;开发者工具可以正常打开&#xff0c;正式上线版小程序使用 web-view 组件测试时提示&#xff1a;“无法打开该页面&#xff0c;不支持打开 https://xxxxxx&#xff0c;请在“小程序右上角更多->反馈与投诉”中和开发者反馈。” 解决方法&#xff1a;需要配…

Altium Designer的元件库 PCB库 3D库神器

元件库 PCB库 3D库神器 对于硬件工程师来说贸泽是一个器件选型相当方便的电子商城,虽然购买元器件比立创商城要慢和贵,但是,上面的物料种类、选型的便捷性要远远好于立创商城;而且,它上面的大多数元件都有自己的元件封装、PCB封装、3D模型,这就对实际的开发节省了好多绘…

Java | Leetcode Java题解之第191题位1的个数

题目&#xff1a; 题解&#xff1a; public class Solution {public int hammingWeight(int n) {int ret 0;while (n ! 0) {n & n - 1;ret;}return ret;} }

52、基于K 均值聚类实现基于颜色的分割(matlab)

1、K 均值聚类实现基于颜色的分割原理及流程 K 均值聚类是一种常用的聚类算法&#xff0c;通过将数据点分配到 K 个簇中&#xff0c;每个簇的中心代表簇的平均值来实现聚类的目的。 基于颜色的分割的原理是利用像素的颜色信息来对图像进行分割。首先需要将图像的每个像素点表…

如何用CSS样式实现一个优雅的渐变效果?

CSS渐变效果 CSS渐变&#xff08;Gradients&#xff09;是一种让两种或多种颜色平滑过渡的视觉效果&#xff0c;广泛应用于网页背景、按钮、边框等&#xff0c;以创造丰富的视觉体验。CSS提供了线性渐变&#xff08;Linear Gradients&#xff09;和径向渐变&#xff08;Radial…

性能之巅的巴比达内网穿透访问单位的web管理系统

在这个数字化飞速发展的时代&#xff0c;作为一名IT部门的小主管&#xff0c;我经常面临着一项挑战&#xff1a;如何在外网环境下高效、安全地访问我们单位内部部署的Web管理系统。这不仅仅是关乎我个人的工作效率&#xff0c;更是影响到整个团队能否快速响应市场需求的关键。直…

GPT-4o首次引入!全新图像自动评估基准发布!

目录 01 什么是DreamBench&#xff1f; 02 与人类对齐的自动化评估 03 更全面的个性化数据集 04 实验结果 面对层出不穷的个性化图像生成技术&#xff0c;一个新问题摆在眼前&#xff1a;缺乏统一标准来衡量这些生成的图片是否符合人们的喜好。 对此&#xff0c;来自清华大…

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产mysql数据库事故实战

高级运维工程师讲述银河麒麟V10SP1服务器加固收回权限/tmp命令引起生产MySql数据库事故实战 一、前言 作为运维工程师经常会对生产服务器进行安全漏洞加固&#xff0c;一般服务厂商、或者甲方信息安全中心提供一些安全的shell脚本&#xff0c;一般这种shell脚本都是收回权限&…

Websocket在Java中的实践——自动注册端点

大纲 依赖自动注册端点端点测试 在 《Websocket在Java中的实践——握手拦截器》中我们使用握手拦截器实现了路径解析的工作。这个过程略显复杂&#xff0c;因为路径解析这样比较底层的工作应该由框架来解决&#xff0c;而不应该交由开发者来做。本文介绍的自动注册端点的功能就…

开箱即用的fastposter海报生成器

什么是 fastposter ? fastposter 海报生成器是一款快速开发海报的工具。只需上传一张背景图&#xff0c;在对应的位置放上组件&#xff08;文字、图片、二维码、头像&#xff09;即可生成海报。 点击代码直接生成各种语言 SDK 的调用代码&#xff0c;方便快速开发。 软件特性&…