Tip
本仓库维护自瞄、导航、决策等模块需要共用的组件包。 包含自定义消息(interfaces),串口通信节点(serial_bridge),TF维护节点(tf_maintainer),录包节点(rosbag_recorder),共用工具库(common_libs)和统一启动入口(full_launcher)。 串口通讯协议见文档,写的有点乱,仅供参考。
平移统一为右手系,前x左y上z。旋转方向统一为右手系,绕z轴转为yaw,绕y轴转为pitch,绕x轴转为roll。
graph TD
map[map(全局地图)] -->|全局重定位| odom[odom(里程计初始化系)]
odom -->|里程计| imu_world[imu_world(IMU初始化系)]
imu_world -->|电控发送的IMU| imu_link[imu_link(IMU机体系)]
imu_link -->|固定变换| pitch_link[pitch_link(Pitch机体系)]
pitch_link -->|Pitch电机编码器| yaw_link[yaw_link(Yaw机体系)]
pitch_link -->|固定变换| camera_link[camera_link(相机机体系)]
pitch_link -->|固定变换| fric_link[fric_link(摩擦轮机体系)]
pitch_link -->|固定变换| lidar_link[lidar_link(雷达机体系)]
lidar_link -->|固定变换| livox_imu_link[livox_imu_link(雷达IMU机体系)]
yaw_link -->|Yaw电机编码器| chassis_link[chassis_link(底盘机体系)]
- map系:全局地图坐标系,原点在地图角落,x轴与地图长边重合,y轴与地图短边重合,z轴竖直向上。位置和旋转完全固定,是静态参考坐标系。
- odom系:里程计初始化坐标系,位置和旋转一般固定。通常情况下z轴竖直向上。
- imu_world系:IMU初始化坐标系,原点跟随IMU移动,但是姿态大致固定(可能存在IMU漂移导致缓慢旋转)。通常情况下z轴竖直向上。
Tip
里程计使用电控发送的IMU时,其发布的里程计消息是imu_link->odom。里程计使用雷达内置的IMU时,其发布的里程计消息是livox_imu_link->odom。 但是不论里程计使用哪个IMU,在tf_maintainer内里程计消息都会被转换成imu_world->odom再发布到TF树中。 这是因为我们有下位机使用Mahony融合得到的姿态可以直接用来维护imu_link->imu_world的变换,其频率比里程计高很多,便于自瞄使用。而且这样也可以统一上下位机坐标系,避免IMU积分零漂导致的坐标系姿态不一致问题。
推荐使用Ubuntu 24.04 LTS。
推荐使用鱼香ROS自动安装脚本。
推荐使用apt安装:sudo apt install libeigen3-dev。
推荐使用apt安装:sudo apt install libboost-all-dev。
-
Ubuntu系统下使用串口节点建议卸载ModemManager和brltty以避免串口被占用:
sudo apt remove modemmanager brltty。使用sudo usermod -aG dialout username可使username用户有权限访问串口设备。 -
建议设置udev规则将串口映射到固定的路径上。使用
udevadm info --query=path --name=/dev/ttyACM0可以查看串口设备的路径(例如3-7:1.0),然后创建一个新的udev规则文件(例如/etc/udev/rules.d/99-sentry-serial.rules),内容如下:SUBSYSTEM=="tty", KERNELS=="3-7:1.0", SYMLINK+="ttySerial"(将3-7:1.0替换为实际的设备路径),保存后执行sudo udevadm control --reload-rules && sudo udevadm trigger使规则生效。这样串口设备就会被映射到/dev/ttySerial。