mpmi_shared_control 排坑记录

任务

曾经尝试跑过这个项目,但是没跑起来,现在感觉自己debug能力更强了些,再拾起来跑一跑。

踩坑回顾

empy版本问题

症状描述

我先git项目,然后创建一个python3.10的conda环境,然后编译,遇到缺什么包就装什么。
我发现一般都缺empy,rospkg,pyyaml,catkin_pkg这几个包。
然后又遇到了AttributeError: module 'em' has no attribute ' RAW_OPT'这个问题,这个刚总结过,安装3.3.4版本就行。

解决方案

所以以后创建一个新conda环境,编译工作空间前直接这么搞:

pip3 install empy==3.3.4 rospkg pyyaml catkin_pkg

gcc4.3 取消头文件多层关联问题

问题描述

编译中出现如下报错:

error: there are no arguments to ‘iota’ that depend on a template parameter, so a declaration of ‘iota’ must be available [-fpermissive]

这篇博客参考博客讲得很清楚,就是gcc4.3开始取消了头文件的多层关联。也就是说以前你include了头文件1,头文件1又include头文件2,那你就include了头文件2,但现在不是了,如果你要用到头文件2中的函数,就得再include一遍头文件2,否则就会报错error: there are no arguments to ‘某个函数’ that depend on a template parameter, so a declaration of ‘某个函数’ must be available [-fpermissive]

解决方案

既然如此就很好解决了,找到iota的头文件,根据博客所说,应当:

#include <numeric>

注意,这个项目里两个环境的代码都缺这个,都得加。这时候编译就没问题了。

pyglet版本问题

症状描述

此后运行launch过程中又陆陆续续安装了好几个包:pybullet、numpy、IPython、netifaces、pyglet、Box2D。
这时候运行balance Launcn就没有报错了,但是仿真环境是空的!啥也没有!
运行car racing后又报错:

ile "/home/lcy-magic/anaconda3/envs/MPMI/lib/python3.10/site-packages/Box2D/Box2D.py", line 435, in <module>
    _Box2D.RAND_LIMIT_swigconstant(_Box2D)
AttributeError: module '_Box2D' has no attribute 'RAND_LIMIT_swigconstant'
Traceback (most recent call last):
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/core.py", line 572, in signal_shutdown
    h()
  File "/home/lcy-magic/SharedControl_TEST/mpmi_shared_control/mpmi_sc/src/race_car_shared_control/scripts/system.py", line 197, in shutdown_hook
    self.shutdown_pub.publish("shutdown")
AttributeError: 'Simulator' object has no attribute 'shutdown_pub'

我觉得可能是BOX2D问题,然后参照参考回答,进行了:

pip3 uninstall box2d
pip3 install box2d box2d-kengz
pip3 install gym[all]

再运行,报错:

NameError: name 'glPushMatrix' is not defined
Traceback (most recent call last):
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/core.py", line 572, in signal_shutdown
    h()
  File "/home/lcy-magic/SharedControl_TEST/mpmi_shared_control/mpmi_sc/src/race_car_shared_control/scripts/system.py", line 197, in shutdown_hook
    self.shutdown_pub.publish("shutdown")
AttributeError: 'Simulator' object has no attribute 'shutdown_pub'

参照参考博客执行:

pip3 install pyglet==1.5.27

再运行报错:

File "/home/lcy-magic/SharedControl_TEST/mpmi_shared_control/mpmi_sc/src/gym/gym/envs/box2d/car_racing.py", line 389, in render
    arr = np.fromstring(image_data.data, dtype=np.uint8, sep='')
AttributeError: 'ImageData' object has no attribute 'data'
Traceback (most recent call last):
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/core.py", line 572, in signal_shutdown
    h()
  File "/home/lcy-magic/SharedControl_TEST/mpmi_shared_control/mpmi_sc/src/race_car_shared_control/scripts/system.py", line 197, in shutdown_hook
    self.shutdown_pub.publish("shutdown")
AttributeError: 'Simulator' object has no attribute 'shutdown_pub'

参照参考博客执行:(看来还是pyglet版本问题)

pip3 install pyglet==1.2.4

再运行又报错,主要是这几句:

Track generation: 1173..1478 -> 305-tiles track
Traceback (most recent call last):
  File "/home/lcy-magic/anaconda3/envs/MPMI/lib/python3.10/site-packages/pyglet/text/runlist.py", line 404, in ranges
    starts[i], ends[i], values[i] = next(iterator)
StopIteration

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/home/lcy-magic/SharedControl_TEST/mpmi_shared_control/mpmi_sc/src/race_car_shared_control/scripts/system.py", line 201, in <module>
    sim = Simulator()
  File "/home/lcy-magic/SharedControl_TEST/mpmi_shared_control/mpmi_sc/src/gym/gym/envs/box2d/car_racing.py", line 342, in render
    self.score_label = pyglet.text.Label('0000', font_size=36,
RuntimeError: generator raised StopIteration
Traceback (most recent call last):
  File "/opt/ros/noetic/lib/python3/dist-packages/rospy/core.py", line 572, in signal_shutdown
    h()
  File "/home/lcy-magic/SharedControl_TEST/mpmi_shared_control/mpmi_sc/src/race_car_shared_control/scripts/system.py", line 197, in shutdown_hook
    self.shutdown_pub.publish("shutdown")
AttributeError: 'Simulator' object has no attribute 'shutdown_pub'

根据参考回答所说,还是pyglet版本问题,要么升级到更新的pyglet版本,要么把python降级到3.6。因为那个人的python是3.7,pyglet是1.2.4.
然后我虽然安装了一个版本,结果他没有:
在这里插入图片描述
我就照着里面试,发现1.3.0还是有迭代器问题,1.4.0又回到了'ImageData' object has no attribute 'data'这个问题。我就是因为这个问题回退到1.2.4的。然后我猜在1.4.0和1.3.0之间可能有个合适的版本,同时解决上述俩问题。然后我又找了下'ImageData' object has no attribute 'data'的相关答案,看能不能不回退到那么老的版本,实在不行我一个一个试。

解决方案

然后根据这个参考回答,执行了:

pip3 install pyglet==1.3.2

终于成功把车跑起来了!
在这里插入图片描述
虽然平衡车那个任务仍然跑不起来,但无所谓,我本来就是要跑那个赛车任务的,平衡车这个我猜可能是代码问题。

症状是:

  1. 没有报错
    在这里插入图片描述
  2. 但是仿真界面是空白的
    在这里插入图片描述
    有知道可能什么原因的朋友麻烦告诉我谢谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Debug的魔法小马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值