本地搭建ros2环境步骤(x86_64架构)

验证效果: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 地址也能启动

mkdir -p /data/autocar/log/redis      # 宿主机上创建日志目录
sudo docker exec -it redis /bin/bash
echo -e '#!/bin/bash\nmkdir -p /home/mogo/data/log/redis\nredis-server /etc/redis/redis.conf' /run.sh    # 修改 redis 容器启动时运行的脚本,使容器启动时,直接启动 redis-server
exit    # 退出 redis 容器
$ docker restart redis    # 重启 redis 容器

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容器,请把多余的容器关掉

$ docker pull mogohub.tencentcloudcr.com/op/base-ros2:humble_amd64_1.0.020230427
$ docker run -d --privileged --restart=always --network host --ipc=host --runtime nvidia -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=all -v /dev:/dev:rw -v /data/autocar:/home/mogo/data:rw --name base_ros2 $IMAGE_NAME # 启动 ros2 容器,--runtime nvidia不支持可以去掉
$ vim /run.sh # 找到这一行 "host": "192.168.1.103", 把这一行的 redis ip 地址改为 "rosslave" 或者 redis-server 所在主机 ip

3. 修改 /etc/hosts(docker内改重启会失效,直接宿主机改)

配置 /etc/hosts,要修改的容器至少包括 ros2 SSM(如果有录包容器,也要修改录包容器),修改内容例如:

192.168.1.103 rosslave # ipv4 改为自己 orin 上的 ipv4

至少要把自己用到的容器都进去修改一下,如果不知道修改哪些容器,请把本机的所有容器的 /etc/host 都修改一下,宿主机也可以顺便改一下

改了域控制器上的配置后,如果不清楚是否需要重启,重启一下容器准没错

$ docker restart system-redis_default_1 autocar_default_1 # 重启这 2 个容器

一般走到这里就成功了。可以看步骤 5,校验各个选项是否启动成功

--------------------------------------------------------------------------------------------------

5.最后,校验是否启动正常

1.校验 redis 镜像(即:redis-server)有没有正常启动

ps -ef | grep redis | grep -v grep    # rosslave 在宿主机查看 redis 是否启动,显示如下 redis-server *:6379 代表 redis 启动成功;如果没启动成功,需要排查是不是按照步骤做了
root      628694  628682  0 14:19 ?        00:00:00 redis-server *:6379

2.校验 ros2 容器

env grep FASTRTPS_DEFAULT_PROFILES_FILE  # 在 ros2 容器内检查环境变量,输出如下环境变量,代表正常
FASTRTPS_DEFAULT_PROFILES_FILE=/autocar-code/install/share/mogo_launch/tcp_default_profile.xml
$ ros2 node list   # 查看 ros2 节点数量,可以模拟pub下

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命令。

  • 19
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值