使用Arduino开发板作为底层控制(base_controller),有rosserial_arduinoros_arduino_bridge两种实现方式。其中 rosserial_arduino 将航迹推演、话题发布等都放在Arduino开发板上,占用资源大;而ros_arduino_bridge在Arduino开发板上只用来控制电机、舵机驱动,将计算部分放在ROS从机中,大大节省Arduino开发板占用资源,此外可外接更多传感器。
  本ROS小车选择ros_arduino_bridge作为底层控制(base_controller)。

ros_arduino_bridge 框架结构(arduino篇)

ROSArduinoBridge            #Arduino相关库定义
    ├── commands.h              #定义命令
    ├── diff_controller.h       #差分轮PID控制头文件
    ├── encoder_driver.h        #编码器驱动头文件,定义插脚(pins)
    ├── encoder_driver.ino      #编码器驱动实现, 读取编码器数据,重置编码器等
    ├── motor_driver.h          #电机驱动头文件
    ├── motor_driver.ino        #电机驱动实现,初始化控制器,设置速度
    ├── ROSArduinoBridge.ino    #核心功能实现,
    ├── sensors.h               #传感器头文件及实现
    ├── servos.h                #伺服器头文件,定义插脚,类
    └── servos.ino              #伺服器实现

  对底层控制 ros_arduino_bridge 代码修改主要放在encoder_drivermotor_driverROSArduinoBridgecommands上,其它如diff_controller等暂时不需要修改。已整理修改后的代码,见 ROS-robot

阅读全文 »

  本ROS小车实现自主搬运功能,主要可分为以下几个大步骤:

  • 机器人搭建与底盘调试
  • 机器人建模与仿真
  • 同时定位和地图构建
  • 路径规划与自主避障
  • 自主搬运动作规划

  总体框架如下:

(图)搬运机器人总体框架
阅读全文 »

  动作(Action)是ROS中一种同步通信模式,与服务非常相似,服务具有与请求和响应分别对应的目标(goal)和结果(result),除此之外动作中还多了反馈(feedback)。与服务不同,动作通常用于指导复杂的机器人任务,例如发送一个目标值之后,还可以在任意时刻发送取消目标的命令。ROS中已经包含actionlib功能包,用于实现动作通信机制。

  • 客户端(Client):用于请求发布任务目标(goal)或取消任务(cancel)。
  • 服务器(Server):用于通知客户端当前状态(status)、周期性反馈任务运行进度(feedback)以及发送任务执行结果(result)。结果只发送一次。
  • 关系:Client-Server 多对一

  例如,当客户端将家庭服务器设置为服务器时,服务器会时时地通知客户端洗碗、洗衣和清洁等进度,最后将结果值发送给客户端。

(图)动作通信模式

  消息传输方案本身与异步方式的话题(topic)相同。反馈在动作客户端(action client)和动作服务器(action server)之间执行异步双向消息通信,其中动作客户端设置动作目标(goal),而动作服务器根据目标执行指定的工作,并将动作反馈和动作结果发送给动作客户端。

阅读全文 »

  服务(Services)是ROS中一种同步通信模式,其中消息以请求/应答(Request/Reply)的方式传递。

  • 客户端(Client):请求服务后等待响应。
  • 服务器(Server): 收到服务请求后执行指定的任务,并发送响应。
  • 关系:Client-Server 多对一

  与话题不同,ROS中只允许有一个节点提供服务,但可以存在多个客户端。与话题不同,服务只连接一次,在执行请求和响应之后彼此断开连接。如果有必要,需要重新连接。

  例如,当客户端向服务器请求当前时间时,服务器将确认时间并作出响应。

(图)服务通信模式

  该服务通常被用作请求机器人执行特定操作时使用的命令,或者用于根据特定条件需要产生事件的节点。由于它是一次性的通信方式,又因为它在网络上的负载很小,所以它也被用作代替话题的手段,因此是一种非常有用的通信手段。

阅读全文 »

  话题(topic)是ROS中一种异步通信模式,其中消息以单向发布/订阅(Publish/Subscribe)的方式传递。

  • 发布者(Publier):给指定的话题发布消息。
  • 订阅者(Subscriber):订阅指定的话题接收消息。
  • 关系:Publier-Subscriber 多对多

  话题是单向的,适用于需要连续发送消息的传感器数据,因为它们通过一次的连接连续发送和接收消息。
  例如,通过计算移动机器人的两个车轮的编码器值生成可以描述机器人当前位置的里程计(odometry) 信息,并以话题信息(x, y, i)传达,以此实现异步单向的连续消息传输。

(图)话题通信模式

  话题是一种多对多的通信,即一个话题可以有多个发布者和订阅者。发布者和订阅者并不了解彼此的存在,系统中可能有多个节点发布和订阅同一个话题。单个发布者可以与多个订阅者进行通信,相反,一个订阅者可以在单个话题上与多个发布者进行通信。当然,这两家发布者都可以和多个订阅者进行通信。

阅读全文 »
+