UGV Beast Jetson Orin ROS2 1. 准备工作
| ||||||||||||||||||||||
|
1. 准备工作
由于产品开机默认会自动运行上位机主程序,主程序会占用串口和摄像头资源,这种情况下是不能使用 ROS 2 的,需要结束主程序或禁止主程序自动运行。ROS 2 功能包都是在 Jetson Orin Nano 系统中的 Docker 容器中运行的,因此关闭 Jetson Orin Nano 主程序的运行后,还需要启动 Docker 远程服务,才能远程登录 Docker 容器执行 ROS 2 功能包。
1.1 结束主程序
在终端中实时显示系统中正在运行的任务和进程信息:
top
等待几秒后,可以看见 COMMAND 为 python 的 PID。
按 Ctrl+C 退出查看,接着输入结束该进程的指令:
kill -9 python进程PID
如上图,则输入:kill -9 1662。这样,就结束该产品主程序的运行。注意:结束该主程序的运行后,上位机 “IP 地址:5000” 这个网页是访问不成功的,但是产品重启再开机后仍然还是会自动运行主程序,若要让产品再开机后不会自动运行主程序,则可以根据下一小节【1.2 禁止主程序自动运行】中的内容进行操作。
1.2 禁止主程序自动运行
产品每一次重启再开机都会默认自动运行主程序的,若您需要直接禁止产品主程序开机自动运行的话,需要取消由 crontab 配置开机自动运行的主程序。在终端中输入以下命令:
crontab -e
如果询问希望使用什么编辑器,输入 1 后按回车,选择使用 nano。
打开 crontab 的配置文件后,你可以看到一行内容:
@reboot sleep 3 && whoami && pulseaudio --start && sleep 2 && XDG_RUNTIME_DIR=/run/user/1000 ~/ugv_jetson/ugv-env/bin/python ~/ugv_jetson/app.py >> ~/ugv.log 2>&1
在这行的最前面添加一个 “#” 号来注释掉这行,如下:
#@reboot sleep 3 && whoami && pulseaudio --start && sleep 2 && XDG_RUNTIME_DIR=/run/user/1000 ~/ugv_jetson/ugv-env/bin/python ~/ugv_jetson/app.py >> ~/ugv.log 2>&1
在终端页面,按 Ctrl + X 退出,它会询问你 Save modified buffer? 输入“Y”,按回车,保存变更。
输入重启命令进行设备重启:
sudo reboot
当机器人重新开机后,你仍然可以正常使用 jupyter Lab (JupyterLab 与 机器人主程序 app.py 是互相独立运行的)。
这里需要注意一点,由于下位机持续通过串口与上位机通信,上位机在重启过程中有可能会由于串口电平的连续变化不能正常开机,拿上位机为树莓派的情况举例,重启时树莓派关机后不会再开机,红灯常亮绿灯不亮,此时可以关闭机器人电源开关,再打开,机器人就能够正常重启了。
1.3 启动 Docker 远程服务
在 Jetson Orin 中进入 ugv_ws 项目目录,给 ros2_humble.sh 和 remotessh.sh 两个文件添加可执行权限:
cd /home/jetson/ugv_ws sudo chmod +x ros2_humble.sh remotessh.sh
执行启动 Docker 远程服务的脚本文件 ros2_humble.sh :
./ros2_humble.sh
输入 1 进入 Docker 容器启动 SSH 服务。
1.4 远程登录 Docker 容器
Docker 容器成功启动 SSH 服务后,使用 MobaXterm 远程登录 Docker 容器。
点击“Session”→“SSH”,宿主机 IP 即为 Docker 容器 IP,在 Remote host 中输入 Jetson Orin Nano 的 IP 地址,Port 为已分配好的 23 端口,最后点击“OK”。
连接建立好后,输入用户名:root,密码:jetson。注意:输入密码时屏幕上没有变化属于正常现象,密码输入完成后按回车键即可访问 Docker 容器。自此 SSH 远程连接 Docker 容器成功。