• 机器人制作开源方案 | 桌面级全向底盘--本体说明+驱动控制


    一、本体说明

    1. 底盘概述

          该底盘是一款模块化的桌面级应用型底盘,基于应用级软件架构设计、应用级硬件系统设计、典型应用型底盘机械系统设计。

          底盘本体为一个采用半独立刚性悬挂的四驱全向底盘。

    2. 软件环境介绍

          操作系统:Ubuntu18.04系统。基于Debian GNU/Linux,支持x86、amd64(即x64)、ARM和ppc架构。

          仿真系统:基于开源机器人操作系统ROS melodic和开源软件平台Arduino开发。上位机采用ROS melodic,基于Rviz完成全向移动底盘slam导航运动规划,采用gazebo完成全向移动底盘物理运动仿真;下位机采用Arduino实现对全向移动底盘运动的控制。

          注意:准备一个外接显示器。

    3. 硬件配置及主要参数

    硬件配置及主要参数

     4. 认识底盘的电器接口

        ① 常用接口说明

    底盘尺寸示意图
    底盘常用电气接口

        ② 扩展电气接口说明

    左侧扩展接口对应图
    车头扩展接口对应图
    车尾扩展接口对应图

    5. 底盘简化的系统框图

    底盘的系统框图

    二、驱动及控制

    1. 控制底盘单个轮子

    实现思路

          控制底盘的四个轮子分别转动。

          下面我们先来了解一下底盘的总线舵机ID号。

    底盘的头部、尾部
    底盘上总线舵机ID号

     操作步骤

    ① 下载文末资料中的参考程序Base_Experiment\Chassis_Drive\Control_single_bus_steering_gear\Control_single_bus_steering_gear.ino:

    1. /*------------------------------------------------------------------------------------
    2. 版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
    3. Distributed under MIT license.See file LICENSE for detail or copy at
    4. https://opensource.org/licenses/MIT
    5. by 机器谱 2023-08-16 https://www.robotway.com/
    6. ------------------------------*/
    7. /*
    8. *Control single bus steering grar
    9. *
    10. *
    11. ///
    12. * head
    13. * ID:001 ID:000
    14. * ___________
    15. * | |
    16. * | |
    17. * | |
    18. * | |
    19. * | |
    20. * | |
    21. * |___________|
    22. * ID:003 ID:002
    23. * Rear end
    24. *
    25. * 2020.8.7 by boris
    26. //
    27. */
    28. #define mySerial Serial2 //Serial port used by bus steering gear
    29. #define Serial_Baud_Rate 115200 //Serial Port baud rate
    30. #define BusServoSerialBaud 115200 //Bus steering gear baud rate
    31. #define wheel_speed_forward 0.08 //wheel forward speed
    32. #define wheel_speed_back -0.08 //wheel back speed
    33. #define wheel_speed_stop 0.0 //wheel stop speed
    34. enum{FORWARD_LEFT=1,FORWARD_RIGHT,BACK_LEFT,BACK_RIGHT,STOP};//wheel named
    35. void setup(){
    36. delay(1100);Serial.begin(Serial_Baud_Rate);
    37. mySerial.begin(BusServoSerialBaud);delay(1000);
    38. }
    39. void loop(){
    40. control_bus_steering_gear_test();// control single bus steering gear
    41. }
    42. void control_bus_steering_gear_test()
    43. {
    44. Car_Move(FORWARD_LEFT,wheel_speed_forward);delay(1000);Stop_car(); //left front wheel forward
    45. Car_Move(FORWARD_LEFT,wheel_speed_back);delay(1000);Stop_car(); //left front wheel backword
    46. Car_Move(FORWARD_RIGHT,wheel_speed_forward);delay(1000);Stop_car(); //right front wheel forward
    47. Car_Move(FORWARD_RIGHT,wheel_speed_back);delay(1000);Stop_car(); //right front wheel backword
    48. Car_Move(BACK_LEFT,wheel_speed_forward);delay(1000);Stop_car(); //left rear wheel forward
    49. Car_Move(BACK_LEFT,wheel_speed_back);delay(1000);Stop_car(); //left rear wheel backword
    50. Car_Move(BACK_RIGHT,wheel_speed_forward);delay(1000);Stop_car(); //right rear wheel backword
    51. Car_Move(BACK_RIGHT,wheel_speed_back);delay(1000);Stop_car(); //right rear wheel backword
    52. }

    ② 将底盘轮子朝上,观察每个轮子的转动效果。

    2. 底盘的基本运动

    实现思路

          实现底盘前进、后退、左平移、右平移、左转、右转的功能。

    操作步骤

    ① 下载文末资料中的参考程序Base_Experiment\Chassis_Drive\Control_Car_Movement\Control_Car_Movement.ino:

    1. /*------------------------------------------------------------------------------------
    2. 版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
    3. Distributed under MIT license.See file LICENSE for detail or copy at
    4. https://opensource.org/licenses/MIT
    5. by 机器谱 2023-08-16 https://www.robotway.com/
    6. ------------------------------*/
    7. /*
    8. * car action test (include:forward, back, turnleft,turnright, left translation, right translation)
    9. *
    10. *
    11. * IP address of bus steering gear
    12. * head
    13. * ID:001 ID:000
    14. * ___________
    15. * | |
    16. * | |
    17. * | |
    18. * | |
    19. * | |
    20. * | |
    21. * |___________|
    22. * ID:003 ID:002
    23. * Rear end
    24. *
    25. * 2020.8.7 by boris
    26. */
    27. #define ActionDelayTimes 1000
    28. #define mySerial Serial2
    29. #define BusServoSerialBaud 115200
    30. #define wheel_speed_forward 0.08 //car forward speed
    31. #define wheel_speed_back -0.08 //car back speed
    32. #define wheel_speed_stop 0.0 //car stop speed
    33. #define wheel_speed_left 0.08 //car turnleft speed
    34. #define wheel_speed_right -0.08 //car turnright speed
    35. #define wheel_speed_left_translation 0.08 //speed of car left translation
    36. #define wheel_speed_right_translation -0.08 //speed of car right translation
    37. enum{FORWARD=1,BACK,LEFT,RIGHT,LEFT_TRANSLATION,RIGHT_TRANSLATION,STOP}; //the movement state of the car
    38. float wheel_Speed[4]={0,0,0,0};
    39. char cmd_return[200];
    40. void setup()
    41. {
    42. delay(1000);
    43. Serial.begin(57600);delay(1000);//open serial
    44. mySerial.begin(BusServoSerialBaud);delay(1000);//open serial2
    45. car_move_test();
    46. }
    47. void loop()
    48. {
    49. //car_move_test();//car action test
    50. //car_stop();
    51. }
    52. void car_move_test()//car action test
    53. {
    54. Car_Move(FORWARD);delay(ActionDelayTimes); // forward
    55. car_stop();
    56. Car_Move(BACK);delay(ActionDelayTimes); // back
    57. car_stop();
    58. Car_Move(LEFT_TRANSLATION);delay(ActionDelayTimes); //left translation
    59. car_stop();
    60. Car_Move(RIGHT_TRANSLATION);delay(ActionDelayTimes);//right translation
    61. car_stop();
    62. Car_Move(LEFT);delay(ActionDelayTimes); //turnleft
    63. car_stop();
    64. Car_Move(RIGHT);delay(ActionDelayTimes); //turn right
    65. car_stop();
    66. }

    ② 观察底盘的运动情况。

    三、传感器使用

    1. 底盘循迹-灰度传感器

    实现思路

          实现全向底盘可以按指定路线进行行走的功能(实验场景如下图所示)。

    操作步骤

    ① 连接电路。如下图所示是全向底盘上的4个灰度接线,但本实验中我们只需要用到头部的两个灰度传感器即可。

    底盘的头部、尾部
    头部的灰度传感器:接42、44号引脚

    ② 下载文末资料中的参考程序Base_Experiment\Tracking_Car\Tracking_Car.ino:

    1. /*------------------------------------------------------------------------------------
    2. 版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
    3. Distributed under MIT license.See file LICENSE for detail or copy at
    4. https://opensource.org/licenses/MIT
    5. by 机器谱 2023-08-16 https://www.robotway.com/
    6. ------------------------------*/
    7. /*
    8. *Tracking Car
    9. *
    10. * head
    11. * pin:42 pin:44
    12. * ___________
    13. * | |
    14. * | |
    15. * | |
    16. * | |
    17. * |___________|
    18. * pin:36 pin:34
    19. * Rear end
    20. * 2020.8.7 by boris
    21. */
    22. #define mySerial Serial2 //statement serial2
    23. #define Sensor_Numbers 4 //numbers of sensor
    24. #define Serial_Baud_Rate 115200 //serial port baud rate
    25. #define BusServoSerialBaud 115200//bus steering gear baud rate
    26. #define wheel_speed_forward 0.06 //car forward speed
    27. #define wheel_speed_back -0.06 //car back speed
    28. #define wheel_speed_stop 0.0 //car stop speed
    29. #define wheel_speed_left 0.1 //car turnleft speed
    30. #define wheel_speed_right -0.1 //car turnright speed
    31. enum{FORWARD=1,BACK,LEFT,RIGHT,STOP};//the movement state of the car
    32. const int Gray_Sensor_Pin[Sensor_Numbers] = {44,42,36,34};//define gray sensor pin
    33. const int GraySensorNumbers = sizeof(Gray_Sensor_Pin)/sizeof(Gray_Sensor_Pin[0]);
    34. char cmd_return[200];
    35. void setup(){
    36. delay(1100);Serial.begin(Serial_Baud_Rate);
    37. Gray_Sensor_Init();
    38. mySerial.begin(BusServoSerialBaud);delay(1000);
    39. }
    40. void loop(){
    41. tracking_car();//car tracking
    42. //Car_Move(STOP);
    43. }
    44. void Gray_Sensor_Init()//sensor init
    45. {
    46. for(int i=0;i
    47. {
    48. pinMode(Gray_Sensor_Pin[i],INPUT);delay(2);
    49. } delay(200);
    50. }
    51. void tracking_car() //car tracking
    52. {
    53. int sensor_data[Sensor_Numbers] = {0,0,0,0};
    54. int sum = 0;
    55. for(int i=0;i2;i++)
    56. {
    57. sensor_data[i] = digitalRead(Gray_Sensor_Pin[i]);
    58. sum |= sensor_data[i] << i;
    59. }
    60. switch(sum)
    61. {
    62. case 0: Car_Move(FORWARD); break;
    63. case 1: Car_Move(LEFT); break;
    64. case 2: Car_Move(RIGHT); break;
    65. case 3: Car_Move(FORWARD); break;
    66. default: break;
    67. }
    68. }

     ③ 观察全向底盘循迹的效果。

    2. 底盘避障-超声测距

    实现思路

          实现全向底盘可以在模拟的场景下进行避障然后行进的功能(实验场景如下图所示)。

    操作步骤

    ① 连接电路,如下图所示是全向底盘的8个超声测距接线图。

    ② 下载文末资料中的参考程序Base_Experiment\Avoiding_Obstacles_Car\Avoiding_Obstacles_Car.ino: 

    1. /*------------------------------------------------------------------------------------
    2. 版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
    3. Distributed under MIT license.See file LICENSE for detail or copy at
    4. https://opensource.org/licenses/MIT
    5. by 机器谱 2023-08-16 https://www.robotway.com/
    6. ------------------------------*/
    7. /*
    8. * Avoid obstacles car
    9. *
    10. *
    11. * 车身位置及传感器接线:
    12. *
    13. * // Y
    14. * // |
    15. * // |
    16. * // | t:53 t:8
    17. * // | (ID:003) e:A15 e:9 (ID:001)
    18. * // | t:37 A - - - - - - - - - - - - - - - - - -Y: t:39
    19. * // | e:38 | | e:40
    20. * // | | | 车头
    21. * // | t:31 | | t:45
    22. * // | e:32 Z - - - - - - - - - - - - - - - - - -X: e:46
    23. * // | (ID:002) t:47 t:A13 (ID:000)
    24. * // | e:48 e:A14
    25. * // 0-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- X
    26. *
    27. *
    28. * 2020.8.7 by boris
    29. */
    30. #define mySerial Serial2 //Serial port used by bus steering gear
    31. #define Serial_Baud_Rate 115200 //Serial Port baud rate
    32. #define BusServoSerialBaud 115200 //Bus steering gear baud rate
    33. #define wheel_speed_forward 0.04 //car forward speed
    34. #define wheel_speed_forward_up 0.06 //forward speed up
    35. #define wheel_speed_back -0.04 //car back speed
    36. #define wheel_speed_stop 0.0 //car stop speed
    37. #define wheel_speed_left 0.1 //car turnleft speed
    38. #define wheel_speed_right -0.1 //car turnright speed
    39. #define wheel_speed_left_translation 0.04 //speed of car left translation
    40. #define wheel_speed_right_translation -0.04 //speed of car right translation
    41. enum{FORWARD=1,BACK,LEFT,RIGHT,LEFT_TRANSLATION,RIGHT_TRANSLATION,STOP,FORWARD_UP}; //the movement state of the car
    42. char cmd_return[200];
    43. float wheel_Speed[4]={0,0,0,0};
    44. void setup(){
    45. delay(1100);Serial.begin(Serial_Baud_Rate);
    46. init_Ultrasonic();delay(200);
    47. mySerial.begin(BusServoSerialBaud);delay(1000);
    48. }
    49. void loop(){
    50. //Car_Move(STOP);delay(1000);
    51. car_move();
    52. //get_ultrasonic_sensor_data();
    53. }

     ③ 观察全向底盘避障的效果。

    程序源代码详见 桌面级全向底盘

  • 相关阅读:
    SE (Squeeze Excitation)模块
    TMS320F28374S之CMPSS
    (Nacos)—nacos server集群+docker compose+节点IP问题+多数据库
    NC16422 图书管理员
    「深入探究Web页面生命周期:DOMContentLoaded、load、beforeunload和unload事件」
    2、Ubuntu下安装mosquitto
    理想汽车 x JuiceFS:从 Hadoop 到云原生的演进与思考
    ES6常问面试题(Promise,async和await 等)
    java Spring Boot2.7实现一个简单的爬虫功能
    IIS部署Flask
  • 原文地址:https://blog.csdn.net/Robotway/article/details/132649101