运行智能车主入口程序main.py时出现‘ttyUSB0’或'ttyUSB1'相关错误导致程序无法启动
应用进程占用内存超出限制导致系统异常终止
现象描述
以ATC工具为例,当打开了虚拟内存限制而atc尝试使用超出限制的内存大小时会报错,报错信息一般如下所示:
ATC start working now, please wait for a moment.
terminate called after throwing an instance of 'std::system_error'
what(): Resource temporarily unavailable
/usr/local/Ascend/ascend-toolkit/latest/bin/atc: line 17: 44752 Aborted (core dumped) ${PKG_PATH}/bin/atc.bin "$@"
(base) root@davinci-mini:/home/lanxi-samples/samples/cplusplus/level1_single_api/4_op_dev/2_verify_op/acl_execute_add/run/out# Process ForkServerProcess-2:
Traceback (most recent call last):
File "/root/miniconda3/lib/python3.9/multiprocessing/process.py", line 315, in _bootstrap
self.run()
File "/root/miniconda3/lib/python3.9/multiprocessing/process.py", line 108, in run
self._target(*self._args, **self._kwargs)
File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/common/repository_manager/route.py", line 61, in wrapper
raise exp
File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/common/repository_manager/route.py", line 58, in wrapper
func(*args, **kwargs)
File "/usr/local/Ascend/ascend-toolkit/latest/python/site-packages/tbe/common/repository_manager/route.py", line 275, in task_distribute
key, func_name, detail = resource_proxy[TASK_QUEUE].get()
File "<string>", line 2, in get
File "/root/miniconda3/lib/python3.9/multiprocessing/managers.py", line 809, in _callmethod
kind, result = conn.recv()
File "/root/miniconda3/lib/python3.9/multiprocessing/connection.py", line 255, in recv
buf = self._recv_bytes()
File "/root/miniconda3/lib/python3.9/multiprocessing/connection.py", line 419, in _recv_bytes
buf = self._recv(4)
File "/root/miniconda3/lib/python3.9/multiprocessing/connection.py", line 388, in _recv
raise EOFError
解决方案
-
Ctrl+C关闭当前进程。
如果发现系统卡死可以在SSH客户端界面中立刻按Ctrl+C关闭当前进程。
注意:系统可能需要至多50秒才能从假死状态中恢复响应。
-
借助ulimit命令,在atc等内存消耗比较大的进程启动前设置内存使用上限,防止内存耗尽导致宕机。
目前的测试中,仅限制虚拟内存的使用也有防止系统宕机的作用。
-
打开虚拟内存限制
ulimit -v 204800002048000代表kb为单位的虚拟内存上限即2GB。
查看虚拟内存限制是否生效,可以使用ulimit -a命令或者直接使用ulimit -v。
ulimit -a输出:
(base) root@davinci-mini:~# ulimit -areal-time non-blocking time (microseconds, -R) unlimitedcore file size (blocks, -c) 0data seg size (kbytes, -d) unlimitedscheduling priority (-e) 0file size (blocks, -f) unlimitedpending signals (-i) 12584max locked memory (kbytes, -l) 449876max memory size (kbytes, -m) unlimitedopen files (-n) 1024pipe size (512 bytes, -p) 8POSIX message queues (bytes, -q) 819200real-time priority (-r) 0stack size (kbytes, -s) 8192cpu time (seconds, -t) unlimitedmax user processes (-u) 12584virtual memory (kbytes, -v) 2048000file locks (-x) unlimitedulimit -v输出:
(base) root@davinci-mini:~# ulimit -v2048000 -
关闭虚拟内存限制
当确定不需要运行atc等有宕机风险的程序时,可以关闭内存限制。
ulimit -v unlimited确保内存限制已关闭,可再次使用ulimit -a查看限制详情。
-
父主题: 样例运行
智能车手动控制时车轮转向错误或四个轮子转速差异较大
现象描述
进入到智能车的手动控制环节后,启动智能车的控制主入口,按照应用开发指南中的键盘操作智能车,智能车车轮反向运转或将智能车放到运动场地后,运行路线不走直线。
可能原因
考虑到智能车成本问题,TT减速电机会偶发出场默认旋转方向相反的情况,这导致了车轮反向运转;另外也由于电机在相同电压电平下产生扭矩也有差异,这将导致四个轮子转速有差异,运行路线不是直线。
解决方案
针对车轮反转的情况,需要进入到开发者套件上的样例代码目录中,修改控制电机转向的参数。
cd /home/Car/python/src/actions
vim base_action.py
并找到“self.motor_rating”参数,四个参数分别对应下发到电机的速度比例,从左到右依次对应智能车应用开发指南中的[直流电机及其控制](https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/23.0.RC1/Application Cases/ivadg/ivadg_0007.html)章节的1、2、3、4号电机,将反转的电机对应的速度参数前添加一个负号即可改变电机转向。
图1 “self.motor_rating”参数界面图

针对四个轮子转速有差异的情况,需要修改图1中的同一参数比率大小。若在前进时智能车向左偏移,说明小车右侧车轮速度相对左侧车轮速度快了,针对性调整参数的大小即可。
父主题: 智能车应用运行问题
运行智能车主入口程序main.py时出现‘ttyUSB0’或'ttyUSB1'相关错误导致程序无法启动
现象描述
运行智能车主入口程序main.py时出现‘ttyUSB0’或'ttyUSB1'相关错误导致程序无法启动。
可能原因
USB扩展坞和ESP32控制模块都以USB连接到开发者套件上,接口接反导致程序无法启动。
解决方案
将USB扩展坞和ESP32控制模块在开发者套件上的接口调换一下,重新运行程序即可。
父主题: 智能车应用运行问题
jupyter notebook推理样例运行缓慢或跑不起来
现象描述
运行开箱推理样例时,推理执行缓慢或跑不起来。
可能原因
同时打开了多个推理样例notebook,占用了过多系统内存。
解决方案
关掉不需要用到的notebook,可以在侧边栏通过shutdown操作清理notebook,如图1和图2所示:
图1 界面图

图2 界面图

父主题: 样例运行
创建交换分区
现象描述
为解决开发者套件上,使用ATC工具转换模型时会出现转换过程很慢或卡住不动的问题。该问题可能由于内存不足,导致进程卡死。用户可通过创建交换分区的方式以分担开发者套件的内存压力,当前镜像已提前为用户创建,若用户需要关闭或关闭后重新开启可参见此章节进行操作。
解决方案
创建交换分区
-
以root用户远程登录开发者套件。
-
创建一个大小为8G的swap分区。
fallocate --length 8G /swapfile -
修改文件权限。
chmod 600 /swapfile -
创建swap分区。
mkswap /swapfile回显如下:
Setting up swapspace version 1, size = 8 GiB (8589934592 bytes)no label, UUID=2b9e68ec-e6f5-46df-bd10-8f2955026de7 -
挂载swap分区。
swapon /swapfile -
执行命令查看分区是否创建成功。
free -h-h,--human:以计算机硬盘存储容量的常用字节显示存储大小。
回显如下:
total used free shared buff/cache availableMem: 3.4Gi 795Mi 1。9Gi 33Mi 759Mi 2.4GiSwap: 8.0Gi 0B 8.0Gi
关闭交换分区
-
执行命令临时禁用交换分区。
swapoff -a -
执行命令打开文件,注释部分代码。
vi /vat/expan.sh按下i键进入编辑模式,将此行内容注释。
swap_flag=$(free -h | grep Swap | cut -d' ' -f14 | cut -d'B' -f1)if [ "$swap_flag" == "0" ]; thenmkswap /swapfileswapon /swapfilefi -
执行命令打开文件,注释部分代码。
vi /etc/fstab按下i键进入编辑模式,将此行内容注释。
/swapfile注释后,开发者套件启动时将不会自动挂载交换分区。
-
执行命令重启开发者套件,生效配置。
reboot
开启交换分区
-
执行命令打开文件,消除部分代码注释。
vi /etc/fstab按下i键进入编辑模式,将此行内容注释。
/swapfile注释后,开发者套件启动时将不会自动挂载交换分区。
-
执行命令重启开发者套件,生效配置。
reboot
父主题: 样例运行
配置进程内存限制(OOM Killer)
现象描述
开发者套件的内存资源有限,如果某个进程占用的内存超出系统限制,可能出现系统异常,无法响应命令的现象,届时需要重新上下电才能恢复正常。因此,需要限制进程的内存占用量。
解决方案
关闭内存限制
-
执行以下命令关闭OOM Killer服务。
systemctl disable oom_killer -
分别将/root/.bashrc与/home/HwHiAiUser/.bashrc文件中代码注释。
-
打开/root/.bashrc文件。
vi /root/.bashrc -
打开/home/HwHiAiUser/.bashrc
vi /home/HwHiAiUser/.bashrc
注释以下代码:
echo $$ > /sys/fs/cgroup/memory/usermemory/tasks -
-
执行命令重启开发者套件。
reboot
开启内存限制
:::note 说明 当前一键制卡工具提供的在线镜像中,root用户和HwHiAiUser用户已完成了以上操作,打开了该内存控制机制。 :::
-
执行以下命令开启OOM Killer服务。
systemctl enable oom_killer -
取消/root/.bashrc与/home/HwHiAiUser/.bashrc文件中代码注释。
-
打开/root/.bashrc文件。
vi /root/.bashrc -
打开/home/HwHiAiUser/.bashrc
vi /home/HwHiAiUser/.bashrc
取消以下代码注释:
echo $$ > /sys/fs/cgroup/memory/usermemory.tasks -
-
执行命令重启开发者套件。
reboot
父主题: 样例运行
在线提单