当前位置: 首页 > news >正文

南宁建设职业技术学院招聘信息网站驰易网站建设

南宁建设职业技术学院招聘信息网站,驰易网站建设,如何仿制一个网站,网站开发建设赚钱吗🌀 一个中大型ROS项目常需要各个人员分别完成特定的功能,而后再组合部署,而各人员完成的功能常常依赖于一定的环境,而我们很难确保这些环境之间不会相互冲突,特别是涉及深度学习环境时。这就给团队项目的部署落地带来了…

🌀 一个中大型ROS项目常需要各个人员分别完成特定的功能,而后再组合部署,而各人员完成的功能常常依赖于一定的环境,而我们很难确保这些环境之间不会相互冲突,特别是涉及深度学习环境时。这就给团队项目的部署落地带来了极大的困难。虽然类似于conda这样的工具可以弥补一部分的不足,但是对于项目部署而言,还是不足的。

🚀现在就针对上述的问题,提出一种基于docker的ROS2通信解决方案,其中会涉及docker network和docker compose等内容。容器与宿主机的ROS2版本,LTS版(foxy/humble/…)都行。
在这里插入图片描述


🌔01
前情说明

首先有以下几点说明

(1) 宿主系统是基于ubuntu系统,系统的架构x86_64或arm均可,使用的是NVIDIA显卡,且系统内已安装相应的显卡驱动。
(2) 宿主机和容器的架构(x86_64/arm64)保持一致。
(3) 如果宿主机开了VPN,先关掉,避免干扰。

为了讲解的方便,假设我们有以下环境:

(1) 宿主系统是ubuntu20.04,架构是x86_64,安装了ros foxy,显卡是NVIDIA GTX 1650,且显卡驱动可用。
(2) 宿主系统内docker和docker compose都可以正常使用。
(3) 有一个docker镜像(假设叫做image:latest),镜像环境是ubuntu22.04,架构也是x86_64,安装了ros humble。


🌔02
创建docker compose文件

第一步编写一个docker compose文件,用以从镜像创建容器。这种方式会比使用docker run好些,因为它能够把容器的参数写到文件里,还能联调多个容器的关系,对于多容器组合的项目开发比较友好。并且我建议,如果你只有一个docker容器,那也使用docker compose,这样相对于docker run的命令行方式更容易维护。

mkdir project && cd project
touch project.yml

然后编写project.yml的内容,示例如下。这里之所有没用device:来挂载摄像头、激光雷达等外设,那是因为这些外设的驱动节点(传感器数据发布节点)放在宿主机中更好,容器只要订阅这些节点发布的话题进行处理即可。另外,ROS_DOMAIN_ID要一样才能通信,默认为0。

# 多对多,自由
services:c1:  # 服务名称(一个服务对应一个容器),自己取名即可container_name: c1  # 容器名称image: image:latest # 镜像名称working_dir: [your_workdir_path1]  # 工作目录,比如/home/zhangsanshm_size: [your_share_memory_size]  # 共享内存大小,比如4Gruntime: nvidia  environment:- NVIDIA_VISIBLE_DEVICES=all- DISPLAY=${DISPLAY}  # 设置DISPLAY环境变量 volumes:- [your_source_path1]:[your_target_path1]  # 挂载项目目录- /dev/dri:/dev/dri  # 挂载 GPU 设备- /tmp/.X11-unix:/tmp/.X11-unix:rw  # 挂载 X11 Unix 套接字- ${HOME}/.Xauthority:/root/.Xauthority:rw  # 挂载 X11 认证文件networks:- [network_name] # 共享网络名称,比如ros_networkstdin_open: true  # 相当于 -itty: true  # 相当于 -tc2:  # 服务名称(一个服务对应一个容器),自己取名即可container_name: c2  # 容器名称image: image:latest # 镜像名称working_dir: [your_workdir_path2]  # 工作目录,比如/home/lisishm_size: [your_share_memory_size]   # 共享内存大小,比如4Gruntime: nvidia  environment:- NVIDIA_VISIBLE_DEVICES=all- DISPLAY=${DISPLAY}  # 设置DISPLAY环境变量 volumes:- [your_source_path2]:[your_target_path2]  # 挂载项目目录- /dev/dri:/dev/dri  # 挂载 GPU 设备- /tmp/.X11-unix:/tmp/.X11-unix:rw  # 挂载 X11 Unix 套接字- ${HOME}/.Xauthority:/root/.Xauthority:rw  # 挂载 X11 认证文件networks:- [network_name] # 共享网络名称,比如ros_networkstdin_open: true  # 相当于 -itty: true  # 相当于 -tnetworks: # 如果没有名称为ros_network的网络,会自己创建一个。[network_name]:name: [network_name]driver: bridge

🌔03
启动docker compose服务

开放X11服务(这样容器中的窗口就可以显示出来),并从project.yml文件启动docker容器。

xhost +
docker-compose -f project.yml up

接着你可以查看网络信息,确认是否共享上了:

docker network ls

你会看这样的信息:

NETWORK ID     NAME                          DRIVER    SCOPE
ecb8bca83c79   bridge                        bridge    local
0e489127c701   host                          host      local  #这个是你宿主机的网络
fad86f998533   none                          null      local
65b64309ebc2   ros_network                   bridge    local   #这个是你刚才创建的共享网络

进一步查看共享网络信息:

docker network inspect ros_network  

你会看到这样的输出:

# c1和c2之间的ROS2节点在ros_network子网中通信
# 容器ROS2节点通过把数据转发给ros_network网关,网关再转接给host,实现与宿主机ROS2节点通信
[{"Name": "ros_network","Id": "65b64309ebc2df88cd05c3a1fb33635ab4818fd6d2022ce028ad25ef22f2e0ef","Created": "2025-01-11T20:20:06.632800735+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16", # 子网"Gateway": "172.18.0.1" # 网关}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {"79ba2ce2e7914e02e9c36828eb40c343c5abe5f3ca43f2c61b304b91f8cd8de6": {"Name": "c1","EndpointID": "f3956bf172423f84b4e2bf0d55d9c1149b9135dcc32cfc6d01c6770b86a0015d","MacAddress": "02:42:ac:12:00:03","IPv4Address": "172.18.0.3/16", # c1的ip"IPv6Address": ""},"d02027c00ae82e6589dd4690fb7f69974de9d867958f17ced17f3babe0c7527b": {"Name": "c2","EndpointID": "50b4abf51ee3f4b118b99813b061830a2cf2858ecffa4b2c6147849e378fe8b7","MacAddress": "02:42:ac:12:00:02","IPv4Address": "172.18.0.2/16", #c2的ip"IPv6Address": ""}},"Options": {},"Labels": {}}
]

🌔04
ROS2通信测试

另开两个终端,分别在终端内运行以下命令进入容器(你可以开多个):

docker exec -it c1 /bin/bash # 第一个终端(可以开多个)
docker exec -it c2 /bin/bash # 第二个终端(可以开多个)

启动以下节点:

# 在宿主机中
ros2 run turtlesim turtlesim_node
# 在c1容器中
ros2 run demo_nodes_cpp talker # [INFO] [1736647116.948458682] [talker]: Publishing: 'Hello World: 1'
# 在c2容器中
ros2 run demo_nodes_cpp listener  # [INFO] [1736647126.948946624] [listener]: I heard: [Hello World: 1]

并分别在各环境中运行:

ros2 node list

如果所有环境中都输出了以下内容,那就说明成功了。

/listener
/talker
/turtlesim

🌔05
附录

5.1 安装docker compose

# 从官方下载软件包(确保和自己机器的架构一致):https://github.com/docker/compose/releases
# 假设下载了docker-compose-linux-x86_64到~/Downloads
cd ~/Downloads
# 改名
mv docker-compose-linux-x86_64 docker-compose
# 移动到指定位置
sudo mv docker-compose /usr/local/bin
# 赋予权限
sudo chmod +x /usr/local/bin/docker-compose
http://www.yayakq.cn/news/352512/

相关文章:

  • 免费的海报设计网站wordpress 缩略图作用
  • 学外贸英语的网站吉林网络seo
  • seo分析网站自己开外贸公司好做吗
  • php做网站毕设答辩问什么网站开发策划
  • 漳州微网站建设公司网站建设项目规划书案例分析
  • 成都市 网站建设国外化工网站模板
  • 机械网站建设哪家好wordpress 图片弹出
  • 中国建设银行官方网站纪念币预约成都高标建设有限公司官方网站
  • 外贸的网站有哪些电子商务网站建设与管理期末试题
  • 网站建设需要域名还有什么青浦集团网站建设
  • 公司网页网站建设 pptcrack wordpress
  • 松江区网站建设公司网站模板安装好后
  • 网站排名顾问深圳网站建设找智恒网络
  • 深圳招聘网站前十排名3d建模师可以自学吗
  • 风机网站怎么做WordPress音乐悬浮插件
  • lamp网站开发黄金组合网站续费有什么作用
  • 自适应主题 wordpress网站优化自己做该怎么做
  • 专业做汽车的网站wordpress托管是什么
  • 沈阳市城乡建设局网站首页大型网站建设公司有哪些
  • 谢岗镇网站建设公司零基础做网站教程
  • 即墨哪里有做网站的发帖效果好的网站
  • 可信赖的南昌网站建设上海知名的seo推广咨询
  • 石龙镇住房规划建设局网站wordpress一个页面如何连接到首页
  • 网站的三种基本类型重庆森林讲的什么内容
  • 家政网站开发wordpress禁用ip
  • 网站建设收获如何建网站卖东西
  • 惠州品牌网站建设价格盘锦门户网站制作
  • 做视频的素材什么网站好河南省住建厅官网
  • 广东深广东深圳网站建设服务wordpress获取文章的标签
  • 360免费建站app东山网站建设