Ros

硬件规范

一、硬件构成

硬件至少要有一块主板、一个SLAM传感器、一个包含驱动板的底盘。

对主板,目前选用Firefly的ROC-RK3588S-PC

对SLAM传感器,要用于辅助解决机器人绑架,必须用激光雷达,不能深度摄像头。确定可用的激光雷达:思岚RPLIDAR A1M8、N10。

主板、SLAM传感器都可以外买,自已要做的主要是底盘。

底盘一般包括一块驱动板、电机、轮子、底座。需要自画电路部分只有驱动板。

对支持机械臂的,设想也是通过这块驱动板进行控制。话题:/joint_states,类型:sensor_msgs::JointState。

1.1 其它

要加个符合UVC协议的USB摄像头。或许可以让用户自已加,但机器人上得留个能放的位置。如果要控制摄像头转向,是通过发命令到驱动板,由驱动板控制,命令格式和机械臂一样的/joint_states。

要加麦克风、喇叭。它们和摄像头一样,是连接到主板。

要保证导航正确,希望机器人移动时不出现上、下摆动。机器人得有一定的惯性。

机器人做得越小,自然能让穿过更窄的路。

 

二、驱动板

电源通路:电池先连向驱动板,驱动板有个稳压输出12V,这12V给主板供电。

2.1 硬件

  1. 和主板之间接口。数据通信用串口。为方便连接,强烈建议给出串口PIN同时,增加个USB转串口芯片,像CH340。对波特率,建议用230400,至少需支持115200。数据格式:N81(8个数据位、一个停止位、没有校验)。如果要和主板用串口直连,用UART,不要RS-232。
  2. 驱动电机。驱动板通过串口接收到主板发来的速度指令,按要求驱动电机。
  3. 电子罗盘测实时角度。导航算法计算位置时依赖这个角度,而导航能达到什么程度是这个产品核心功能,希望这测出的角度尽可能准。举个例子,希望误差不要超过4度。
  4. 电池充电电路。常见电池:18650-8400mAh。
  5. 提供一个稳定的12v电源输出,这输出是给主板供电。
  6. 测量电池的当前电压。可选:1)能给出是否正在充电。2)(常量)最大电压,预警电压(20%),最小电压。
  7. 机器人充电会很频繁,支持自动充电。

2.2 软件

这里软件是指主板和驱动板之间要传输的数据。封装这些数据的协议用ros规范:rosserial

  • 主板到驱动板。要求驱动板按这速度驱动电机。数据是以geometry_msgs::Twist结构发送。详细见“三、电机速度”。
  • 驱动板到主板。1)定时发送电压,电压值放在riki_msgs::Battery.battery;2)定时发送角度,封装数据结构待定。

 

三、电机速度

上层软件把速度封装成geometry_msgs::Twist结构发向机器人。目前只支持2D,线速度中vel_z总是0,角速度则只用theta(z)分量。

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

3.1 最小线速度、角速度

速度太小时,由于地面摩擦力等因素,机器人可能就没法动。过小的速度可以不支持,但得有个需要支持的最小速度。

  • 线速度。角速度是0时,最小在线速度(绝对值)0.08米/秒时,机器人要可以动了。当然,能支持越小越好,要是小的话,软件中可改小配置参数min_moveable_vel_x、min_moveable_vel_trans。
  • 角速度。线速度是0时,最小在角速度(绝对值)DEG2RAD(20)时,机器人要可以动了。当然,能支持越小越好,要是小的话,软件中可改小配置参数min_moveable_vel_theta。
  • 当线速度或角速度当中一个满足了一个最小值要求时,另一个需支持任何值。举个例子,角速度>=min_moveable_vel_theta,那线速度需支持任何值。
  • 支持最大线速度:0.3米/秒。支持最大角速度:DEG2RAD(60)弧度/秒。
  • vel_x=0,theta非0时,指示机器人原地转。如果机器人不支持原地转,出来的误差要向前,即机器人要向前冒出误差距离。
  • 机器人实际移动速度不要让超过twist指定值。小点,大不了看去移动慢点;大了,就是可能撞向障碍物。

 

3.2 只发一次twist时,默认运行多长时间

当收到一次twist,默认运行0.5秒。

举个例子,vel_x速度0.2米/秒、vel_y=0、theta=0,那0.5秒后停下,期望结果是此时向正前方移动了10cm。当然,机器人做不到瞬时把速度加速到0.2米/秒,总之以最快速度加速到0.2米/秒。类似加速,机器人做不到瞬时把速度减速到0,总之以最快速度减速。然后机器人在0.5秒后停下来。

注:导航模块中movebase理论上每隔400毫秒执行一次executeCycle,即发一次twist。因而设想中的运动模型:第一次twist让机器人从0加速到0.2米/秒,到400毫秒时,机器人还是(尽量)0.2米/秒,此时收到第二个0.2米/秒的twist,机器人也就实现了不断移动。

 


机械臂设备疑问

1、各关节坐标系的原点在哪里?——。猜是在各个舵机向外冒出点的中心,而且不是白环,但需要更精确。

2、爪子是个梯形,这个梯形是中央对齐,还是上对齐?——猜是中央对齐(model_grasp_point)。当joint5末端pitch是0时,中央线和joint5原点z轴,水平对齐。

3、当joint4的dcpitch=0时,爪子梯形中线的z是否等于joint5的z。

4、机械臂似乎进入这么个状态:t1时发了个joints1,t2时发了个joints2,t3时发了个joints3。在t2时,执行的是joints1,在t3时,执行的是joints2。这时关闭、再开串口,没用;只能重新批给驱动板上电。

5、joint4是否能折出比1.57更大的角度?——在导航时,让机械臂前向不超出底盘前边沿。总之出来适合导航状态。

6、有累积误差吗?——工作一断时间后,joint1值=0是否还能真正对应初始yaw=0度的方向。

 

底盘

1)为什么速度方向相反时,前面会有几次不会动。像(0.04, 0, 0)到(-0.04, 0, 0),(0, 0, DEG2RAD(6))到(0, 0, DEG2RAD(6))。

2)重量越大,是不是小速度越困难?最小能支持的小速度。

 

 

 

全部评论: 0

    写评论: