验证效果:ros2跟redis能够相互通信,但不会接收到其它 orin 的 topic 消息;本地的话直接当作slave机器来用
注:ros2 的全局 param 需要依赖一个单点 redis-server,ros2 的全局 param 数据是保存在这个单点 redis-server 内存中的;所以 ros2 容器内有一项配置:redis-server 的连接方式,需要修改ip地址为redis的ip地址
辅助工具:可以下载docker desktop可视化看。安装时去掉勾选wsl选项。
docker pull之前先登录:
$ docker login mogohub.tencentcloudcr.com --username 100029608755 --password eyJhbGciOiJSUzI1NiIsImtpZCI6IldOSFY6MjdCNTpGSlVOOlRPR1I6QlRYTDpZUldJOkNKNlI6U0pQVTpJRDJCOkU2UEY6SEwzRDozT0pGIn0.eyJvd25lclVpbiI6IjEwMDAwMjg4OTY0OSIsIm9wZXJhdG9yVWluIjoiMTAwMDI5NjA4NzU1IiwidG9rZW5JZCI6ImNmbTgzOHZxbzc0NXJxYXFmZXEwIiwiZXhwIjoxOTkxODA0MDY3LCJuYmYiOjE2NzY0NDQwNjcsImlhdCI6MTY3NjQ0NDA2N30.SKQcVzlW6tsmS_5-CB9FmPLpqkxZxr2bPNruRPe0-COEyGIzo2lEOV4aY0Txyok7KCHn9AkhIppiQ68EpSUnc9ufDbAlD2IV4aJ6bse3Grf1QQiPhtxeA6_O9IHkq3VOBVSU_gdPlMkEeGJ8ON-2nUOVfJWEfNkNBWWabaUgCtXAEVsZ1jGTDJ5Y8FfktdEJjcS5gu5sMJdg-rPQ1jZo2wMExG7gew2k5oali2HQlqqA3OM1pzWn9M103qciN_IgvQZ0Wyy34kouwoVkgOkQL7LG4kiC2k7UAk1ATFjWzLVoW8PNyrEscvltSRN7irj58ajXN6Jbhf_pXFBQZnx_eA
1. 启动 redis 容器
拉 redis 镜像,并启动 redis 容器
$ sudo docker pull redis:6.0.16
$ mkdir -p /data/autocar/log/redis
$ sudo docker run -d --privileged --network host -v /dev:/dev:rw -v /data/autocar:/home/mogo/data:rw --restart=always --name base_redis redis:6.0.16
redis 镜像是为车上提供的,车上 redis 容器会判断是否是 192.168.1.103,只有在 103 节点才会启动,所以需要修改 redis,让 redis 在其它 ip 地址也能启动
|
2. 启动 ros2 MAP 容器
x86_64版本ros2镜像:mogohub.tencentcloudcr.com/op/base-ros2:humble_amd64_1.0.020230427
包含cuda11.4、cudnn8.4.1、tensorrt8.4.1及一些必要组件,可在个人电脑上拉取并创建容器(不支持使用docker_run.sh创建容器):
dcker run -it -d --privileged --net=host -v /dev:/dev [-v <其他映射>] --name <容器名> mogohub.tencentcloudcr.com/op/base-ros2:humble_amd64_1.0.020230427
最好仅启动一个 ros2 容器(因为有些资源是唯一的,比如端口,第一个 ros2 容器占了以后,第二个 ros2 容器就用不了这个端口,车上也是仅有一个 ros2 容器),如果启动了多个 ros2 MAP容器,请把多余的容器关掉
|
3. 修改 /etc/hosts(docker内改重启会失效,直接宿主机改)
配置 /etc/hosts,要修改的容器至少包括 ros2 SSM(如果有录包容器,也要修改录包容器),修改内容例如:
|
至少要把自己用到的容器都进去修改一下,如果不知道修改哪些容器,请把本机的所有容器的 /etc/host 都修改一下,宿主机也可以顺便改一下
改了域控制器上的配置后,如果不清楚是否需要重启,重启一下容器准没错
|
一般走到这里就成功了。可以看步骤 5,校验各个选项是否启动成功
--------------------------------------------------------------------------------------------------
5.最后,校验是否启动正常
1.校验 redis 镜像(即:redis-server)有没有正常启动
|
2.校验 ros2 容器
|
Q&A
如果你想在Redis容器中执行ROS 2相关的命令,你需要:配置容器与宿主机的交互:在Docker中,你可以通过将ROS 2安装和配置的文件系统路径挂载到Redis容器中,使容器能够访问ROS 2。具体步骤如下:
-
在创建Redis容器时,使用
-v
参数挂载ROS 2的安装路径到容器中,例如:docker run -v /opt/ros:/opt/ros redis-image
这将使得Redis容器能够访问宿主机上安装的ROS 2。
进入Redis容器:
docker exec -it <container-id> bash
其中,
<container-id>
是正在运行的Redis容器的ID或名称。在Redis容器内执行
ros2 node list
等ROS 2命令:ros2 node lis
这样,你可以在Redis容器中执行ROS 2命令,并与Redis进行交互。请确保在Redis容器中正确配置ROS 2的安装路径,并在容器内部运行ROS 2命令。