Task
本次任务的人物是编写一个简单的ROS应用,基于Braitenberg 小车,我们只做stage仿真,如果你有ros的移动机器人,可以在通过修改代码在自己的机器上运行。
Algorithm
我们用的机器人上面有一个激光雷达,激光雷达可以测量障碍物到机器人的距离,根据这些测距信息来设置机器人的左右轮子的旋转速度。通过ROS发送线速度和角速度。
Processing inputs and outputs
类NodeBraitenberg2里面除去构造、析构函数、还有两个方法:一个是laser数据处理函数 一个是机器人控制程序。
激光雷达发布的消息格式为:LaserScan,包含有数据:
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
float32[] ranges 里面存放的是激光的原始数据。激光雷安装在小车的中轴线上,ranges的前半部分和后半部分分别对应着机器人的左侧和右侧,通过下面公式可以计算出对ranges里面索引对应的实际角度:
φ=(i−l2)⋅θ(angle-ranges)
phai对应的是i个索引对应的角度,l是ranges的长度,theta是角度增量(angle_increment)
发送给机器人的Twist消息:
geometry_msgs/Vector3 linear
geometry_msgs/Vector3 angular
Conversion
将机器人设定为恒定速度运动,角速度计算: