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

程序问题实录

这里写目录标题

  • launch文件
    • node节点定义
    • arg与param的区别和应用
    • 针对于CMakeList下设置debug和release模式
  • 利用clion编译器debug .launch文件
  • 针对于网段的静态IP查询linux版本
  • 实现IMU数据进行均值滤波的作用
  • LIO-SAM环境配置
  • window相关的cmd命令程序
  • 已创建pointcloud的指针的初始化
  • ROS中的坐标系
  • LeGO_LOAM的坐标系变换
  • ubuntu终端控制蓝牙
  • 扩充swapness交换空间
  • ubuntu查看显卡版本
  • UBUNTU连接wifi设备
  • ubuntu挂载swapfile交换空间后自动取消
  • journalctl
  • ubuntu清理系统内存的方法

launch文件

node节点定义

<node name="node-name" pkg="package-name" type="executable-name"/>

这里的launch文件其中name属性用来定义节点的运行名称将覆盖ros::init(argc,argv,“xxxxx”)中xxxxx定义的名称节点。pkg信息对应于节点所在的package.xml的功能包定义的name名称。type属性定义节点的可执行文件的名称在CMakeList中add_executable中的定义的可执行文件的name名称

arg与param的区别和应用

最主要的区别:
param是ROS系统运行的参数,存储在服务器中,launch文件通过加载参数加载参数
arg在launch文件中用于定义参数,同时arg定义的赋值参数,可以在命令行中进行数值修改,但是param不能进行相应的修改
重映射参考

针对于CMakeList下设置debug和release模式

出现的问题是:程序在debug模式下正常运行,但是在release模式下,出现build error 问题
请添加图片描述
问题的形式是这样的,在使用pcl的filter自定义点云滤波器的时候,因为我定义的点云类型是在cloud_with_label的namespace下的PointXYZIRL点云类型 ,在 CMAKELIST中设置为:

set(CMAKE_CXX_FLAGE "${CMAKE_CXX_FLAGE} =stdc++14 -O3 -g -pthread")
set(CMAKE_BUILD_TYPE "Release")
使得执行了代码的优化

报错为编译器不能识别的点云数据类型,导致即使对于通用模板PointT类型定义的pcl::filter函数同样无法解析复杂的类型定义。所以,通过将复杂的代码进行拆分,实现了基于自定义条件滤波器的代码优化,最终编译成功通过。
reference link

利用clion编译器debug .launch文件

首先,需要在clion中进行project的配置:

  1. 在CMAKE | setting 中,设置 cmake options:-DCAME_DEVEL_PREFIX:PATH=/XXX/devel,以及build directory为xxx/build目录。
  2. 在int main(int argc ,char ** argv){
    主函数中实现以下代码输出函数传入的参数信息
for (int i = 0; i < argc ; i++)
{std::cout<<argv[i]<<std::endl;
return 0;
}

}
3. 打开需要debug的.cpp主函数文件,通过edit configuration配置需要debug的主函数node节点程序
4. 在argument中增加程序参数为你要调试的package的包名称信息:__name:=xxx(pkg名称),并且需要在launch文件中将你想debug的pkg注释掉
5. 其次,需要首先通过roslaunch启动不需要debug的其他pkg用作依赖pkg运行,提供数据,然后通过clion去debug你需要调试的bag
6. 参考优秀的文章

针对于网段的静态IP查询linux版本

常用命令总结

#利用arp-scan
$ ifconfig #能够查询到本机的IP 其中eno1 或者eht0为本机的有线地址 wlo1往往为无线
#sudo arp-scan -I eno1 --localnet #用来查询同一个局域网段下所有的IP地址 能够查看IP占用 同时配置静态空闲的IP段

文章参考

利用NMAP实现局域网段下IP地址的扫描

arp -a #往往能列出同局域网段下所有占用IP地址
nmap -sS 10.27.9.21 #用来查看指定IP地址下的SYN扫描
nmap -sV 10.27.9.21 -p 1-6535 #用来探测端口的服务和版本 往往能够返回位于10.27.9.21 IP地址下的所有active的端口信息
nmap -O 10.27.9.21 #能够探测到你的操作系统的版本(版本 往往对应2.6.xx)和类型(linux)

实现IMU数据进行均值滤波的作用

均值滤波能够实现捕获到的数据信号实现平滑处理以及去除噪声均值滤波的基本思想:选择一段时间内的数据的平均值作为输出,减少噪声的影响,对于突变信息的抑制效果不佳。
均值滤波理解

LIO-SAM环境配置

安装GTSAM,我选择使用通过release的GTSAM.4.0.3版本作为测试

#!bash
tar -zxvf xxx.gtsam.tar.gz
$ cd gtsam-4.0.3 #替换成自己的目录
$ mkdir build
$ cd build
$ cmake -GTSAM_WITH_EIGEN_MKL=OFF -DGTSAM_WITH_EIGEN_MKL_OPENMP=OFF -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF..
$ make check -j$(nproc)
$ sudo make install

文章参考

安装LIO-SAM
通过git clone 源码,然后在src工作目录下,进行catkin_init_workspace
然后返回到上一级文件夹,通过catkin_make -j$(nproc)进行程序框架编译

问题:
在这里插入图片描述
需要在cmakelist 的find_package(Boost REQUIRED COMPONENTS 加上system filesystem serialization chrono)
find_package(Boost REQUIRED COMPONENTS timer thread serialization chrono)
find_package(Boost REQUIRED COMPONENTS system filesystem date_time)

问题
OpenCV.h报错 版本不兼容 ,我的ROS_NOETIC是4.02版本,所以需要将OOpenCV
在这里插入图片描述
这里默认的库地址为/usr/local/lib,但是通过source后打开的是/opt/ros/noetic/lib,所以此时可以通过ls 实现库的软连接,同时也可以直接将库cp到/opt/ros/noetic/lib中

参考连接
参考连接

window相关的cmd命令程序

#查询磁盘的容量
# wmic logicaldis get name ,size ,freespace
#查看某个磁盘
fsutil volume diskfree F:
#复制文件到某个磁盘(I)
xcopy C:xxx(path to your folder) I:(save folder) /E /H /C /I
#查看历史命令
#doskey /history
#激活python环境
osm_venv\Script\activate.bat 

已创建pointcloud的指针的初始化

pcl::PointCloud<VelodynePoint>::Ptr point_ptr;
point_ptr.reset<new pcl::PointCloud<VelodynePoint>()>;

ROS中的坐标系

机器人坐标系
在这里插入图片描述
对于机器人坐标系X轴指向前,Y轴指向左,Z轴指向上(前左上)
相机坐标系
对于相机坐标系采用X轴指向右,Y轴指向下,Z轴指向前(右下前)
所以在LeGO_LOAM中,从传感器坐标系(imu坐标系x前y左z上)转到相机坐标系的转换为(X->Z,Y->X,Z->Y[这里箭头左边是IMU坐标系,箭头右边是相机坐标系,这样实现了将传感器的测量值转到与相机坐标系实现统一])
参考链接

LeGO_LOAM的坐标系变换

ubuntu终端控制蓝牙

sudo systemctl restart bluetooth.service #重启蓝牙设备
sudo systemctl status bluetooth.service #查看蓝牙设备的状态
bluetoothctl #启动蓝牙设备
power on 开启蓝牙适配器
discoverable on #使得蓝牙设备可见
scan on 

扩充swapness交换空间

# 查看交换空间大小
cat /proc/sys/vm/swappiness
# 临时调整swapness
sudo sysctl vm.swappiness=80
#永久调整
sudo vim /etc/sysctl.conf
vm.swappiness=80
#重启生效
reboot

参考连接

#增加交换分区
swapon --show //显示交换分区的文件
free -h //查看交换分区的利用情况
//调整交换分区
sudo swapoff /swapfile
sudo rm /swapfile
//创建4G的swapfile交换分区
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
sudo chmod 600 /swapfile
//设置swap 激活
sudo mkswap /swapfile
//启动
sudo swapon /swapfile
# 检查设置是否有效
grep Swap /proc/meminfo # 或者htop看一下# 设置永久有效
sudo gedit /etc/fstab
# 在末尾行加上 
/swapfile swap swap sw 0 0

参考连接
leetcode刷题指南
leetcode刷题指南

ubuntu查看显卡版本

nvidi-smi --help-query-gpu 
nvidia-smi --query-gpu=compute_cap,version,gpu_name,memory.total --format=csv

UBUNTU连接wifi设备

nmcli device wifi list 
nmcli device wifi connect "wifi name " password "wifi password"

ubuntu挂载swapfile交换空间后自动取消

/var/log/syslog:包含系统的整体日志,包括各种系统事件和服务日志。
/var/log/auth.log:记录用户认证和授权相关的日志,如登录、sudo 使用等。
/var/log/kern.log:内核相关的日志,包括硬件和驱动程序问题。
/var/log/dmesg:包含内核环缓冲区的消息,可以用来查看系统启动期间的信息。

cat /var/log/syslog | grep swap #我使用的日志
cat /var/log/auth.log
cat /var/log/dmesg | grep swap

如果想实时监视日志文件的更新,可以使用 tail 命令加上 -f 参数如下:

$tail -f /var/log/syslog
$tail -f /var/log/auth.log
$tail -f /var/log/kern.log
$tail -f /var/log/dmes

journalctl

journalctl是 systemd 系统日志记录器的命令行工具,用于查看和分析系统日志。它可以以可读的格式显示日志,并支持按时间、单元(服务)、PID 等进行过滤和搜索。它提供了许多参数和选项,用于过滤、搜索和格式化日志输出。以下是 journalctl 常见的参数和使用示例:

journalctl #查看最新的系统日志
#journalctl -u unit-name.service #查看指定单位的日志
journalctl -u user-name #查看指定用户日志
##查看指定时间范围内的日志:
$journalctl --since "2023-12-01 00:00:00" --until "2023-12-02 23:59:59"

参考链接

ubuntu清理系统内存的方法

sudo sync && sudo sysctl -w vm.drop_caches=3 #用来清理所有缓存
sudo sync && sysctl -w vm.drop_caches=2 #用来清理目录项目以及inode缓存

error: ‘CV_LOAD_IMAGE_GRAYSCALE’ was not declared in this scope

相关文章:

  • Python BeautifulSoup解析HTML获取图片URL并下载到本地
  • 【电路】阻抗匹配
  • 云原生架构赋能企业数字化转型:从理念到落地的系统性探索
  • springboot3.5整合Spring Security6.5默认密码没有打印输出控制台排查过程
  • BeanFactory 和 FactoryBean 有何区别与联系?
  • 在vs2022中的program.cs中已经没有app.useEndpoints
  • 分词算法总结:不同分词算法的优点和缺点
  • K8S认证|CKS题库+答案| 8. 沙箱运行容器 gVisor
  • 从入门到实战:AI学习路线全解析——避坑指南
  • AUTOSAR实战教程--开放式通用DoIP刷写工具OpenOTA开发计划
  • shell脚本 --案例实操
  • 【优选算法】模拟 问题算法
  • 【CSS-7】深入解析CSS伪类:从基础到高级应用
  • 73常用控件_QFormLayout的使用
  • SQL 注入开放与修复
  • 针对异构数据的联邦学习
  • Linux 基础IO(下)
  • D25异常处理
  • 【学习笔记】深入理解Java虚拟机学习笔记——第5章 调优案例分析与实战
  • NLP学习路线图(三十二): 模型压缩与优化
  • wordpress 过于肿肿/唐山百度seo公司
  • 如何建设简易网站/手机系统流畅神器
  • 做网站设计哪家好/seo到底是做什么的
  • dw2019怎么做网站/seo sem是啥
  • 外贸网站屏蔽国内ip/今日特大新闻新事
  • 淄博网站建设哪家专业/太原百度搜索排名优化