原創:https://blog.csdn.net/m_zhangjingdong/article/details/79617966
1、我在ros程序包中新建一個msg文件夾,用於存儲msg消息相關定義,之後便可把相關ros消息結構寫在該文件夾下
2、配置cmakelists
find_package(catkin REQUIRED COMPONENTS
message_generation
roscpp
rospy
std_msgs
)
add_message_files(
FILES
#Num.msg
#carOdom.msg
translational.msg
imu.msg
mcs.msg
)
generate_messages( DEPENDENCIES std_msgs)
3、package.xml文件中要保證有下面的幾行
# package.xml
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
4、此時,catkin_make之後便可以發送自定義ros消息了,介紹下使用方法:
a、加入必要的頭文件
#include<ros/ros.h>
#include<ros程序包名/imu.h>//下同
#include<multicol_slam/mcs.h>
#include<multicol_slam/translational.h>
b、
cv::Matx44d m_R=cv::Matx44d::eye();
m_R=(cConverter::invMat(mpLastKeyFrame->GetPose()))*mCurrentFrame.GetPose();
multicol_slam::imu m_imu;
multicol_slam::translational m_translational;
multicol_slam::mcs m_mcs;
m_imu.acc1=0.0;
m_imu.acc2=0.0;
m_imu.acc3=0.0;
m_imu.grw1=0.0;
m_imu.grw2=0.0;
m_imu.grw3=0.0;
m_imu.imu_timestamp=0.0;
m_mcs.imu_value.push_back(m_imu);
m_translational.a11=m_R(0,0);
m_translational.a12=m_R(0,1);
m_translational.a13=m_R(0,2);
m_translational.a14=m_R(0,3);
m_translational.a21=m_R(1,0);
m_translational.a22=m_R(1,1);
m_translational.a23=m_R(1,2);
m_translational.a24=m_R(1,3);
m_translational.a31=m_R(2,0);
m_translational.a32=m_R(2,1);
m_translational.a33=m_R(2,2);
m_translational.a34=m_R(2,3);
m_translational.a41=m_R(3,0);
m_translational.a42=m_R(3,1);
m_translational.a43=m_R(3,2);
m_translational.a44=m_R(3,3);
m_mcs.translational_value=m_translational;
m_mcs.timestamp=pKF->mTimeStamp;
my_public.publish(m_mcs);