跟着阿杰slam 入门学习--IMU与地图map
·
重点参考:
b站up:机器人工匠阿杰
正文:
IMU 惯性测量单元消息包
- 用途:加速度计、陀螺仪和磁力计数据。
- 关键字段:
# 标准头信息(时间戳 + 坐标系) std_msgs/Header header uint32 seq # 序列号 time stamp # 数据采集时间戳 string frame_id # 坐标系(如 "imu_link") # 姿态四元数(相对于参考坐标系) geometry_msgs/Quaternion orientation float64 x float64 y float64 z float64 w # 通常 w > 0 # 姿态协方差矩阵(行优先,3x3) float64[9] orientation_covariance # 索引:0 4 8 → 对角线元素(xx, yy, zz方差) # 值 -1 表示数据不可用 # 角速度(单位:rad/s) geometry_msgs/Vector3 angular_velocity float64 x # 绕X轴旋转(滚转) float64 y # 绕Y轴旋转(俯仰) float64 z # 绕Z轴旋转(偏航) # 角速度协方差矩阵(行优先,3x3) float64[9] angular_velocity_covariance # 线加速度(单位:m/s²) geometry_msgs/Vector3 linear_acceleration float64 x # X轴加速度(前进方向) float64 y # Y轴加速度(左侧方向) float64 z # Z轴加速度(向上方向) # 线加速度协方差矩阵(行优先,3x3) float64[9] linear_acceleration_covarianceIMU数据的话题发布:通过
/imu/data_raw、/imu/data、/imu/mag话题发布
ROS的标准消息包std_msgs
ROS 中的几何包 geometry_msgs 和 传感器包 sensor_msgs


ROS中的栅格地图格式
构建软件包map_pkg,依赖里加上nav_msgs,在再map_pkg里创建一个节点map_pub_node;
cd catkin_ws/src/
catkin_create_pkg map_pkg rospy roscpp nav_msgs
cd map_pkg/src/
touch map_pub_node.cpp
节点中发布话题/map,消息类型为nav_msga::OccupancyGrid;构建一个nav_msga::OccupancyGrid地图消息包,并对其赋值;将地图消息包发送到话题/map;
# include <iostream>
# include <ros/ros.h>
# include <nav_msgs/OccupancyGrid.h>
int main(int argc, char** argv)
{
ros::init(argc, argv, "map_pub_node");
ros::NodeHandle n;
ros::Publisher pub = n.advertise<nav_msgs::OccupancyGrid>("/map", 10); //节点中发布话题/map,消息类型为nav_msga::OccupancyGrid
ros::Rate r(1); //消息包发送频率为1HZ
while (ros::ok()) //使用while循环不停发送消息包
{
nav_msgs::OccupancyGrid msg; //构建消息包
// header
msg.header.frame_id = "map";
msg.header.stamp = ros::Time::now(); //时间戳设置为当前时间
// 地图描述信息
msg.info.origin.position.x = 0;
msg.info.origin.position.y = 0;
msg.info.resolution = 1.0; //栅格分辨率
msg.info.width = 4;
msg.info.height = 2;
// 地图数据
msg.data.resize(4*2);//调整数组大小
msg.data[0] = 100;
msg.data[1] = 100;
msg.data[2] = 0;
msg.data[3] = -1;
// 发送
pub.publish(msg);
r.sleep();//发送频率的控制
}
return 0;
}
更多推荐
所有评论(0)