当前位置:网站首页>rospy Odometry天坑小计
rospy Odometry天坑小计
2022-07-25 09:24:00 【墨色玫瑰】
rospy Odometry天坑小计
在使用 python 自己搭建 ros 控制小车的上位机接口时,遇到了一个非常奇怪的问题,发布里程计的时候,一旦里程计得到订阅,发布者就会报 ndarray 属性找不到错误,乍一看着实让人脑瓜疼,明明处理的是四元数,为什么会和 n u m p y numpy numpy扯上关系。百度和 C S D N CSDN CSDN上并没有找到相关问题的记录,有人发出来的示例也都没有处理这个问题。这里记录一下,既是笔记,也是警示自己,处理这些情况的时候一定不能先入为主,还是得谨慎思考。
首先上图,报错截图如下,充满迷惑:
引发这个错误的源代码如下:
odom = nav_msgs.msg.Odometry()
odom.header.stamp = self.last_t
odom.header.frame_id = "odom"
odom.pose.pose.position.x = self.x
odom.pose.pose.position.y = self.y
odom.pose.pose.position.z = 0.
odom.pose.pose.orientation = odom_q
odom.child_frame_id = 'base_link'
odom.twist.twist.linear.x = self.vx
odom.twist.twist.linear.y = self.vy
odom.twist.twist.linear.z = 0.
odom.twist.twist.angular.z = self.w
print(odom)
self.odom_pub.publish(odom)
错误出现的第一时间翻阅了 Odometry 源码,并没有发现什么问题,CSDN 上也没有发现类似的情况。最终谷歌找到ROS问答社区发现问题,这里这个兄弟也遭遇了同样的情况。
问题出在上述代码第7行,其中 odom.pose.pose.orientation 是一个标准的四元数类型,而 odom_q 却是一个 numpy 的数组,因此在消息内部处理的时候遭遇该错误。
而这个 odom_q 是来自于下面这样一行变换,这句的作用是通过欧拉角得到四元数,但是这个函数有点反人类,它返回的四元数使用 ndarray 表示的,而不是标准的四元数,这于 C + + C++ C++中的完全不一样,从 C + + C++ C++转过来轻易不会注意到这个问题。
odom_q = tf.transformations.quaternion_from_euler(0, 0, self.thelta)
(也不知道作者和管理者是怎么想的,这也太坑了)
找到问题之后,问题就好办了,正确的写法如下:
odom.pose.pose.orientation.x = odom_q[0]
odom.pose.pose.orientation.y = odom_q[1]
odom.pose.pose.orientation.z = odom_q[2]
odom.pose.pose.orientation.w = odom_q[3]
至此,问题都得到解决。
参考文章:Error assigning a python quaternion - ROS Answers: Open Source Q&A Forum
边栏推荐
- TensorFlow2 安装快速避坑汇总
- 基于PackNet的演进——丰田研究院(TRI)深度估计文章盘点(下)
- ADC介绍
- Development history of convolutional neural network (part)
- Segmentation based deep learning approach for surface defect detection
- CUDA explanation - why GPU is used in deep learning
- VCS常用命令
- 目标检测与分割之MaskRCNN代码结构流程全面梳理+总结
- Hyperautomation for the enhancement of automation in industries 论文翻译
- First knowledge of opencv4.x --- box filtering
猜你喜欢

Camera attitude estimation

基于PackNet的演进——丰田研究院(TRI)深度估计文章盘点(下)

缺陷检测网络--混合监督(kolektor缺陷数据集复现)

Creation of adjacency table of undirected connected graph output breadth depth traversal

SystemVerilog语法

Temperature, humidity and light intensity acquisition based on smart cloud platform

Principle analysis of self supervised depth estimation of fish eye image and interpretation of omnidet core code

Customize dialog to realize the pop-up box of privacy clause statement imitating Netease cloud music

CDA Level1知识点总结之业务分析报告与数据可视化报表

ESP32连接阿里云MQTT物联网平台
随机推荐
testbench简介
单目深度估计自监督模型Featdepth解读(上)——论文理解和核心源码分析
LoRA转4G及网关中继器工作原理
手持振弦采集仪对振弦传感器激励方法和激励电压
MLX90640 红外热成像仪测温模块开发说明
工程监测无线中继采集仪和无线网络的优势
无线中继采集仪的常见问题
目标检测与分割之MaskRCNN代码结构流程全面梳理+总结
CDA LEVELⅠ2021新版模拟题二(附答案)
用Arduino写个ESP32看门狗
Segmentation based deep learning approach for surface defect detection
Preliminary understanding and implementation of wechat applet bottom navigation bar
First knowledge of opencv4.x --- image histogram matching
AI模型风险评估 第1部分:动机
How to import a large amount of data in MATLAB
Connection and data reading of hand-held vibrating wire vh501tc collector sensor
ADC介绍
SD/SDIO/EMMC
Server CUDA toolkit multi version switching
Mlx90640 infrared thermal imager temperature measurement module development instructions