mirror of
https://github.com/6-robot/wpr_simulation2.git
synced 2025-09-15 12:58:54 +08:00
add demo_6 in class
This commit is contained in:
parent
d4acab9890
commit
66dc5e661a
59
demo_cpp/6_imu_behavior_class.cpp
Normal file
59
demo_cpp/6_imu_behavior_class.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
#include <rclcpp/rclcpp.hpp>
|
||||
#include <sensor_msgs/msg/imu.hpp>
|
||||
#include <geometry_msgs/msg/twist.hpp>
|
||||
#include <tf2/LinearMath/Quaternion.h>
|
||||
#include <tf2/LinearMath/Matrix3x3.h>
|
||||
|
||||
class IMUBehaviorNode : public rclcpp::Node
|
||||
{
|
||||
public:
|
||||
IMUBehaviorNode()
|
||||
: Node("imu_behavior_node")
|
||||
{
|
||||
imu_sub_ = create_subscription<sensor_msgs::msg::Imu>(
|
||||
"imu",
|
||||
100,
|
||||
std::bind(&IMUBehaviorNode::imuCallback, this, std::placeholders::_1));
|
||||
|
||||
vel_pub_ = create_publisher<geometry_msgs::msg::Twist>("/cmd_vel", 10);
|
||||
}
|
||||
|
||||
private:
|
||||
void imuCallback(const sensor_msgs::msg::Imu::SharedPtr msg)
|
||||
{
|
||||
tf2::Quaternion tf2_quaternion;
|
||||
tf2_quaternion.setX(msg->orientation.x);
|
||||
tf2_quaternion.setY(msg->orientation.y);
|
||||
tf2_quaternion.setZ(msg->orientation.z);
|
||||
tf2_quaternion.setW(msg->orientation.w);
|
||||
|
||||
tf2::Matrix3x3 matrix(tf2_quaternion);
|
||||
|
||||
double roll, pitch, yaw;
|
||||
matrix.getRPY(roll, pitch, yaw);
|
||||
roll = roll * 180 / M_PI;
|
||||
pitch = pitch * 180 / M_PI;
|
||||
yaw = yaw * 180 / M_PI;
|
||||
RCLCPP_INFO(get_logger(), "roll= %.0f pitch= %.0f yaw= %.0f", roll, pitch, yaw);
|
||||
|
||||
double target_yaw = 90;
|
||||
|
||||
geometry_msgs::msg::Twist vel_msg;
|
||||
double diff_angle = target_yaw - yaw;
|
||||
vel_msg.angular.z = diff_angle * 0.01;
|
||||
vel_msg.linear.x = 0.1;
|
||||
vel_pub_->publish(vel_msg);
|
||||
}
|
||||
|
||||
rclcpp::Subscription<sensor_msgs::msg::Imu>::SharedPtr imu_sub_;
|
||||
rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr vel_pub_;
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
rclcpp::init(argc, argv);
|
||||
auto node = std::make_shared<IMUBehaviorNode>();
|
||||
rclcpp::spin(node);
|
||||
rclcpp::shutdown();
|
||||
return 0;
|
||||
}
|
||||
47
demo_cpp/6_imu_data_class.cpp
Normal file
47
demo_cpp/6_imu_data_class.cpp
Normal file
@ -0,0 +1,47 @@
|
||||
#include <rclcpp/rclcpp.hpp>
|
||||
#include <sensor_msgs/msg/imu.hpp>
|
||||
#include <tf2/LinearMath/Quaternion.h>
|
||||
#include <tf2/LinearMath/Matrix3x3.h>
|
||||
|
||||
class IMUDataNode : public rclcpp::Node
|
||||
{
|
||||
public:
|
||||
IMUDataNode()
|
||||
: Node("imu_data_node")
|
||||
{
|
||||
imu_sub_ = create_subscription<sensor_msgs::msg::Imu>(
|
||||
"/imu",
|
||||
100,
|
||||
std::bind(&IMUDataNode::imuCallback, this, std::placeholders::_1));
|
||||
}
|
||||
|
||||
private:
|
||||
void imuCallback(const sensor_msgs::msg::Imu::SharedPtr msg)
|
||||
{
|
||||
tf2::Quaternion tf2_quaternion;
|
||||
tf2_quaternion.setX(msg->orientation.x);
|
||||
tf2_quaternion.setY(msg->orientation.y);
|
||||
tf2_quaternion.setZ(msg->orientation.z);
|
||||
tf2_quaternion.setW(msg->orientation.w);
|
||||
|
||||
tf2::Matrix3x3 matrix(tf2_quaternion);
|
||||
|
||||
double roll, pitch, yaw;
|
||||
matrix.getRPY(roll, pitch, yaw);
|
||||
roll = roll * 180 / M_PI;
|
||||
pitch = pitch * 180 / M_PI;
|
||||
yaw = yaw * 180 / M_PI;
|
||||
RCLCPP_INFO(get_logger(), "roll= %.0f pitch= %.0f yaw= %.0f", roll, pitch, yaw);
|
||||
}
|
||||
|
||||
rclcpp::Subscription<sensor_msgs::msg::Imu>::SharedPtr imu_sub_;
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
rclcpp::init(argc, argv);
|
||||
auto node = std::make_shared<IMUDataNode>();
|
||||
rclcpp::spin(node);
|
||||
rclcpp::shutdown();
|
||||
return 0;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user