1、安装带有ros_qtc_plugin插件的Qt Creator

  • Ubuntu14.04(ROS-Indigo)命令行安装
$ sudo add-apt-repository ppa:levi-armstrong/qt-libraries-trusty
$ sudo add-apt-repository ppa:levi-armstrong/ppa  
$ sudo apt-get update
$ sudo apt-get install qt57creator-plugin-ros
  • Ubuntu16.04(ROS-Kinetic)命令行安装
$ sudo add-apt-repository ppa:levi-armstrong/qt-libraries-xenial  
$ sudo add-apt-repository ppa:levi-armstrong/ppa  
$ sudo apt-get update
$ sudo apt-get install qt57creator-plugin-ros

2、使用qtcreator-ros进行ROS编程

  • Step 1:在终端运行$ qtcreator-ros,打开Qt Creator
  • Step 2:点击“+ New Project”,打开或新建一个ROS工作空间


haproxy 可视化配置 可视化ssh_SSH


点击“Choose…”,出现如下界面:



haproxy 可视化配置 可视化ssh_haproxy 可视化配置_02


如果要打开一个现有的ROS工作空间,那么在“Name”一栏填上现有工作空间的名字,然后点“Browse…”选择工作空间的路径;如果要新建一个ROS工作空间,在“Name”一栏填上新建工作空间的名字,然后点“Browse…”指定工作空间的路径,此时通常需要新建一个与工作空间同名的文件夹。样例如下图所示:



haproxy 可视化配置 可视化ssh_多机通信_03


然后点击“Next >”,出现如下界面:



haproxy 可视化配置 可视化ssh_Qt_04


无特殊需求的话,直接“Finish”即可。此时,ROS工作空间就已经打开或新建好了,可以点击Qt Creator中左下角的小锤子编译一下,顺利通过的话就成功了。使用Qt Creator生成的工作空间会比原生的工作空间多两个文件夹“install”和“logs”,可以忽视。

当然,新建完ROS工作空间,你需要$ echo "source ~/ros_workspace/devel/setup.bash" >> ~/.bashrc,然后$ source ~/.bashrc

  • Step 3:使用catkin_create_qt_pkg自动创建带Qt界面的ROS包


首先安装对应版本的qt-ros包:$ sudo apt-get install ros-kinetic-qt-ros 然后在终端运行以下命令:

$ cd  ~/ros_workspace/src/
$ catkin_creat_qt_pkg gui_talker
$ cd ..
$ catkin_make --pkg gui_talker

编译成功后,gui_talker功能包中会自动生成一个同名的ROS节点,在终端运行$ rosrun gui_talker gui_talker(先启动roscore),就可以看到一个带有界面的ROS节点出现在我们面前:



haproxy 可视化配置 可视化ssh_ROS_05


这是一个默认生成的ROS界面节点示例,它会以1帧/秒的频率往外发送字符串消息,就像一个“talker”。不过在这个界面中我好像发现了一个小小的问题:Ros Master那个地方应该是“Ros Master Uri”,而不是“Ros Master Url”吧?嗯,不管怎样,“Ros Master Url”编辑框里填写的是变量“ROS_MASTER_URI”的内容,“Ros IP”编辑框里填写的是变量“ROS_HOSTNAME”的内容。这两部分非常重要,尤其在ROS的多机通信中,它们关系到节点之间如何通信的问题。将IP填写为你以太网的IP或本地回环的IP(127.0.0.1),然后点“Connect”按钮,此时才真正启动了这个ROS节点。

  • Step 4:编写一个“listener”界面,订阅“talker”发布的话题

这一步我就不详细介绍了,只需再新建一个界面包,然后在这个基础上稍作修改即可。我已将我修改过的“gui_listener”上传至本人的GitHub,将其下载到你的ROS工作空间直接编译即可:

$ cd ~/ros_workspace/src
$ svn checkout https://github.com/LeeXujie/ros-gui-chatter/trunk/gui_listener 
$ cd ..
$ catkin_make --pkg gui_listener

编译成功后,分别运行listener和talker,效果如下:



haproxy 可视化配置 可视化ssh_SSH_06


以上是在同一台电脑上实现节点之间的对话,下面我会介绍如何在多台计算机上实现两个节点的对话。

4、SSH可视化登录

首先简单介绍一下如何在一台计算机中打开另一台计算机中的界面,安装SSH:

$ sudo apt-get install chrony
$ sudo apt-get install openssh-server
$ service ssh start
$ ps -e|grep ssh

普通登录:ssh username@ip_address 可视化登录:ssh -p 22 -X username@ip_address 

如果经常需要远程登录,嫌麻烦的话可以将相关命令写到~/.bashrc文件末尾,更方便地,可以设置免密登录:

$ ssh-keygen
$ scp ~/.ssh/id_rsa.pub username@ip_address:/home/username
$ ssh username@ip_address
$ mv id_rsa.pub ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

注意: $ ssh-keygen每次生成的密钥都会不同,所以ssh-keygen命令只运行一次即可,其生成的id_rsa.pub文件可以同时在多台计算机中使用。

5、ROS多机通信

这里我要用三台计算机实现上述两个节点之间的通信,三台计算机中分别运行listener、talker和roscore。所有的操作都在同一台计算机上完成:首先$ ssh登录其中一台计算机(192.168.1.100),启动roscore;然后$ ssh -p 22 -X登录另一台计算机(192.168.1.111),启动listener节点;最后在本机(192.168.1.110)启动talker节点。在两个节点的界面中分别修改“Ros Master Uri”和“Ros IP”,注意理解其中的意义,博主的设置如下:



haproxy 可视化配置 可视化ssh_Qt_07


运行$ rosnode info /rosout查看所有节点之间的关系,应当理解博主这里为什么这样设置两个节点的IP:



haproxy 可视化配置 可视化ssh_Qt_08