赞
踩
一、问题一:电脑太重,换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开始,就可以开始采集数据了,然后手指点击关闭触屏中的终端,一个包包就录制完毕了。
凑合能用吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。