本次所用到的四轮小车模型如下 该四轮小车的模型搭建过程请阅读我的另一篇文章: https://blog.csdn.net/cyj972628089/article/details/107009528(Webots学习笔记—四轮小车的模型搭建和简单控制)
本次项目不需要添加任何节点和传感器,只需要修改代码即可完成。
先贴上代码
#include <webots/robot.h> #include <webots/motor.h> #include <webots/keyboard.h> #include <stdio.h> #define TIME_STEP 64 int main(int argc, char **argv) { wb_robot_init(); wb_keyboard_enable(TIME_STEP); printf("Able\n"); WbDeviceTag motors[4]; char motors_names[4][8] = {"motor_1", "motor_2", "motor_3", "motor_4"}; for (int i = 0; i < 4; i++) { motors[i] = wb_robot_get_device(motors_names[i]); wb_motor_set_position(motors[i], INFINITY); wb_motor_set_velocity(motors[i],0); } double left_speed = 1.0; double right_speed = 1.0; while (wb_robot_step(TIME_STEP) != -1) { int new_key = wb_keyboard_get_key(); while (new_key > 0) { printf("%d\n",new_key); switch (new_key) { case 87://w printf("UP pressed\n"); if(right_speed<0)left_speed = -right_speed; else left_speed = right_speed; left_speed += 1.0; right_speed += 1.0; break; case 83://s printf("DOWN pressed\n"); if(right_speed>0)left_speed = -right_speed; else left_speed = right_speed; left_speed -= 1.0; right_speed -= 1.0; break; case 65://a printf("LEFT pressed\n"); left_speed -= 0.5; right_speed += 0.5; break; case 68://d printf("RIGHT pressed\n"); left_speed += 0.5; right_speed -= 0.5; break; case 69://e printf("RIGHT—UP pressed\n"); left_speed += 1; right_speed = 1; break; case 81://q printf("LEFT—UP pressed\n"); left_speed = 1; right_speed += 1; break; case 90://z printf("LEFT—DOWN pressed\n"); left_speed = -1; right_speed -= 1; break; case 67://c printf("RIGHT—DOWN pressed\n"); left_speed -= 1; right_speed = -1; break; case 70://f printf("A pressed\n"); wb_keyboard_disable(); break; } new_key = wb_keyboard_get_key(); } if(left_speed>5)left_speed=5; else if(left_speed<-5)left_speed=-5; if(right_speed>5)right_speed=5; else if(right_speed<-5)right_speed=-5; wb_motor_set_velocity(motors[0],left_speed); wb_motor_set_velocity(motors[1],right_speed); wb_motor_set_velocity(motors[2],left_speed); wb_motor_set_velocity(motors[3],right_speed); } wb_robot_cleanup(); return 0; }这段代码非常简单,“w”代表前进,“s”代表后退,“a”代表左转,“d”代表右转,“q”代表向左前方转弯,“e”代表向右前方转弯,“z”代表向左后方倒退,“c”代表向右后方倒退,“f”代表键盘失能。
wb_keyboard_enable(TIME_STEP); :键盘使能wb_keyboard_get_key():获得按下按键的int值wb_keyboard_disable():键盘失能在查阅官方文档的时候,我发现官方并没有给出C语言的代码示例。此时我想到了官方给的案例中有出现过键盘控制的相关项目,于是点击帮助→webots引导之旅→Webots Guilded Tour,其中第一个项目mavic_2_pro就是用键盘控制飞机飞行。我参考这个项目给出的代码,完成了四轮小车的键盘控制。
要想知道其他按键对应的int值,只需要用print()函数输出出来即可。
这次的项目并不难,最主要的是学会一个学习方法:在学习某些传感器或者想实现某些功能的时候,我们不仅要查阅官方文档,同时也要查看一下官方案例有没有类似的方法和功能实现,这将大大提高我们的效率。因此我们应该多熟悉官方案例,做到心中有数。
