docker下ros外设使用与远程配置
ros远程配置
假设条件
A电脑中安装了ros, B电脑安装了docker,docker中安装了ros系统。即B电脑为机器人内部使用,B电脑为master,故需采用A电脑进行远程调试与控制。
docker容器网络配置
由于docker内执行ros,故主要需要配置网络,使docker内的网络与外界通信,可采用端口映射功能。这里为通用性,可采用容器与主宿机网络端口共用,采用如下指令进入容器,则可使容器内与宿主B电脑的ip与端口共享。
sudo docker run -it \
--network host \
ros:kinetic-robot /bin/bash
其中--network host
为容器的网络配置,可使开启的容器与宿主机共享IP和端口。
查看B电脑的当前的IP地址,采用ifconfig
命令如下:
pi@raspberrypi:~/docker_ros $ ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:91:6a:c3:a7 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.113 netmask 255.255.255.0 broadcast 192.168.5.255
inet6 fe80::fe56:c579:853d:6e5d prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:80:2c:45 txqueuelen 1000 (Ethernet)
RX packets 354776 bytes 401333083 (382.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 352905 bytes 222508344 (212.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
docker 容器ros网络配置
进入容器后,需要进行配置ros网络参数,进入终端后,先执行
export ROS_MASTER_URI=http://192.168.1.113:11311
export ROS_HOSTNAME=192.168.1.113
以上的IP地址均为B电脑的ip地址,可运行roscore
命令,启动ros master。
主机A的ros网络配置
在A电脑中打开终端,同样先查看A电脑的ip地址,如:192.168.1.110,先执行
export ROS_MASTER_URI=http://192.168.1.113:11311
export ROS_HOSTNAME=192.168.1.110
其中ROS_MASTER_URI的ip为B主机的ip地址。
ROS_HOSTNAME的ip为本机的ip地址。
则执行后的终端,可输入
rostopic list
可看到rosmaster已启动。
网络永久配置
以上命令每新打开一个终端,都必须执行一遍以上命令,可将其
export ROS_MASTER_URI=http://192.168.1.113:11311
export ROS_HOSTNAME=192.168.1.110
写入.bashrc中。
则每次打开新终端时可自动执行。