后面的ROS学习基本上基于机器人的实际环境开发,记录一下面对的问题以及对应的解决方法。这个周末主要实现了激光数据的获取,也是为后面的建图和导航做一个前提准备。
首先是获取相应的激光的驱动包,实验室的激光是很常用的LMS111,可以直接通过命令获取
sudo apt-get install ros-indigo-lms1xx
这样激光就可以在ROS里面使用了。值得注意的是这条命令是在机器人上面执行的,后面主要解决的就是在远程ssh下面运行分布式节点的问题。因为一般图形界面节点不能通过远程登录使用,如rqt_graph, rviz这些,但某些情况下需要远程操作并用到可视化,这就需要在机器人上运行主要节点,在远程端运行可视化节点读取机器人端发布到话题的数据。
首先设置ssh别名登录,先提条件是已经安装好ssh并且设置好远程登录。参考 http://blog.csdn.net/zhanlanmg/article/details/48708255
远程端:这里,我是在~/.ssh下建立一个config文件,填入
Host pioneer3
HostName 192.168.1.105
User pioneer3-onboard
Host : 别名
HostName : 远程登录的地址
User : 远程登录的用户名
这里注意的是所有名词的大小写,包括登录的用户名这些,这里卡了一下,比较无语……这里还是需要密码登录,如果需要免密登录或者密钥登录参看参考链接
机器人端:同样的操作,不过把Host等变量对应修改正确即可,同样需要注意大小写。
机器人端和远程端:在后面的ROS里面要用到机器名,跟登录的别名不是一个东西,为了让系统认识机器名,需要在/etc/hosts创建一个文件,具体
sudo gedit /etc/hosts
加入
192.168.1.103 client
192.168.1.105 pioneer3
这样就可以把机器名和IP地址绑定起来。
后面直接参考http://wiki.ros.org/cn/ROS/Tutorials/MultipleMachines,按照教程的指引和debug,基本上就能解决问题。
然后,为了运行的节点对应相应的机器,把机器人和远程端的IP都要设置一下,环境变量是ROS_IP,也可以是ROS_HOSTNAME,因为我用的都是静态IP,所以各个设置用IP会方便很多。远程端执行
export ROS_IP=192.168.1.103
机器人执行
export ROS_IP=192.168.1.105
同时,为了一劳永逸不用每次打开一个终端都要执行这个操作,在远程端~/.bashrc中添加
export ROS_MASTER_URI=http://pioneer3:11311
export ROS_IP=192.168.1.103
在机器人做相应操作,不再赘述。
需要注意,添加之后远程端打开就是默认以机器人为Master,默认在机器人上运行roscore。如果想单独在远程端运行ros,需要重新执行
export ROS_MASTER_URI=http://localhost:11311
基本上准备工作到这里都完成了,下面按启动流程记录一下,参考 http://blog.csdn.net/autorobot410/article/details/52861223
远程端登录先锋
ssh pioneer3
先锋上运行ROS
roscore &
为了连接激光,在网络没有自动连接的时候,通过命令连接
sudo nmcli con up uuid <激光的uuid>
这里按Tab键可以列出所有连接的uuid,对于所用连接的uuid,可通过
nmcli con list
查询,稍微记一下首字符就可以通过Tab键补全。
然后指定IP连接激光
rosrun lms1xx LMS1xx_node _host:=192.168.0.1
因为这里是通过apt-get安装的,无法修改源码,所以每次登陆都要指定激光连接的IP。后续有时间从github下载源码修改默认参数后再回来修改。
这时如果没问题就可以看到Connected to laser.
打开一个新的终端,即在远程端上
rosrun rviz rviz
如果分布式节点设置成功的话,应该就能成功运行。
点击左下角的Add->By topic->LaserScan,点击OK。把Global Options->Fixed Frame的参数改成laser。
这时,一切正常的话应该就可以在屏幕界面上看到激光的点。
如果出现问题,按照 http://blog.csdn.net/autorobot410/article/details/52861223检查。后面如果遇到问题再回来补充