本帖最后由 机器谱 于 2023-6-27 10:13 编辑
1. 功能说明
本文示例将实现R328a样机4自由度并联机器狗行走的功能。
2. 电子硬件
在这个示例中,我们采用了以下硬件,请大家参考:
主控板 | Basra主控板(兼容Arduino Uno)
| 扩展板 | Bigfish2.1扩展板
| 电池 | 7.4V锂电池 |
电路连接:机器狗左侧的上下舵机连接在Bigfish扩展板的D3、D8端口;机器狗右侧的上下舵机连接在Bigfish扩展板的D4、D7端口。
3. 功能实现
上位机:Controller 1.0
下位机编程环境:Arduino 1.8.19
实现思路:实现机器狗可以灵活的自由行走。
3.1 调试舵机角度
对于如何利用Controller软件进行调试机器狗的舵机角度,可参考【U002】如何驱动模拟舵机-Controller 1.0b软件的使用【https://www.robotway.com/h-col-129.html】
在本次实验中,经过调试,对于4自由度并联机器狗行走时的舵机角度值如下图所示:
机器狗行走时的舵机值
3.2 示例程序
下面提供一个4自由度并联机器狗行走的参考例程(Dog_walk_finall.ino),实验效果可参考网站演示视频。 - /*------------------------------------------------------------------------------------
- 版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.
- Distributed under MIT license.See file LICENSE for detail or copy at
- https://opensource.org/licenses/MIT
- by 机器谱 2023-05-26 https://www.robotway.com/
- ------------------------------*/
- /*
- 本例程实现机器小狗行走
- 调试小狗行走的注意事项:
- 3、8对应着小狗左侧的上下舵机;
- 4、7对应着小狗右侧的上下舵机;
- 连接好舵机后,将调试好的小狗初始直立状态写入float value_init[4] = { };中即可;
- */
- #include<Servo.h>
- #define SERVO_SPEED 20 //定义舵机转动快慢的时间
- #define ACTION_DELAY 0 //定义所有舵机每个状态时间间隔
- Servo myServo[4];
- int f = 15;//定义舵机每个状态间转动的次数,以此来确定每个舵机每次转动的角度
- int servo_port[4] = {3,4,7,8};//定义舵机引脚
- int servo_num = sizeof(servo_port) / sizeof(servo_port[0]);//定义舵机数量
- float value_init[4] = {1478,1500,1545,1478};//定义舵机初始角度
- int leg_range = 180; //小狗左右两条腿摆动的幅度
- float reset_init[4]={0,0,0,0};
- void setup() {
- Serial.begin(9600);
- for(int i=0;i<servo_num;i++)
- ServoGo(i,value_init[i]);
- for(int i=0;i<servo_num;i++){
- reset_init[i] = value_init[i];
- }
- delay(2000);
- }
- void loop() {
- Dog_walk();
- }
- void Dog_walk()
- {
- servo_move(value_init[0],value_init[1],reset_init[2]+leg_range,reset_init[3]);
- servo_move(value_init[0],value_init[1],reset_init[2],reset_init[3]-leg_range);
- }
- void ServoStart(int which)
- {
- if(!myServo[which].attached())myServo[which].attach(servo_port[which]);
- pinMode(servo_port[which], OUTPUT);
- }
- void ServoStop(int which)
- {
- myServo[which].detach();
- digitalWrite(servo_port[which],LOW);
- }
- void ServoGo(int which , int where)
- {
- if(where!=200)
- {
- if(where==201) ServoStop(which);
- else
- {
- ServoStart(which);
- myServo[which].write(where);
- }
- }
- }
- void servo_move(float value0, float value1, float value2, float value3) //舵机转动
- {
-
- float value_arguments[] = {value0, value1, value2, value3};
- float value_delta[servo_num];
-
- for(int i=0;i<servo_num;i++)
- {
- value_delta[i] = (value_arguments[i] - value_init[i]) / f;
- }
-
- for(int i=0;i<f;i++)
- {
- for(int k=0;k<servo_num;k++)
- {
- value_init[k] = value_delta[k] == 0 ? value_arguments[k] : value_init[k] + value_delta[k];
- }
- for(int j=0;j<servo_num;j++)
- {
- ServoGo(j,value_init[j]);
- }
- delay(SERVO_SPEED);
- }
- delay(ACTION_DELAY);
- }
复制代码
4. 资料下载
资料内容:行走-程序源代码
资料下载地址:4自由度并联机器狗-行走 https://www.robotway.com/h-col-237.html
|