松灵机器人SCOUT的ROS代码架构

++++++++++++++++++++++++++++++++++++ 松灵机器人感觉可能还是比较小众吧 。明明官方的,但是star之类的完全没有关注度,也没有issue 。这个主要是解决SCOUT底盘与上位机的通信方式,截止目前,已经开放了RS232和CAN两种通信方式 。而且CSDN上只有寥寥几篇的相关博客,参考价值不高 。故整理此篇,以供后日快速上手 。
代码地址:
接下来是正文 。
整体架构
这是docs里自带的框架图 。
显然,分成了两个路线:
第一条路线是与实际机器人的通讯,这一部分走的是串口UART或CAN的协议,需要经过将数据包解析成人类可以理解的语言,传到 。而接收到后,会向外界(其他的ROS结点)发布信息 。当然,路线反过来也是可行的,即订阅了来自其余节点的控制命令,可以将人的命令转换为符合相应协议的数据包传到底盘,控制底盘的行动 。
第二条路线是利用进行仿真 。仿真的机器人由于不是走实际的协议的,因此只要通过监听twist类型的话题,就可以控制仿真机器人的线速度和角速度 。程序对速度进行积分后,得到里程信息,并向外发布 。而这里的twist话题是通过一个脚本来发布的,即定义键盘按键的意义,按下后会改变命令帧,然后以一定的频率发送这个命令 。
其实说到这里,基本上这篇也可以结束掉了 。下面部分主要是稍微记录下读代码时候的一些发现吧 。
代码细节
从我的理解来看,目前的代码里其实有很大一部分是闲置在那里,即没有真正投入使用的 。从使用角度来讲,现在计算机一般也不缺那点硬盘空间,因此全编译了也可以 。
但毕竟看都已经看了,就稍微罗列一下,万一以后要代码删减也找的到 。

松灵机器人SCOUT的ROS代码架构

文章插图
可视化
在/urdf里已经给出了scout的urdf文件,这个文件是一个通用的模型文件,因此也可以在rviz里使用,后续自己开发可视化界面,就不用自己做美工的活了 。可能还是需要自己做调整的,因为urdf似乎内容很少,与仿真中看到的并不一致 。
IMU
/src里有一个.cpp,顾名思义,是一个接收imu信息,并发布成ros msgs的一个节点 。里面使用了lcm,我百度了下是一种适用于局域网的通信模式 。具体的我也没看 。这一块内容,在Scout里是没有用到的,编译的时候也没有编译进去 。可以删去 。
这一部分主要是对接的scout底盘的sdk,即如前文所述的,充当人类语言与数据包之间的双向转换器 。
/src包括,,.cpp,其中没有用到,似乎是用来同步的信息的 。里面是和的底层代码 。
.cpp是主要的对接sdk代码 。
这个文件夹与是同名的,里面没有任何代码,只有,.txt和.xml 。值得注意的是,这是用了()机制的 。
我的理解是,ros里是编译的最低单位,而一个项目可能需要多个包 。比如SLAM可能就有和两个独立的包 。此时,若使用机制,则所有下面的都算到了这个包的下面,可以一起编译 。
可以参考:
松灵机器人SCOUT的ROS代码架构

文章插图
这里面就是主要的ros节点了,主要是用于发布odom和scout状态,同时也接收来自/和/ 。
主要包括了和初始化can口的bash脚本 。
初次设置时候调用一下.bash,每次上电的时候再调用一下 .bash 。不过,使用的时候必须连接好can转usb,否则会提示查不到can设备 。
由于SCOUT的数据信息是自己定义的,即ROS的通用信息用不了,因此需要重新写msg文件,存在文件夹里 。其实很简单,就是输入输出的类型和变量名 。比如