ROS运行报错TypeError: must be real number, not RestMode如何修复?
问题根本原因
- 核心错误是你调用
IK类实例方法calculateAngles时多传入了冗余的self参数:self.rb是你提前实例化的IK类对象,Python调用类的实例方法时,会自动将实例本身作为第一个self参数传入方法,你手动额外传入了当前RestMode类的实例self,导致整个参数列表完全错位。
两个报错的对应逻辑
- 当
calculateAngles参数定义为calculateAngles(self,roll,pitch,yaw,dx,dy,dz,leg)时:
实际接收到的参数依次为:自动传入的IK实例(对应第一个参数self)、你手动传入的RestMode实例(对应第二个参数roll)、你传入的roll数值(对应pitch参数)……所有参数全部错位,方法需要数值类型的roll时拿到了RestMode实例,因此抛出must be real number, not RestMode错误。 - 当你将leg调整到参数第一位,定义改为
calculateAngles(self,leg,roll,pitch,yaw,dx,dy,dz)时:
实际接收到的参数里,本该接收数值的位置被你传的leg字符串(如FL/RL等)占用,因此抛出must be real number, not str错误。
修复方案
仅需要修改调用calculateAngles的代码行,删除冗余的第一个self参数即可,同时将calculateAngles的参数定义恢复为最初的顺序:
# 把原来的调用代码 (q1,q2,q3,ht) = self.rb.calculateAngles(self,roll,pitch,yaw,dx,dy,dz,leg) # 修改为 (q1,q2,q3,ht) = self.rb.calculateAngles(roll,pitch,yaw,dx,dy,dz,leg)
内容的提问来源于stack exchange,提问作者IRobo
相关产品推荐
相关产品推荐

