在jetson nano上安装ROS melodic

     Jetson nano的镜像使用的是Ubuntu18.04 LTS (绰号Bionic),因此在jetson nano上安装ROS得选择Melodic版,但是因为jetson nano使用的是ARM64架构的芯片,不是X86-64的,而Melodic的ARM64版安装包在国内的清华、中科大等几个源上没有,只能连到国外的服务器上安装,如果你有翻越那伟大的墙的帐号(不明白为何要屏蔽技术类网址服务器?看护墙的那些人是智商堪忧还是不作为呢?把ROS和Android这样的技术类网址屏蔽掉这不是自残么!),那就好办,通过代理服务器解决连接国外源的问题后,直接按照下面的步骤一路安装即可:

   1. sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

   2. sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

   3. sudo apt update  (可选)

   4. sudo apt install ros-melodic-desktop-full

   5. sudo rosdep init  && rosdep update

   6. echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc  && source ~/.bashrc    

   7. sudo apt install python-rosinstall python-rosinstall-generator python-wstool build-essential (可选, for building your own code)

如果没有翻墙帐号,可以使用installing from source的方式,先下载ROS Melodic源码到本地再编译:

   1. sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

   2. sudo apt-get install python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential

   3.  sudo rosdep init  && rosdep update

   4. mkdir ~/ros_catkin_ws && cd ~/ros_catkin_ws

   5. rosinstall_generator desktop_full --rosdistro melodic --deps --tar > melodic-desktop-full.rosinstall

   6. wstool init -j4 src melodic-desktop-full.rosinstall    # j4是因为jetson nano的CPU只有4核可用,如果你的板子有8核就使用-j8

   7. rosdep install --from-paths src --ignore-src --rosdistro melodic -y

   8. ./src/catkin/bin/catkin_make_isolated --install -DCMAKE_BUILD_TYPE=Release   #这里全部编译成功的话,melodic build就可用了

   9. source ~/ros_catkin_ws/install_isolated/setup.bash  #设置使用ROS的环境

上面做第7步时,如果你的网络不好,可能经常在进行到某个包(比如说python-pydot)时出错,对于每个出错的包可能需要反复执行几次下面的命令才能安装成功:

      sudo apt-get update

      sudo -H apt-get install -y python-pydot --fix-missing   #以python-pydot为例

花不少时间在第7步折腾全部成功安装完后,接下来就是最头疼的是第8步了,这一步需要编译247个包,大约编译到190多个包后就会不时出因内存耗尽进程被杀掉的错: cc1plus invoked oom-killer ... Out of memory: Kill process ...这样的错误:

因为jetson nano的内存只有4G,图形桌面起来就占用了1G多,退出图形桌面以文本方式登录进入以节省内存,再以下面的命令单独编译包(以gazebo_plugins为例):

 cd /home/<user>/ros_catkin_ws/build_isolated/gazebo_plugins && /home/<user>/ros_catkin_ws/install_isolated/env.sh make -j4 -l4

    这样的方式大大约可以又成功编译十个以内的包,到二百零几个包,比如进行到perception_pcl下的pcl_ros包时因为耗用内存大,怎么也过不了了,每次都因内存耗尽编译进程会被杀掉:

这情况下,只能执行一些命令在SD卡上开辟一些虚拟内存后再往下编译,这是一个十分费劲折腾的漫长过程,因此如果又翻墙帐号的话建议直接安装Melodic的release版而不建议使用源码来编译出Melodic这种方式。

    安装成功ROS Melodic后,发现还是因为jetson nano的内存只有4G,py-faster-rcnn推理模型启动后就占用了绝大部分内存,只剩下了两三百M的内存了,如果再启动一个相机的ROS节点的话,又会因为内存耗尽系统会杀掉运行py-faster-rcnn推理模型的进程,所以jetson nano板子的硬件配置还是太寒碜了,也就只适合用来跑个模型,同时用来跑ROS节点不可行,先不说性能怎么样,光是4G内存就很容易耗尽,虽然是一次结果失败的尝试,但是这次探索为以后给机器人配置使用英伟达的板子时是否还需要另外配工控板子或PC板子明确了答案。

    P.S.,为了防止某个进程因为系统内存即将耗尽而被linux杀掉,可以查出进程号后往/proc/<PID>/oom_score_adj文件里写入-17组织进程被杀掉:

    pgrep -f "make -j4"  | while read $PID; do echo -17 >/proc/$PID/oom_score_adj; done

当然是这只是个治标不治本的办法。

发布了61 篇原创文章 · 获赞 90 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/XCCCCZ/article/details/100609116