任务
曾经尝试跑过这个项目,但是没跑起来,现在感觉自己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
终于成功把车跑起来了!
虽然平衡车那个任务仍然跑不起来,但无所谓,我本来就是要跑那个赛车任务的,平衡车这个我猜可能是代码问题。
症状是:
- 没有报错
- 但是仿真界面是空白的
有知道可能什么原因的朋友麻烦告诉我谢谢。