Brief
正如标题所言,该小项目包括三部分,如下
- ROS节点获取机器人数据
- socket和服务器数据传输,包括了数据上传和获取
- 服务器深度学习处理数据
1 ROS节点获取机器人数据
1.1 数据结构
我这两天所负责的内容是读取ROS传感器数据。一开始看到这么个机器人也很懵逼,不知道怎么读数据,经过一些研究后,明白读取数据的过程是一个这样子的流程:
首先,机器人的数据本身就是很多的ROS中的TOPIC,会按照它所给定的频率广播所得到采集到的传感器数据,我们要做的就是自己建立一个节点,该节点订阅这个想要的到参数topic。接收它的msg就OK了。
首先我们看一下tia_go机器人对应的开发文档的传感器topic,这里截图一个表示一下:
这张图表示的含义是lidar传感器的数据是通过话题/scan
发布,所使用的基础信号类型是(sensor_msgs/LaserScan)
,这里我们打开链接就可以看到这种msg的定义,如下:
std_msgs/Header header
float32 angle_min
float32 angle_max
float32 angle_increment
float32 time_increment
float32 scan_time
float32 range_min
float32 range_max
float32[] ranges
float32[] intensities
也就是说,这个是lidar产生的数据通过一个叫sensor_msgs/LaserScan
的数据类型来表示,而我们需要的其实是里面的一部分。当然在此项目中,我们会使用到的实际上由深度相机测出来的rgb图片。这里上传一下开发文档。如果需要的话,评论留下邮件。
1.2 ROS需要用到的知识
这里的话可能就是需要知道ROS里面的话题,节点啥的。其实最重要的是要用catkin来穿件包和编译文件。对我这种小白来说也是需要学习的。下面会一一讲一下我的理解。
1.3 开始操作
首先我们用创建一个catkin工作空间,初始化空间和编译空间,在终端中输入:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace #初始化工作空间
cd ~/catkin_ws
catkin_make #编译工作空间
第二步是创建功能包,这里主要要注意的是要带依赖,就比如说我们要使用的图像的数据结构在sensor_msgs
这个依赖包中,我们就要在创建时把依赖写在后面,当然,我们会用到更多的ros包,比如cv_bridge
(这是用来和Opencv进行数据类型转换的,也就是把ROS的图像结构转化为Opencv的结构)
cd ~/catkin_ws/src
catkin_create_pkg ROS_Test1 std_msgs roscpp cv_bridge sensor_msgs image_transport
接下来我们再次编译包:
cd ~/catkin_ws
catkin_make
到此,我们的包就算建立好了,后面就要写代码了。我们在roscd ROS_Test1/src
文件夹下创建一个cpp文件,这里比如说叫node_b.cpp
,然后写入下面内容:
我们直接cd进去后执行:
cd ~/catkin_ws/devel/lib/src/ROS_Test1/
./ROS_Test1_b
目前的效果就是可以实时的读取深度相机的rgb图像,并通过rgb相机显示出来,如下:
好吧,我们的任务还没完成,我们虽然数据读取到了,也能够显示了,我们下一步就是要把这个数据传输到服务器上,那么接着看下一部分。
2 数据上传到服务器
机器人的rgb数据已经采集到了,那么接下来就传输,这里采用的方式是socket传输,数据形式是json。emm这部分我不是很懂,不过我要做的具体就是把已经可以在window上传输的程序移植到我上面的工程中。所以我将涉及到的内容包括了:
- 自定义多文件的包如何编译通过
- 怎么使用同一工作空间内的自定义头文件。
- json.hpp文件如何编译通过。
目前就写到这里了,因为这个机器人网络坏了,等专业人员来了把硬件修好了再处理吧。后续的工作主要就在这里了。后面的paperlist都好长了,还没有去啃。休息一下了。