ros接入IMU数据,打包发布topic
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相关推荐
- ROS serial 读取IMU数据, 打包发布topic
目录 一.查看 usb 挂载情况 二.安装serial包 三.创建ROS工程包(该过程可跳过) 四.基于开源串口程序修改 4.1 开源代码配置 4.2 根据自身状态数据包示例进行修改 参考 一.查看 ...
- ROS2读取realsense摄像头数据并发布topic到ros2
环境:ubuntu18.04, ros2 写在前面: 最近在写项目的自动化测试,需要实现先从realsense camera录制一段数据,在test case中需要以发布topic的方式播放录制的数据 ...
- ROS2手写接收IMU数据(Imu)代码并发布
目录 前言 接收IMU数据 IMU的串口连接 问题 python接收串口数据 python解析数据 ROS2发布IMU数据 可视化IMU数据 效果 前言 在前面测试完了单独用激光雷达建图之后,一直想把 ...
- ROS:bag数据包内容提取——雷达点云数据和imu数据
通常在利用ros采集传感器数据时,我们会得到一个包含多个传感器数据的bag数据包,下面将会介绍从bag数据包提取雷达点云数据和imu数据的方法. 系统版本:Ubuntu20.04 ROS版本:Noet ...
- 【VINS-MONO测试】安卓手机采集mono+imu数据
上一个vins-mono环境配置测试完成后,初步建立好实验环境,接下来开始进行数据采集(cam+imu).打包.标定.运行. 记录一下后续要更新的内容吧: ros打包.另外两种标定方式.手机在线测试. ...
- 使用ros发布UVC相机和串口IMU数据
1.目的:为了可以标定普通USB相机和固定在相机上的外置IMU的外参,我希望通过ROS获取更高分辨率和更高频率的图像数据,并且可以将图像和imu的topic发布出来,直接使用rosbag record ...
- ros rviz显示rosbag中的图像和imu数据
一.rosbag相关的指令 1. rostopic list //列举出系统中正在发布的ros 话题 2. rosbag record -a //录制系统中所有正在发布的ros 话题 3. rosba ...
- 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用
[一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...
- ROS开发之如何将树莓派采集的雷达、IMU数据在虚拟机rviz中显示?
文章目录 0.前言 1.获取IP和计算机名 2.配置hosts文件 3.配置.bashrc文件 4.测试数据显示 0.前言 树莓派是小型计算机,可以作为移动机器人的控制器,随机器人运动,不便于外接 ...
最新文章
- 这些编程语言程序员工资最高!Java才第四
- 安装Team Services Agent Win7
- redis python zset
- 设计模式复习-观察者模式
- windows 修改hosts 立即生效的方法
- MYSQL:HAVING
- MongoDB 命令速查表
- 调整eclipse、SpringToolSuite4编辑器的内存大小以及显示
- [学习总结] python语言学习总结 (三)
- SSAS中出现“对象引用未被设置到对象实例”的解决记录
- Mongoose Schema hasn't been registered for model
- calibre转换电子书格式教程
- matlab绘制叮当猫
- 脑袋越大就会越聪明么?
- HTML+CSS3(六)——行内元素和块级元素
- visio2007 uml模板包
- Paddle-GPU环境配置问题解决总结 Error: Cannot load cudnn shared library. Cannot invoke method cudnnGetVersion
- 阿里云大数据认证——使用DataV制作实时销售数据可视化大屏-课堂笔记
- 搜狗联合清华天工研究院推出ChoreoNet模型:让数字人随着音乐翩翩起舞
- 数字图像处理学习笔记-图像处理基础1