1 串口读入IMU数据

1.1 serial工具

IMU接入ros系统可以使用I2C,串口或者其他方式实现,这里考虑使用usb转TTL解决。
参考博客ROS使用官方包进行串口通信

几点说明:

  • 在catkin_workspace/src 在创建package
$ cd ~/catkin_ws/src
$ catkin_create_pkg imu_com std_msgs rospy roscpp serial
  • 在~/catkin_ws/src/imu_com/src/创建imu_com.cpp,编辑程序
  • 在CMakeList.txt 中末尾添加
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(imu_com src/imu_com.cpp src/JY901.cpp)
target_link_libraries(imu_com ${catkin_LIBRARIES})
  • 在~/catkin_ws/在编译
$ catkin_make

1.2 查看usb挂载情况

ls -l /dev/ttyUSB*

修改串口权限

但是一般情况下会出现打不开串口的情况,在确认驱动安装正常的情况下,可能是操作权限不够导致的,赋予权限就好了

 sudo chmod a+rw /dev/ttyUSB0

但是这种方式只是临时的,每次启动都需输入一次,永久性解决办法:
可以通过增加udev规则来实现:

/etc/udev/rules.d/70-ttyusb.rules

创建文件

sudo gedit /etc/udev/rules.d/70-ttyusb.rules

文件内容为:

KERNEL=="ttyUSB[0-9]*", MODE="0666

增加访问权限:

sudo chmod a+rw /dev/ttyUSB0

2 IMU数据打包发布topic

在imu_com.cpp文件中

#include "ros/ros.h"
#include "std_msgs/String.h"
#include <serial/serial.h>
#include <JY901.h>
# include <sensor_msgs/Imu.h>
#include <sstream>serial::Serial ser; //声明串口对象 //回调函数
void write_callback(const std_msgs::String::ConstPtr& msg)
{ ROS_INFO_STREAM("Writing to serial port" <<msg->data); ser.write(msg->data);   //发送串口数据
} int main(int argc, char **argv)
{//初始化节点 ros::init(argc, argv, "serial_imu_node"); //声明节点句柄 ros::NodeHandle nh; //订阅主题,并配置回调函数 ros::Subscriber IMU_write_pub = nh.subscribe("imu_command", 1000, write_callback); //发布主题, 消息格式使用sensor_msg::Imu标准格式(topic名称,队列长度)ros::Publisher IMU_read_pub = nh.advertise<sensor_msgs::Imu>("imu_data", 1000); //打开串口try { //设置串口属性,并打开串口 ser.setPort("/dev/ttyUSB0"); ser.setBaudrate(115200); serial::Timeout to = serial::Timeout::simpleTimeout(1000); ser.setTimeout(to); ser.open(); } catch (serial::IOException& e) { ROS_ERROR_STREAM("Unable to open port "); return -1; } //检测串口是否已经打开,并给出提示信息 if(ser.isOpen()) { ROS_INFO_STREAM("Serial Port initialized"); } else { return -1; } //消息发布频率ros::Rate loop_rate(100);while (ros::ok()){//处理从串口来的Imu数据//串口缓存字符数unsigned char  data_size;if(data_size = ser.available()){ //ser.available(当串口没有缓存时,这个函数会一直等到有缓存才返回字符数unsigned char  tmpdata[data_size] ;ser.read(tmpdata, data_size);for (int i = 0; i< data_size; i++){JY901.CopeSerialData( tmpdata[i] );   //JY901 imu 库函数}//打包IMU数据sensor_msgs::Imu imu_data;imu_data.header.stamp = ros::Time::now();imu_data.header.frame_id = "base_link";imu_data.orientation.x = (float)JY901.stcAngle.Angle[0]/32768*180;imu_data.orientation.y = (float)JY901.stcAngle.Angle[1]/32768*180;imu_data.orientation.z = (float)JY901.stcAngle.Angle[1]/32768*180;imu_data.angular_velocity.x = (float)JY901.stcGyro.w[0]/32768*2000;imu_data.angular_velocity.y = (float)JY901.stcGyro.w[0]/32768*2000;imu_data.angular_velocity.z = (float)JY901.stcGyro.w[0]/32768*2000;imu_data.linear_acceleration.x = (float)JY901.stcAcc.a[0]/32768*16;imu_data.linear_acceleration.y = (float)JY901.stcAcc.a[1]/32768*16;imu_data.linear_acceleration.z = (float)JY901.stcAcc.a[2]/32768*16;//发布topicIMU_read_pub.publish(imu_data);}//处理ROS的信息,比如订阅消息,并调用回调函数 ros::spinOnce(); loop_rate.sleep(); }return 0;}

/imu_data 通过 rviz 显示

$ cd ~/catkin_ws
$ source devel/setup.bash
$ rosrun rviz rviz

最后在rviz 界面将Global OPtions 下面的Fixed Frame 修改base_link
在下面的add添加话题/imu_data 即可显示

ros接入IMU数据,打包发布topic相关推荐

  1. ROS serial 读取IMU数据, 打包发布topic

    目录 一.查看 usb 挂载情况 二.安装serial包 三.创建ROS工程包(该过程可跳过) 四.基于开源串口程序修改 4.1 开源代码配置 4.2 根据自身状态数据包示例进行修改 参考 一.查看 ...

  2. ROS2读取realsense摄像头数据并发布topic到ros2

    环境:ubuntu18.04, ros2 写在前面: 最近在写项目的自动化测试,需要实现先从realsense camera录制一段数据,在test case中需要以发布topic的方式播放录制的数据 ...

  3. ROS2手写接收IMU数据(Imu)代码并发布

    目录 前言 接收IMU数据 IMU的串口连接 问题 python接收串口数据 python解析数据 ROS2发布IMU数据 可视化IMU数据 效果 前言 在前面测试完了单独用激光雷达建图之后,一直想把 ...

  4. ROS:bag数据包内容提取——雷达点云数据和imu数据

    通常在利用ros采集传感器数据时,我们会得到一个包含多个传感器数据的bag数据包,下面将会介绍从bag数据包提取雷达点云数据和imu数据的方法. 系统版本:Ubuntu20.04 ROS版本:Noet ...

  5. 【VINS-MONO测试】安卓手机采集mono+imu数据

    上一个vins-mono环境配置测试完成后,初步建立好实验环境,接下来开始进行数据采集(cam+imu).打包.标定.运行. 记录一下后续要更新的内容吧: ros打包.另外两种标定方式.手机在线测试. ...

  6. 使用ros发布UVC相机和串口IMU数据

    1.目的:为了可以标定普通USB相机和固定在相机上的外置IMU的外参,我希望通过ROS获取更高分辨率和更高频率的图像数据,并且可以将图像和imu的topic发布出来,直接使用rosbag record ...

  7. ros rviz显示rosbag中的图像和imu数据

    一.rosbag相关的指令 1. rostopic list //列举出系统中正在发布的ros 话题 2. rosbag record -a //录制系统中所有正在发布的ros 话题 3. rosba ...

  8. 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用

    [一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...

  9. ROS开发之如何将树莓派采集的雷达、IMU数据在虚拟机rviz中显示?

    文章目录 0.前言 1.获取IP和计算机名 2.配置hosts文件 3.配置.bashrc文件 4.测试数据显示 0.前言   树莓派是小型计算机,可以作为移动机器人的控制器,随机器人运动,不便于外接 ...

最新文章

  1. 这些编程语言程序员工资最高!Java才第四
  2. 安装Team Services Agent Win7
  3. redis python zset
  4. 设计模式复习-观察者模式
  5. windows 修改hosts 立即生效的方法
  6. MYSQL:HAVING
  7. MongoDB 命令速查表
  8. 调整eclipse、SpringToolSuite4编辑器的内存大小以及显示
  9. [学习总结] python语言学习总结 (三)
  10. SSAS中出现“对象引用未被设置到对象实例”的解决记录
  11. Mongoose Schema hasn't been registered for model
  12. calibre转换电子书格式教程
  13. matlab绘制叮当猫
  14. 脑袋越大就会越聪明么?
  15. HTML+CSS3(六)——行内元素和块级元素
  16. visio2007 uml模板包
  17. Paddle-GPU环境配置问题解决总结 Error: Cannot load cudnn shared library. Cannot invoke method cudnnGetVersion
  18. 阿里云大数据认证——使用DataV制作实时销售数据可视化大屏-课堂笔记
  19. 搜狗联合清华天工研究院推出ChoreoNet模型:让数字人随着音乐翩翩起舞
  20. 数字图像处理学习笔记-图像处理基础1

热门文章

  1. MSP430G2553与MSP430F5336系列单片机总结[0]——概述
  2. RMVB遭遇“无法渲染此文件”解决方案
  3. 敢于追求梦想 人生才会辉煌 月薪19000
  4. 仪表数字图像识别的传统方法
  5. adb 连接无线手机安装 apk
  6. 复数四则运算(Web)
  7. PHP+Mysql如何实现数据库增删改查
  8. 神经网络的多任务学习方法,避免灾难性遗忘
  9. 黑马OC听课笔记(第一天)
  10. mp4格式视频因为录制到一半断电,导致损坏能修复