Ubuntu 20.04 Docker运行南大ICS2024实验环境

由于本机使用的Ubuntu 20.04双系统但是实验环境要求使用22.04,由于不想在Windows下开虚拟机,遂尝试用Docker运行22.04.

Docker镜像选用的是:osrf/ros:humble-desktop-full-jammy ,可能有一些桌面环境显示的库,这个实验是需要桌面环境的,但是这个镜像里面没有完整的桌面环境。

PA0顺利搭建完毕,开始尝试PA1小游戏,正常编译通过,运行时卡死,然后有一个灰屏界面,一直没有视频加载出来 

问题1

ALSA lib confmisc.c:855:(parse_card) cannot find card '0'
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_card_inum returned error: No such file or directory
ALSA lib confmisc.c:422:(snd_func_concat) error evaluating strings
ALSA lib conf.c:5178:(_snd_config_evaluate) function snd_func_conca

搜索发现ALSA 是高级Linux声音架构,结合搜索结果和Docker特殊环境,我猜测Docker是Docker配置的问题。

感谢:ubuntu docker 调用宿主机声卡(alsa)_ubuntu docker aplay-l 为什么包含蓝牙耳机-CSDN博客

解决

我通过重新run一个容器,安装驱动(上面老哥的方案我只搞到这3步,导致后面还是有问题),实现Docker直接使用主机的音频设备,然后解决了这些的问题

问题2

上面报错没有了,但是有新的ALSA:

ALSA lib pcm_dmix.c:1032:(snd_pcm_dmix_open) unable to open slave

这个slave是子设备,应该是无法打开音频子设备

解决

感谢:https://github.com/Uberi/speech_recognition/issues/526

其中提到

The problem is related to the alsa.conf.
Go to /usr/share/alsa/alsa.conf
then comment lines with unknown PCM cards e.g. cards.pcm.rear:

我比较了一下Docker容器里的/usr/share/alsa/alsa.conf和本机里的/usr/share/alsa/alsa.conf文件,二者内容不一样,因为上面让Docker直接用主机的声卡,so为了一致,我把主机里的alsa.conf文件覆盖了容器里的。

成功,unable to open slave的问题成功解决。

问题3

没有报错了,但是卡在了 终端输出了: Initializing video... 后,就卡死,然后有一个灰屏界面,一直没有视频加载出来

解决

        经过我在Makefile里加-g编译选项,通过调试,发现程序卡在一个死循环里。

while ((free = GetWriteSound()) == 0) break;  // wait until there is free space



/**
 * Returns the amount of free space in the audio buffer.
 */
  uint32
GetWriteSound(void)
{
#if SOUND_CONFIG != SOUND_NONE
  int count = io_read(AM_AUDIO_STATUS).count / sizeof(int16_t);
  return s_BufferSize - count;
#else
  return 0;
#endif
}

通过VSCode的变量显示,我发现里面变量free一直==0,就是声卡缓冲区一直是满的。我干脆直接用break;跳出了循环,跳出两层循环,然后运行,成功显示出页面了

问题4

        成功有游戏界面了,但是游戏程序不受我键盘控制,一直快速执行。

        怀疑还是前面的声卡缓冲区的问题,只能改回来源代码。

解决

        我又回到了第一个老哥的文章,我发现我没有按照文章搞完,没有在Docker里尝试播放mp3,遂回到老哥文章,继续从第4步搞,直到在配好播放配置后,成功用play播放了《Are you OK》

成功

        这时,回到实验代码,重新编译执行。终于成功了,游戏界面,音效都正常播放 \ww/。贴一张

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值