查看: 2595|回复: 3

[教程] HCRbot 系列6──HCRbot 底层驱动 OpenCR 设置

[复制链接]
本帖最后由 jarvis_chan 于 2017-10-7 14:15 编辑

庆祝论坛终于支持 Markdown 了!
庆祝论坛终于支持 Markdown 了!
庆祝论坛终于支持 Markdown 了!

赶紧来试一下。

这篇是 HCRbot 机器人系列的第 6 篇,主要将 HCRbot 机器人的底层设置,主要是代码层面的,因为 HCR 底层的电路连线,DFRobot 的 wiki 上面应该有了,此处就不再赘述。

下面是目前已经写好的所有篇章链接:

opencr.png

下面开始正式篇章,关于 OpenCR 的介绍,请查看OpenCR wiki

官方例程中提供了 turtlebot 3 下位机的例程,我们只需对电机驱动部分做一些相应的更改,就可以满足控制 HCRbot 的需求了。详细代码可以参考官方turtlebot 3例程

首先 HCRbot 版本的底层驱动程序下载地址为:

https://github.com/chenzhongxian/hcr_ros_firmware.git

大家可以先下载代码,然后对照着看。

相较于 turtlebot 3 下位机的例程,本系统主要修改如下几处地方:

  • hcr_core.ino 文件中 IMU 的位置,即 tf 相关的参数,大家根据自己的安装位置修改即可;
  • hcr_core_config.h 文件中的一些机器人参数,比如尺寸、电机参数等;
  • hcr_motor_driver.ino 文件中的电机驱动函数。

hcr_core 文件

这个文件中,是 HCRbot 机器人下位机的核心代码,实现了与上位机的 ROS 通信,包括接收上位机的控制命令,并将下位机的传感器数据发送给上位机,比如 编码器数据、IMU 数据。大家主要关注 IMU 相关参数设置即可,其他的基本不用改。

下面是 IMU 位置参数修改:

// HCR IMU
tfs_msg.transform.translation.x = -0.12;
tfs_msg.transform.translation.y = 0.0;
tfs_msg.transform.translation.z = 0.17;

tfbroadcaster.sendTransform(tfs_msg);

大家可以按照自己的实际安装位置来设置。

hcr_core_config 文件

这个文件主要设置机器人物理结构尺寸等相关参数,大家根据实际情况修改就行,如果大家也是用 HCR 的话,应该基本上不需要改。

下面是 HCR 机器人相关物理参数设置,大家根据参数命名和注释,应该都能看明白:

/*******************************************************************************
* Robot geometric parameters
*******************************************************************************/
#define WHEEL_RADIUS                     0.068           // meter (HCR : 0.068, BURGER : 0.033, WAFFLE : 0.033)
#define WHEEL_CIRCUMFERENCE              0.427256601     // meter (HCR : 0.427. BURGER : 0.207)
#define WHEEL_SEPARATION                 0.275           // meter (HCR : 0.275, BURGER : 0.160, WAFFLE : 0.287)
#define TURNING_RADIUS                   0.1375          // meter (HCR : 0.1375, BURGER : 0.080, WAFFLE : 0.1435)
#define ROBOT_RADIUS                     0.220           // meter (HCR : 0.220, BURGER : 0.105, WAFFLE : 0.220)

/*******************************************************************************
* Encoder parameters
*******************************************************************************/
#define ENCODER_MIN                      -2147483648     // raw
#define ENCODER_MAX                      2147483648      // raw
#define ENCODER_TICK                     2652.0          // encoder tick per revolution: 13 * 51 * 4 (HCR : 663, BURGER : 4096)

/*******************************************************************************
* Wheel definition
*******************************************************************************/
#define LEFT                             0
#define RIGHT                            1

/*******************************************************************************
* Velocity parameters
*******************************************************************************/
// HCR
#define VELOCITY_CONSTANT_VALUE          140.430503752   // V = r * w = r * (RPM * 2 * pi / 60)
                                                         //   = 0.068 * RPM * 0.10472
                                                         // RPM = V * 140.430503752
// BURGER and WAFFLE
// #define VELOCITY_CONSTANT_VALUE          1263.632956882  // V = r * w = r * RPM * 0.10472
                                                         //   = 0.033 * 0.229 * Goal RPM * 0.10472
                                                         // Goal RPM = V * 1263.632956882
#define LIMIT_X_MAX_VELOCITY             130    // Limit RPM values of Motor
#define MAX_LINEAR_VELOCITY              0.30   // maxRPM / VELOCITY_CONSTANT_VALUE, m/s (HCR : < 1.0, BURGER : 0.22)
#define MAX_ANGULAR_VELOCITY             1.50   // MAX_LINEAR_VELOCITY / TURNING_RADIUS, rad/s (HCR : < 7.3, BURGER : 2.84)
#define VELOCITY_STEP                    0.01   // m/s
#define VELOCITY_LINEAR_X                0.01   // m/s
#define VELOCITY_ANGULAR_Z               0.1    // rad/s
#define SCALE_VELOCITY_LINEAR_X          1
#define SCALE_VELOCITY_ANGULAR_Z         1

// HCR
#define TICK2RAD                         0.002369225  // 2 * pi / ENCODER_TICK = 0.002369225f
// BURGER
// #define TICK2RAD                         0.001533981  // 0.087890625[deg] * 3.14159265359 / 180 = 0.001533981f

#define DEG2RAD(x)                       (x * 0.01745329252)  // *PI/180
#define RAD2DEG(x)                       (x * 57.2957795131)  // *180/PI

其他参数设置,大家可以自行看 hcr_core_config.h 文件。

其他细节修改,请阅读源文件,修改过的地方,我都做了注释。

hcr_motor_driver 文件

这个文件主要包含了对 HCRbot 机器人电机的驱动程序。

/*******************************************************************************
* motor driver
*******************************************************************************/
void speedControl(int M1Speed, int M2Speed)
{
  // 异步转速,驱动器接收到执行指令才开始驱动电机
  Serial2.print("1,SVR,1,");
  Serial2.println(M1Speed, DEC);

  Serial2.print("1,SVR,2,");
  Serial2.println(M2Speed, DEC);

  Serial2.println("1,AVR,1,1");   // 执行异步转速
}

void readEncoder()
{
  // Serial2.println("1,CER");   // 清除所有故障信息

  char inString[14];
  Serial2.println("1,GEP,1");
  Serial2.setTimeout(10);
  Serial2.readBytes(inString, 13);

  sensor_state_msg.left_encoder = atoi(inString);

  Serial2.println("1,GEP,2");
  Serial2.setTimeout(10);
  Serial2.readBytes(inString, 13);

  sensor_state_msg.right_encoder = atoi(inString);

  // Debug
  Serial4.print("e");
  Serial4.print("\t");
  Serial4.print(sensor_state_msg.left_encoder);
  Serial4.print("\t");
  Serial4.print(sensor_state_msg.right_encoder);
  Serial4.print("\n");
}

void cleanEncoder()
{
  Serial2.println("1,CER");   // 清除所有故障信息

  Serial2.println("1,CEP,1");
  Serial2.println("1,CEP,2");
}

参考






Ash  管理员

发表于 2017-9-11 10:20:29

呦吼 感觉还不错哟
回复 支持 反对

使用道具 举报

刘智勇  学徒

发表于 2018-6-6 16:32:48

您好 下载的代码在arduino打开后编译没有通过 您的软件包库文件是全的么 还是需要放到arduino library里面去呢?
回复 支持 反对

使用道具 举报

铁熊  版主

发表于 2018-6-6 18:02:26

刘智勇 发表于 2018-6-6 16:32
您好 下载的代码在arduino打开后编译没有通过 您的软件包库文件是全的么 还是需要放到arduino library里面 ...

要先设置OpenCR这块板子的哦,设置教程科技参考:http://emanual.robotis.com/docs/ ... -via-boards-manager
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
wifi气象站

硬件清单

btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2016 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail