如何在一台电脑(服务器)上运行多个不同的ROS和Gazebo环境及程序
最近在服务器上跑ROS仿真导航代码的时候,发现和别人的程序之间会存在冲突问题。我开着Gazebo仿真跑我的训练,当别人以他自己的账户登陆服务器的时候,roslaunch他自己的程序,会导致他打不开gazebo,而我开的Gazebo程序会突然报错。难道服务器上只能让一个人用来跑仿真代码?这还叫什么服务器呢?于是我在docker内部配了同样的环境,并且用xhost+ 远程显示出来。但是很不幸,dock
最近在服务器上跑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一样)
更多推荐
所有评论(0)