UGV Rover PI ROS2 1. 准备工作

来自Waveshare Wiki
跳转至: 导航搜索
RaspRover
{{{name2}}}
{{{name3}}}
功能简介
特性 UGV Rover ROS2 小车
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 TTL总线舵机控制接口 I2C UART

1. 准备工作

由于产品开机默认会自动运行树莓派主程序,主程序会占用串口和摄像头资源,这种情况下是不能使用 ROS 2 的,需要结束主程序或禁止主程序自动运行。ROS 2 功能包都是在树莓派系统中的 Docker 容器中运行的,因此关闭树莓派主程序的运行后,还需要启动 Docker 远程服务,才能远程登录 Docker 容器执行 ROS 2 功能包。


1.1 结束主程序

在终端中实时显示系统中正在运行的任务和进程信息:

top

等待几秒后,可以看见 COMMAND 为 python 的 PID。

ROS2 top.png


按 Ctrl+C 退出查看,接着输入结束该进程的指令:

kill -9 python进程PID

如上图,则输入:kill -9 850。这样,就结束该产品树莓派主程序的运行。注意:结束该主程序的运行后,树莓派 IP 地址:5000 这个网页是访问不成功的,但是产品重启再开机后仍然还是会自动运行主程序,若要让产品再开机后不会自动运行主程序,则可以根据下一小节【1.2 禁止主程序自动运行】中的内容进行操作。


1.2 禁止主程序自动运行

产品每一次重启再开机都会默认自动运行主程序的,若您需要直接禁止产品主程序开机自动运行的话,需要取消由 crontab 配置开机自动运行的主程序。在终端中输入以下命令:

crontab -e

如果询问希望使用什么编辑器,输入 1 后按回车,选择使用 nano。

打开 crontab 的配置文件后,你可以看到以下两行内容:

@reboot ~/ugv_pt_rpi/ugv-env/bin/python ~/ugv_pt_rpi/app.py >> ~/ugv.log 2>&1
@reboot /bin/bash ~/ugv_pt_rpi/start_jupyter.sh >> ~/jupyter_log.log 2>&1

在“...app.py >> ...."这行的最前面添加一个 “#” 号来注释掉这行,如下:

#@reboot ~/ugv_pt_rpi/ugv-env/bin/python ~/ugv_pt_rpi/app.py >> ~/ugv.log 2>&1
@reboot /bin/bash ~/ugv_pt_rpi/start_jupyter.sh >> ~/jupyter_log.log 2>&1

在终端页面,按 Ctrl + X 退出,它会询问你 Save modified buffer? 输入“Y”,按回车,保存变更。

输入重启命令进行设备重启(重启过程中树莓派的绿灯会闪烁,当绿灯闪烁频率降低或灭掉后即代表已经启动成功):

sudo reboot

如果你上一步没有注释掉 “…start_jupyter.sh >>…” 这一行,那么当机器人重新开机后,你仍然可以正常使用 jupyter Lab (JupyterLab 与 机器人主程序 app.py 是互相独立运行的)。

这里需要注意一点,由于下位机持续通过串口与上位机通信,上位机在重启过程中有可能会由于串口电平的连续变化不能正常开机,拿上位机为树莓派的情况举例,重启时树莓派关机后不会再开机,红灯常亮绿灯不亮,此时可以关闭机器人电源开关,再打开,机器人就能够正常重启了。


1.3 启动 Docker 远程服务

在树莓派中进入 ugv_ws 项目目录,给 ros2_humble.sh 和 remotessh.sh 两个文件添加可执行权限:

cd /home/ws/ugv_ws
sudo chmod +x ros2_humble.sh remotessh.sh

执行启动 Docker 远程服务的脚本文件 ros2_humble.sh :

./ros2_humble.sh

输入 1 进入 Docker 容器启动 SSH 服务。

ROS2 Dockerstart.png


1.4 远程登录 Docker 容器

Docker 容器成功启动 SSH 服务后,使用 MobaXterm 远程登录 Docker 容器。

点击“Session”→“SSH”,宿主机 IP 即为 Docker 容器 IP,在 Remote host 中输入该树莓派的 IP 地址,Port 为已分配好的 23 端口,最后点击“OK”。

ROS2 DockerSSH.png

连接建立好后,输入用户名:root,密码:ws。注意:输入密码时屏幕上没有变化属于正常现象,密码输入完成后按回车键即可访问 Docker 容器。自此 SSH 远程连接 Docker 容器成功。