如何在一台电脑(服务器)上运行多个不同的ROS和Gazebo环境及程序

最近在服务器上跑ROS仿真导航代码的时候,发现和别人的程序之间会存在冲突问题。

我开着Gazebo仿真跑我的训练,当别人以他自己的账户登陆服务器的时候,roslaunch他自己的程序,会导致他打不开gazebo,而我开的Gazebo程序会突然报错。

难道服务器上只能让一个人用来跑仿真代码?这还叫什么服务器呢?于是我在docker内部配了同样的环境,并且用xhost+ 远程显示出来。

但是很不幸,docker容器虽然表面上看起来像是一个独立的主机,但是如果要想可视化出来,还是会导致冲突问题,要么显示不正常,要么报错。

最后找到了解决方式:

当开启roscore时,指定一个独立的端口号(否则会用默认的11311):

roscore -p 10086

 注意,这里的端口号10086是随便写的能用就行,当然你也可以指定成别的,只要别指定成特殊的就行(像什么0,3306,8080,6006之类的就不要用)。

当调用终端的时候,在当前终端里输入:

export ROS_MASTER_URI=http://localhost:10086
export GAZEBO_MASTER_URI=http://localhost:10085

 这样这个终端里之后运行的别的节点,就不会再和其他人的冲突了,相当于是创建了一个运行的时候独立的ROS和Gazebo环境。如果其他的终端如果想和这个终端里建立的环境产生联系的话,也需要同样export以上两行。注意10085也是我随便写的,注意,不同的使用者应该用不同的端口号,才能保证互相之间不会冲突。

之后,就可以不受限制的运行自己的ROS仿真程序了。

rosrun my_package my_node

当然,也可以一劳永逸的,直接把上面的两个export写到自己服务器账户~下的.bashrc里面,省得每次开启终端的时候都要重复输入。(就像source /opt/ros/melodic/的setup.bash一样)

你可能感兴趣的:(Linux和ROS)