驱动底盘一般通过CAN口和底盘通信,在docker中使用CAN最方便的方式就是容器(container)在创建(run)时,指定网络为host模式:--network=host。
例如:
docker run -it --restart=always --name ros2humble3 --network=host -v /home/tom/Tom/DockerContent/nav2_ws(your docker path):/home/tom/Tom/DockerContent/nav2_ws(your local path) -v /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY=$DISPLAY osrf/ros:humble-simulation /bin/bash
如果容器已经创建,忘记指定--network=host了,又不想删除老容器,想仍然用这个容器里面已经准备好的各种编译环境,可以创建一份这个容器的镜像,基于这个镜像,指定--network=host,创建新的容器。
操作步骤如下:
1.提交老容器为一个镜像:docker commit old_container_id new_image:v1。其中old_container_id为老的容器ID,new_image为镜像名,v1为标签。提交容器为镜像的通用指令为:
docker commit -m="[提交的描述信息]" -a="[作者]" [容器ID] [新的镜像名称]:[新的镜像标签]
2.基于镜像创建新容器:注意为了保证和旧容器其它配置全部一样,创建时指定的参数需要保留旧的配置和旧容器创建是一样(包括挂载的目录、关键变量等),然后修改或者增加自己需要改动的部分。例如,这次我们需要加入--network=host,其它启动方式和旧容器保持一致:
docker run -it --restart=always --name ros2humble_algo --network=host -v /home/tom/Tom/DockerContent(your docker path):/home/tom/Tom/DockerContent(your local path) -v /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY=$DISPLAY new_image:v1 /bin/bash
欢迎加入多源融合定位与控制技术讨论QQ群,群号:518859469
来自:上海代数律动技术有限公司