本地搭建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命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Json结构解析比较

文章目录 前言正文一、项目简介二、核心代码1、 JavaBeanParser2、 JsonStructCompare3、 Client 测试结果 前言 本次练习&#xff0c;主要是针对于两个Json的结构差异。 多用于测试场景&#xff0c;比如一个很大的Json报文&#xff0c;需要和现有的Json报文对比&#xff0c;看…

【快速逆向二/无过程/有源码】掌上高考—2024高考志愿填报服务平台

逆向日期&#xff1a;2024.07.21 使用工具&#xff1a;Node.js 加密工具&#xff1a;Crypto-js标准库 文章全程已做去敏处理&#xff01;&#xff01;&#xff01; 【需要做的可联系我】 AES解密处理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 标准算法&…

百日筑基第二十八天-23种设计模式-行为型总汇

百日筑基第二十八天-23种设计模式-行为型总汇 文章目录 百日筑基第二十八天-23种设计模式-行为型总汇前言模板方法模式简介模板方式的特点模板方法模式结构类图模板方式模式案例分析模板方法模式应用源码分析模板方法模式的注意事项和细节 迭代器模式迭代器模式结构类图迭代器模…

modbus中3.5字节时间如何计算

示例&#xff1a;波特率是115200bps &#xff08;比特每秒&#xff09; 1、计算每个比特的时间 2、每字节时间 1个字符8数据位1起始位1停止位&#xff0c;则每传输一个字符需要10位 3、3.5个字节的时间

c 语言 中 是否有 unsigned 安;这种写法?

你提到的结构体定义使用了unsigned这种没有完全限定类型的写法&#xff0c;在C语言中&#xff0c;这种语法通常会被解释为unsigned int。这是因为在C语言中&#xff0c;unsigned是unsigned int的缩写形式。 下面是你的结构体定义以及解释&#xff1a; struct exec {unsigned …

【Linux】进程信号 --- 信号处理

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…

睿考网:没有初级能直接考中级经济师吗?

经济师考试分为初级、中级、高级三个类别&#xff0c;属于职业资格证书&#xff0c;考试是由统一组织、统一大纲、统一命题的方式。 没有初级可以直接考中级经济师吗? 可以直接报考&#xff0c;如果考生符合中级经济师报考要求&#xff0c;直接报名参加就可以&#xff0c;具…

通过iframe嵌套的不同域名的页面之间处理cookie存储失败的问题——js技能提升

最近同事在写mvc的后台管理系统&#xff0c;通过iframe实现不同域名的页面的嵌套。 但是有个问题&#xff0c;就是从父页面打开iframe的子页面时&#xff0c;需要登录子页面&#xff0c;此时需要将子页面登录后的token存储到子页面的cookie中&#xff0c;方便子页面的其他接口…

如何理解React State不可变性的原则

React 中的状态&#xff08;State&#xff09;不可变性原则是指一旦创建了组件的状态&#xff0c;就不能直接修改状态的值&#xff0c;而是应该通过 setState 方法来更新状态。这个原则的核心思想是保持状态的不可变性&#xff0c;即不直接修改原始状态值&#xff0c;而是创建一…

SpringBoot+Session+redis实现分布式登录

SpringBootSessionRedis实现分布式登录功能实现 文章目录 目录 文章目录 前言 一、引库 二、修改配置文件 三、使用 四、解决乱码问题 1.引库 2.配置redis序列化 3.配置Session-Redis序列化 前言 这里简单介绍一下&#xff0c;如果你想多台机器部署你的项目的话&#xff0c;在…

EasySwoole 微服务注册中心

目录 EasySwoole 中&#xff0c;使用 Redis 作为服务注册中心 服务注册中心来注册服务 1. 用户登录与注册服务 2. 设备初始化服务 3. 广告与推广服务 以下是一些推荐的微服务监控工具和方法&#xff1a; EasySwoole 默认的微服务注册中心是通过 UDP 广播加上自定义进程定…

Maven的常用命令(面试篇之Maven)

我在写项目时,使用Maven的插件的命令来进行打包等,却发现报错误了,虽然解决了, 但借此机会来总结一下Maven的常用命令: 这些插件都有着自己的命令,虽然,我们可以简化的使用一些idea中的方便的按键: 但 , 一个程序员的功力深浅就在这些细节末尾处: 在Maven中&#xff0c;插件是…

形态学操作腐蚀(Erosion)和膨胀(Dilation)

在OpenCV中&#xff0c;腐蚀&#xff08;Erosion&#xff09;和膨胀&#xff08;Dilation&#xff09;属于形态学&#xff08;morphological&#xff09;操作。形态学是一种处理图像中结构的方法&#xff0c;通常用于处理二值图像。腐蚀和膨胀是最基本的形态学操作&#xff0c;…

【MySQL进阶之路 | 高级篇】范式概述与第一范式

1. 范式简介 在关系型数据库中&#xff0c;关于数据表的设计的基本原则&#xff0c;规则就称为范式。可以理解为&#xff0c;一张数据表的设计结果需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库&#xff0c;必须满足一定的范式。 范式的英文名是Normal …

OpenHarmony 入门——ArkUI 自定义组件之间的状态装饰器小结(一)

文章大纲 引言一、状态管理概述二、基本术语三、状态装饰器总览 引言 前面说了ArkTS 是在TypeScript基础上结合ArkUI框架扩展定制的&#xff0c;状态管理中的各种装饰器就是扩展的功能之一&#xff0c;可以让开发者通过声明式UI快速高效实现组件之间的数据同步&#xff0c;至于…

Leetcode之string

目录 前言1. 字符串相加2. 仅仅反转字母3. 字符串中的第一个唯一字符4. 字符串最后一个单词的长度5. 验证回文串6. 反转字符串Ⅱ7. 反转字符串的单词Ⅲ8. 字符串相乘9. 打印日期 前言 本篇整理了一些关于string类题目的练习, 希望能够学以巩固. 博客主页: 酷酷学!!! 点击关注…

转置卷积方法

一、定义 1、卷积神经网络层通常会减少&#xff08;或保持不变&#xff09;采样输入图像的空间维度&#xff08;高和宽&#xff09;&#xff0c;另一种类型的卷积神经网络层&#xff0c;它可以增加上采样中间层特征图的空间维度&#xff0c; 用于逆转下采样导致的空间尺寸减小…

【BES2500x系列 -- RTX5操作系统】系统启动流程 -- boot loader概念讲解 --(九)

&#x1f48c; 所属专栏&#xff1a;【BES2500x系列】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &#x1f49…

【AI实例之智能分析系统】概览

一、介绍 界面&#xff1a;聊天式 流程架构&#xff1a;自然语言输入&#xff0c;对接大模型&#xff0c;生成查询语句&#xff0c;查询数据库&#xff0c;根据数据生成图表。 用到的技术&#xff1a;大模型&#xff0c;prompt&#xff0c;streamlit&#xff0c;python 还在…

PyTorch 中的一个函数:torch.pow

torch.pow 介绍 torch.pow 是 PyTorch 中的一个函数&#xff0c;用于计算张量&#xff08;Tensor&#xff09;的幂次方。这个函数接受两个输入参数&#xff1a;底数&#xff08;base&#xff09;和指数&#xff08;exponent&#xff09;&#xff0c;然后返回底数的指数次幂的结…