本文主要是来发布sensor_msgs/Imu类型的消息,其中IMu的数据为虚拟的。
1.在自己的工作空间中创建ros程序包 (这个包依靠std_msgs、roscpp、rospy)catkin_create_pkg imu_publish std_msgs rospy roscpp
进入创建的程序包可以看到一下文件或文件夹
CMakeLists.txt include package.xml src
2.进入src文件夹内创建imu_data.cpp文件,并将一下代码复制
// Step 1: Include Library Headers:
//发布imu的数据到IMU_data
#include
#include
int main(int argc, char** argv)
{
// Step 2: Initialization:
ros::init(argc, argv, "imu");
ros::NodeHandle n;
ros::Publisher IMU_pub = n.advertise("IMU_data", 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 = "base_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;
imu_data.angular_velocity.y = 0.06;
imu_data.angular_velocity.z = 0.07;
IMU_pub.publish(imu_data);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
在CMakeLists.txt文件中添加
add_executable(imu_data src/imu_data.cpp)
target_link_libraries(imu_data ${catkin_LIBRARIES})
3.进入工作空间的根目录下编译(我的工作空间为catkin_ws)
catkin_make -DCATKIN_WHITELIST_PACKAGES="imu_publish"
在这里我们只编译刚才创建的包。
4运行
roscore
rosrun imu_pubilsh imu_data
5.通过rostopic list查看发布的话题 如下
/IMU_data6 通过rostopic echo /IMU_data 查看发布话题的具体消息:
header:
seq: 5277
stamp:
secs: 1530631669
nsecs: 639033327
frame_id: "base_link"
orientation:
x: 0.0
y: -1.0
z: -5.0
w: 6.0
orientation_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
angular_velocity:
x: 0.05
y: 0.06
z: 0.07
angular_velocity_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
linear_acceleration:
x: 0.01
y: 0.02
z: 0.03
linear_acceleration_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
7.也可以编写launch文件来运行 在imu_publish文件下新建launch文件夹,新建imu.launch,复制一下代码:
运行roslaunch imu_publish imu.launch
主要参考:
https://www.cnblogs.com/21207-iHome/p/7832355.html