IMUからのトピックをTFに変換する
この記事は
ROSを使っている人向けの記事です。TFの知識が少しあると良いかもです。
使っているセンサー
Realsense D435i
Realsenseの導入方法
少し記事が古いですが、参考にどうぞ
RealSense D435のROSへの導入でつまづいたところ
コード
GithubでROSのパッケージも公開してます。(ライセンスとかは今度編集します…。)
shrimp-f/imu2tf
imu2tf_converter.cpp
#include <ros/ros.h>
#include <tf/transform_broadcaster.h>
#include <turtlesim/Pose.h>
#include <sensor_msgs/Imu.h>
void poseCallback(const sensor_msgs::Imu& msg){
static tf::TransformBroadcaster br;
tf::Transform transform;
transform.setOrigin( tf::Vector3(0.0, 0.0, 0.0) );
tf::Quaternion q;
double g = 10.0; //重力加速度
double r,p; //それぞれroll,pitch。下は、それぞれトピックの値から計算
r = atan(msg.linear_acceleration.y/msg.linear_acceleration.z);
p = atan(-msg.linear_acceleration.x/(sqrt(pow(msg.linear_acceleration.y,2)+pow(msg.linear_acceleration.z,2))));
q.setRPY(r, p, 0);
transform.setRotation(q);
br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", "camera_link"));//親フレームをworld,子フレームをcamera_linkとしてTFを配信
}
int main(int argc, char** argv){
ros::init(argc, argv, "my_tf_broadcaster");
ros::NodeHandle node;
ros::Subscriber sub = node.subscribe("/camera/accel/sample", 10, &poseCallback);//ここでIMUのトピックを購読
ros::spin();
return 0;
};
最後に
トピック名とTFのフレームは適宜自分の使いたい名前に変えてください。
TFはちゃんと調べて理解するとROSの世界が広がる(気がする)ので頑張ってください!
Author And Source
この問題について(IMUからのトピックをTFに変換する), 我々は、より多くの情報をここで見つけました https://qiita.com/shrimp-f/items/6c6820b88f162731dd94著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .