我想创建 IMU ROS 服务。我有一个服务器(在我的例子中是一个微控制器 ESC32),它可以获得 IMU 读数,并且在请求进一步处理时应该将 IMU 数据传递给客户端(在我的例子中是 Raspberry PI 4B)。所以我只需要传递原始数据IMU 数据。我想从 IMU 服务器和客户端节点的一些 ros 服务模板开始。这是我的 .srv 文件
float64 x_orient_in
float64 y_orient_in
float64 z_orient_in
float64 w_orient_in
float64 x_veloc_in
float64 y_veloc_in
float64 z_veloc_in
float64 x_accel_in
float64 y_accel_in
float64 z_accel_in
---
float64 x_orient_out
float64 y_orient_out
float64 z_orient_out
float64 w_orient_out
float64 x_veloc_out
float64 y_veloc_out
float64 z_veloc_out
float64 x_accel_out
float64 y_accel_out
float64 z_accel_out
bool success
这是我的服务器 cpp
#include "ros/ros.h"
#include <sensor_msgs/Imu.h>
#include "ros_services/ImuValue.h"
bool get_val(ros_services::ImuValue::Request &req, ros_services::ImuValue::Response &res)
{
ROS_INFO("sending back response");
res.x_orient_out= req.x_orient_in;
res.y_orient_out= req.y_orient_in;
res.z_orient_out= req.z_orient_in;
res.w_orient_out= req.w_orient_in;
res.x_veloc_out= req.x_veloc_in;
res.y_veloc_out= req.y_veloc_in;
res.z_veloc_out= req.z_veloc_in;
res.x_accel_out= req.x_accel_in;
res.x_accel_out= req.x_accel_in;
res.x_accel_out= req.x_accel_in;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "imu_status_server");
ros::NodeHandle n;
ros::ServiceServer service = n.advertiseService("imu_status_server", get_val);
ROS_INFO("Starting server...");
ros::spin();
return 0;
}
我的 IMU ros 主题是这个
header:
seq: 45672
stamp:
secs: 956
nsecs: 962000000
frame_id: "thrbot/imu_link"
orientation:
x: 0.0697171053094
y: 0.00825242210747
z: 0.920964387685
w: -0.383270164991
orientation_covariance: [0.0001, 0.0, 0.0, 0.0, 0.0001, 0.0, 0.0, 0.0, 0.0001]
angular_velocity:
x: 0.00156996015527
y: 0.0263644782572
z: -0.0617661883137
angular_velocity_covariance: [1.1519236000000001e-07, 0.0, 0.0, 0.0, 1.1519236000000001e-07, 0.0, 0.0, 0.0, 1.1519236000000001e-07]
linear_acceleration:
x: 1.32039048367
y: -0.376341478938
z: 9.70643773249
linear_acceleration_covariance: [1.6e-05, 0.0, 0.0, 0.0, 1.6e-05, 0.0, 0.0, 0.0, 1.6e-05]