ROS2-I2C通信-MPU9250
PS:本文需要的先行知识请自行补充
本文用linux的I2c_dev,去对I2C设备进行操作(open/read/write/close),实现部署于ROS中,并结合ROS特性完成于MPU9250的通讯
linux-I2C代码需包含的头文件:
12345678#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#include <linux/i2c.h>#include <linux/i2c-dev.h>
开启I2C并进行初始化:
1234567891011121314fd = open(I2C_DEV,O_RDWR);if(fd < 0){ // printf("open %s failed\n",I2C_DEV); std::str ...
ROS2-socket-CAN通信
PS:本文需要的先行知识请自行补充
本文通过linux的socket,完成CAN通讯的封装,并部署于ROS中;
SocketSocket(套接字)是一种用于实现网络通信的编程接口(API),它提供了一种标准化的方式,使得不同操作系统和编程语言之间的应用程序能够相互通信。
环境部署工程环境:RK3588 + Ubuntu 22.04.2 LTS + ROS2-humble
默认工作空间已建立,环境变量已导入脚本;
创建功能包:catkin_create_pkg mysocketcan_pkg roscpp rospy std_msgs
1.linux-socket部分源码代码需包含的头文件:
123456789101112131415#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <stdexcept>#include <sstream> #include <unistd.h> #in ...
ROS-I2C通信-MPU9250
PS:本文需要的先行知识请自行补充
本文用linux的I2c_dev,去对I2C设备进行操作(open/read/write/close),实现部署于ROS中,并结合ROS特性完成于MPU9250的通讯
linux-I2C代码需包含的头文件:
12345678#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <string.h>#include <linux/i2c.h>#include <linux/i2c-dev.h>
开启I2C并进行初始化:
1234567891011121314fd = open(I2C_DEV,O_RDWR);if(fd < 0){ // printf("open %s failed\n",I2C_DEV); std::str ...
ROS-socket-CAN通信
PS:本文需要的先行知识请自行补充
本文提供了两种方法实现CAN通讯:
自行使用linux的socket,完成CAN通讯的封装,并部署于ROS中;
使用ROS提供的CANopen功能包,完成CAN通讯,并提供使用案例;
SocketSocket(套接字)是一种用于实现网络通信的编程接口(API),它提供了一种标准化的方式,使得不同操作系统和编程语言之间的应用程序能够相互通信。
环境部署工程环境:RK3588 + Ubuntu 20.04.2 LTS + ROS-noetic
默认工作空间已建立,环境变量已导入脚本;
创建功能包:catkin_create_pkg mysocketcan_pkg roscpp rospy std_msgs
1.linux-socket部分源码代码需包含的头文件:
123456789101112131415#include <cstdio>#include <cstdlib>#include <cstring>#include <iostream>#include <stdexcept&g ...
ROS-serial库-串口通信
PS:本文需要的先行知识请自行补充
本文使用ROS提供的serial库,实现了部署于ROS中的串口通讯
环境部署调试工具测试环境 :VMware + Ubuntu 20.04.2 LTS + ROS-noetic
带界面的串口调试助手 CuteCom :sudo apt-get install cutecom
虚拟串口模拟器 socat:sudo apt-get install socat
1234567891011虚拟串口生成 `socat -d -d pty,b115200 pty,b115200`-d:启用调试输出pty:生成伪终端raw:使数据保存原始模式echo = 0:禁用输入字符的回显b“115200”:设置波特率为 “115200”
观察日志,会返回两个虚拟串口对,不同的设备生成的串口名称可能每次都会不一样,输出格式例:/dev/pts/4 和 /dev/pts/5;且终端需要一直开启,虚拟串口才会保持有效;
123cat < /dev/pts/4 监听/dev/pts/4的数据sudo echo & ...
LIO-ROS
可使用库:LIO_SAM
回环检测,有助于消除累积误差
FAST—LIO一种轻量级的3D雷达算法
Lider
Other ROS2 单线雷达的过滤包 Laser_filter
ROS2-serial-串口通信
PS:本文需要的先行知识请自行补充本文通过移植serial功能包,实现了部署于ROS2中的串口通讯
环境部署调试工具测试环境 :VMware + Ubuntu 22.04.2 LTS + ROS2-humble
带界面的串口调试助手 CuteCom :sudo apt-get install cutecom
虚拟串口模拟器 socat:sudo apt-get install socat
1234567891011虚拟串口生成 `socat -d -d pty,b115200 pty,b115200`-d:启用调试输出pty:生成伪终端raw:使数据保存原始模式echo = 0:禁用输入字符的回显b“115200”:设置波特率为 “115200”
观察日志,会返回两个虚拟串口对,不同的设备生成的串口名称可能每次都会不一样,输出格式例:/dev/pts/4 和 /dev/pts/5;且终端需要一直开启,虚拟串口才会保持有效;
123cat < /dev/pts/4 监听/dev/pts/4的数据sudo echo &q ...
NO.9 Kalman
卡尔曼滤波 知识库
通俗理解:https://zhuanlan.zhihu.com/p/77327349
适用系统:线性高斯系统
满足条件:
12345线性:叠加性 齐次性变量概论服从正态分布,噪声服从零均值高斯分布 马尔可夫性
宏观意义:加权思想
理想状态:信号 * 1 + 噪声 * 0
Kalman 理想状态:估计值 + 观测值
先验知识状态空间表达式:
状态方程 : X(k) = AX(k-1) + BU(k) + W(k)过程噪声
观测方程 : Y(k) = X(k) + V(k)观测噪声
超参数
kalman方程1.预测
预测方程: 预测误差方程:
得到 先验估计 先验估计协方差
A是预测模型的状态矩阵,R是过程误差的方差
2.更新
卡尔曼增益:
P是观测模型的状态矩阵,Q是观测误差的方差,C为观测方程的转换矩阵
滤波方程:滤波误差方差方程:
得到最优估计 最优估计协方差
卡尔曼滤波贝叶斯滤波 的具体实现
一维卡尔曼多维卡尔曼扩展卡尔曼滤波(EKF)
NO.8 IMU
文章知乎文:《SLAM算法工程师之路:IMU详解与数据处理应用》:https://zhuanlan.zhihu.com/p/641245519
IMU ROS包工具imu_utils:https://github.com/gaowenliang/imu_utils?tab=readme-ov-file
IMU组成加速度计默认输出:系统的线加速度
数据单位为当地重力加速度g的[0,1]系数
陀螺仪默认输出:系统的角速度
磁力计默认输出:系统的位姿四元数
相关概念航迹推算
IMU预积分
外参标定
数据对齐
卡尔曼滤波 & 互补滤波加速度计 振动情况下 需要过滤高频信号陀螺仪 飘逸 需要过来低频信号
误差建模1.确定:标定补充 -> 外参,内参2.不确定:噪声
标定六位置标定法