ROS noetic调用arbotix_gui出现断言错误assert len(args) == 2 + self.expectedIDs

Mac M1 conda配置的ROS noetic,使用源码安装的arbotix

使用arbotix_gui命令出现断言错误assert len(args) == 2 + self.expectedIDs,

解决方案:

找到并打开报错位置的arbotix_gui文件(我的是在自己源码安装arbotix所在的工作空间内),

根据上面的警告内容修改相应的代码

一、解决思路

1. 警告:Use :class:`App` instead

这个警告的意思是:正在使用已弃用的类PySimpleApp。改为使用:App类

  图中红线标注的是报错的文件和出错行数,使用gedit编辑器打开arbotix_gui文件,根据自己电脑实际报错位置修改下面代码路径

sudo gedit ~/catkin_ws/src/arbotix_ros/arbotix_python/bin/arbotix_gui

使用快捷键ctrl + F (macos系统为command + F)搜索蓝色下划线的  wx.StaticLine 或者根据红线指示的报错行73,找到相应代码,

app = wx.PySimpleApp()

将wx.StaticLine函数中的width/2修改为int(width/2)即可

app = wx.App()

2. 警告:an integer is required

这个警告的意思是:使用了一个浮点数,而该处实际上需要一个整数。隐式地将浮点数转换为整数使用 __int__ 在 Python 中已被弃用,并且在将来的 Python 版本中可能会被移除。

也就是width/2是浮点数,需要把它强制转换为int整数类型

 图中红线标注的是报错的文件和出错行数,使用gedit编辑器打开arbotix_gui文件,根据自己电脑实际报错位置修改下面代码路径

sudo gedit ~/catkin_ws/src/arbotix_ros/arbotix_python/bin/arbotix_gui

使用快捷键ctrl + F (macos系统为command + F)搜索蓝色下划线的  wx.StaticLine 或者根据红线指示的报错行73,找到相应代码,

wx.StaticLine(self.movebase, -1, (width/2, 0), (1,width), style=wx.LI_VERTICAL)

将wx.StaticLine函数中的width/2修改为int(width/2)即可

wx.StaticLine(self.movebase, -1, (int(width/2), 0), (1,width), style=wx.LI_VERTICAL)

3. 警告:wxPyDeprecationWarning: Call to deprecated item __call__. Use :meth:`EvtHandler.Bind` instead

这个警告的意思是:在代码中使用了 wxPython 中已被弃用的 __call__ 方法,建议使用新的方法 EvtHandler.Bind 来替代

图中红线标注的是报错的文件和出错行数,使用gedit编辑器打开arbotix_gui文件,根据自己电脑实际报错位置修改下面代码路径

sudo gedit ~/catkin_ws/src/arbotix_ros/arbotix_python/bin/arbotix_gui

使用快捷键ctrl + F (macos系统为command + F)搜索蓝色下划线的  wx.EVT_CLOSE(self, self.onClose) 或者根据红线指示的报错行125,找到相应代码,

wx.EVT_CLOSE(self, self.onClose)

将其修改为

self.Bind(wx.EVT_CLOSE, self.onClose)

4.  错误:No module named 'serial'

在当前conda环境下,使用pip安装pyserial库直接安装serial错误更多

pip install pyserial

二、解决内容:

 图中红线标注的是报错的文件和出错行数,使用gedit编辑器打开出错的arbotix_gui文件,根据自己电脑实际报错位置修改下面代码路径

sudo gedit ~/catkin_ws/src/arbotix_ros/arbotix_python/bin/arbotix_gui

203行的app = wx.PySimpleApp()修改为app = wx.App()

app = wx.App()

73、74行的wx.StaticLine函数中的width/2强制转换为int类型(注意缩进)

wx.StaticLine(self.movebase, -1, (int(width/2), 0), (1,width), style=wx.LI_VERTICAL)
wx.StaticLine(self.movebase, -1, (0, int(width/2)), (width,1))

164、165行的dc.DrawLine函数中的width/2强制转换为int类型(注意缩进)

dc.DrawLine(int(width/2), 0, int(width/2), width)
dc.DrawLine(0, int(width/2), width, int(width/2))

169行的dc.DrawCircle函数中的(width/2)强制前面添加int(注意缩进)

dc.DrawCircle(int(width/2) + self.X*int(width/2), int(width/2) - self.Y*int(width/2), 5)

修改125 ~ 129行的代码(注意缩进

#用以参考的原代码,不要复制这几行

wx.EVT_CLOSE(self, self.onClose)

wx.EVT_TIMER(self, self.TIMER_ID, self.onTimer)

# bind the panel to the paint event

wx.EVT_PAINT(self, self.onPaint)

        self.Bind(wx.EVT_CLOSE, self.onClose)
        self.Bind(wx.EVT_TIMER, self.onTimer, id=self.TIMER_ID)

        # bind the panel to the paint event
        self.Bind(wx.EVT_PAINT, self.onPaint)

安装 pyserial 库(直接安装 serial 会有很多错误)

pip install pyserial

三、解决效果

保存并退出arbotix_gui文件后,重新输入arbotix_gui指令,发现可以打开Arbotix Controller Gui 窗口,问题解决。

roscore # 使用arbotix前要打开roscore
arbotix_gui

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值