STM32端返回的x轴线速度、y轴线速度是相对于自身的机体坐标系的速度,而机器人的位置信息是相对于世界坐标系的位置,所以在对速度进行积分前, 要先将机体坐标系下的x轴线速度、y轴线速度转换到世界坐标系 ,如图:

这个坐标变换可以通过一个简单的旋转矩阵来实现

其中θ就是机器人的偏航角。相应的程序如下:
/* 对速度进行积分得到位移 */
// 获取当前时间
current_time = ros::Time::now();
// 获取积分间隔
double dt = (current_time - last_time).toSec();
last_time = current_time;
// 将机体系速度转换到里程计坐标系
double delta_x = (vx * cos(th) - vy * sin(th)) * dt;
double delta_y = (vx * sin(th) + vy * cos(th)) * dt;
// 速度积分
x += delta_x;
y += delta_y;
在机器人中,一般使用四元数/旋转矩阵的形式来表示机器人的姿态,而不是欧拉角形式。所以需要将STM32返回的偏航角转换为四元数,程序如下:
geometry_msgs::Quaternion odom_quat = tf::createQuaternionMsgFromYaw(th);
以上就获取了完整的机器人里程计数据,接下来需要将里程计数据发布到ROS中。
nav_msgs::Odometry odom;
geometry_msgs::TransformStamped odom_trans;
odom_trans.header.stamp = current_time;
odom_trans.header.frame_id = "odom";
odom_trans.child_frame_id = "base_link";
odom_trans.transform.translation.x = x;
odom_trans.transform.translation.y = y;
odom_trans.transform.translation.z = 0.0;
odom_trans.transform.rotation = odom_quat;
// 发布坐标变换
odom_broadcaster.sendTransform(odom_trans);
odom.header.stamp = current_time;
odom.header.frame_id = "odom";
odom.child_frame_id = "base_link";
// 设置机器人的位置和姿态
odom.pose.pose.position.x = x;
odom.pose.pose.position.y = y;
odom.pose.pose.position.z = 0.0;
odom.pose.pose.orientation = odom_quat;
// 设置机器人的速度
odom.twist.twist.linear.x = vx;
odom.twist.twist.linear.y = vy;
odom.twist.twist.angular.z = vth;
// 发布里程计消息
odom_pub.publish(odom);
运行后,打开PC上的Ubuntu,配置ip从而实现远程连接嵌入式处理器上的ROS系统,参照:ROS多机通信(https://blog.csdn.net/qq_42688495/article/details/115260247)
配置完成后,重新打开一个终端,输入:rviz,打开ROS的可视化工具,按照下图操作即可

可视化结果如下:

最后将该rviz配置保存至文件,点击File→Save Config As,将配置保存为xxxx.rviz。下次打开时,在命令行运行:rosrun rviz rviz -d xxxx.rviz即可。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
机器人
+关注
关注
213文章
31391浏览量
223545 -
STM32
+关注
关注
2312文章
11189浏览量
374514 -
ROS
+关注
关注
1文章
296浏览量
18857
发布评论请先 登录
相关推荐
热点推荐
可视化机器人
该机器人配有两个直流电机作为动力来源,采用履带式行进,机器人上面有四个摆臂,可以自由灵活摆动。我们给该机器人开发有相应的上位机,和控制手柄。该机器人有三中控制模式:通过手柄控制的手动控
发表于 07-31 13:14
关于机器人定位与建图,这些小技巧你懂吗
说到机器人自主定位导航解决方案及技术,大家脑海里肯定会浮现“定位”、“建图”、“避障”、“路径规划”等字眼。定位 在思岚提供的自主定位导航解决方案中,主要是通过雷达和里程计的数据来进行定位。虽然
发表于 03-28 15:48
采用MATLAB设计下的可视化与控制
1、前言:MATLAB下机器人可视化与控制---simulink篇(1)主要内容:是利用smimport('YourRobot.urdf');函数将含有机器人文件的机器人导入到MATL
发表于 05-21 09:38
如何去实现一种送餐机器人产品设计
漂移,环境中移动物体过多时容易出错UWB定位误差十几厘米,信号容易遮挡视觉二维码 + 轮子里程计对比后最优方案是 视觉二维码+轮子里程计基于二维码+轮子里程计方法,主要的传感器数据来源
发表于 11-11 07:10
机器人焊装工位的可视化仿真研究
由于机器人焊装工位仿真对象复杂以及传统仿真方法难以建立其准确的仿真模型,本文提出了基于EM-Engineer仿真平台的机器人焊装工位可视化仿真系统。研究了仿真建模、焊接工
发表于 12-18 11:49
•9次下载
使用Python可视化数据,机器人开发编程
机器学习开发,与Mail.Ru Search数据分析负责人Egor Polusmak和Mail.Ru Group数据科学家Yury Kashnitsky一起探索如何使用Python可视化
如何设计液压式双足机器人运动数据可视化系统
液压双足机器人由于具有高负载、快速动态响应等优点,逐渐地应用于军事、救灾等复杂危险的任务中。设计一个稳定、高效的运动数据感知获取系统并实现数据可视化显示,对双足
发表于 03-19 16:03
•6次下载
轮式移动机器人里程计分析
但凡涉及到可移动的机器人的导航系统,大概率会涉及到里程计的计算,比如轮式移动机器人、无人机、无人艇,以及多足机器人等,而计算里程计的方案也有
介绍一种基于编码器合成里程计的方案
摘要:本文主要分析轮式移动机器人的通用里程计模型,并以两轮差速驱动机器人的里程计计算为案例,给出简化后的两轮差速驱动机器人
ROS机器人导航调参手册
在 ROS 中,我们可以输出带有时间戳的里程计数据,然后看机器人达到恒定的最大平移速度(ti)需要多长时间,然后使用来自里程计数据(nav_msgs/Odometry message)来计算这个过程的加速度。多做几次实验求平均值
机器人里程计数据的上传与接收
1.通信协议 里程计数据格式(19字节) 2.STM32端 /** * @brief 发送里程计数据 */ void DataTrans_Odom ( void ) { uint8_t _cnt
机器人里程计数据可视化
评论