cartographer在单一雷达建图方面网上博客已经有许多例子了,我之前也总结了一下cartographer在rplidar的手持激光雷达建图。
具体可参考下面的连接:https://blog.csdn.net/qq_36170626/article/details/98316861
下面我主要介绍激光融合imu信息建图,其实imu的主要作用是提供一个初始位姿,我个人理解就是在优化那边提供一个初始值可以有效减少迭代次数,从而保证实时。
我购买的imu传感器主要是gy85,其实和mpu6050差不多。我这边从ros调用imu的信息还没有调通,等调通了再写这部分。
我先是自己制造了一部分数据,当然建图效果肯定不好,我主要验证我的imu信息能否传到cartographer中。
#include <ros/ros.h>
#include <sensor_msgs/Imu.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, "imu");
ros::NodeHandle n;
ros::Publisher IMU_pub = n.advertise<sensor_msgs::Imu>("imu", 20);
ros::Rate loop_rate(50); //设置循环频率
while(ros::ok())
{
sensor_msgs::Imu imu_data;
imu_data.header.stamp = ros::Time::now();
imu_data.header.frame_id = "imu_link";
//四元数位姿,所有数据设为固定值,可以自己写代码获取IMU的数据,,然后进行传递
imu_data.orientation.x = 0;
imu_data.orientation.y = -1;
imu_data.orientation.z = -5;
imu_data.orientation.w = 6;
//线加速度
imu_data.linear_acceleration.x = 0.01;
imu_data.linear_acceleration.y = 0.02;
imu_data.linear_acceleration.z = 0.03;
//角速度
imu_data.angular_velocity.x = 0.05;