程序问题实录
这里写目录标题
- 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的配置:
- 在CMAKE | setting 中,设置 cmake options:-DCAME_DEVEL_PREFIX:PATH=/XXX/devel,以及build directory为xxx/build目录。
- 在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