当前位置: 首页 > news >正文

自组装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_OBJECTpublic: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开始,就可以开始采集数据了,然后手指点击关闭触屏中的终端,一个包包就录制完毕了。

凑合能用吧。

相关文章:

  • Elasticsearch:Painless scripting 语言(一)
  • FFmpeg教程-三-播放pcm文件-1
  • 面向对象,常用类,集合,异常,JDBC,mysql数据库内容的复习,
  • Windows系统下查看电脑被远程访问历史记录
  • C语言快速学习笔记
  • 2024 MWC上海:创新力量驱动未来先行,移远智慧点亮数字蓝海
  • 上位机图像处理和嵌入式模块部署(mcu 项目1:固件编写)
  • py黑帽子学习笔记_burp
  • 【js】数组元素拼接、数组元素类型转换
  • Android调用onNewIntend的时刻
  • RPM包管理-rpm命令管理
  • 【linux/shell实战案例】在shell中插入Python代码及EOF解析
  • Linux中进程和线程区别
  • vue实现一个简单的审批绘制功能
  • 数据提取的奥秘
  • [译]如何构建服务器端web组件,为何要构建?
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • java正则表式的使用
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Python连接Oracle
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • 如何设计一个比特币钱包服务
  • 设计模式走一遍---观察者模式
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 运行时添加log4j2的appender
  • 正则与JS中的正则
  • 你对linux中grep命令知道多少?
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • #APPINVENTOR学习记录
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • ${ }的特别功能
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (四)事件系统
  • (学习日记)2024.02.29:UCOSIII第二节
  • (原創) 物件導向與老子思想 (OO)
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .NET MVC 验证码
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题
  • .NET编程C#线程之旅:十种开启线程的方式以及各自使用场景和优缺点
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • ??myeclipse+tomcat
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @SuppressWarnings注解
  • @WebService和@WebMethod注解的用法
  • @在php中起什么作用?
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [ 攻防演练演示篇 ] 利用通达OA 文件上传漏洞上传webshell获取主机权限
  • [@Controller]4 详解@ModelAttribute
  • [Android]How to use FFmpeg to decode Android f...
  • [APIO2015]巴厘岛的雕塑
  • [Asp.net mvc]国际化