Webots模拟RoboMaster S1

    科技2022-07-11  99

    Webots模拟RoboMaster S1

    摘要

    用webots实现RobotMaster S1的模拟控制,物理模型是借鉴网上开源的,自己做了一定的转轴重合修改,水平有限,世界文件为:Robomaster S1.wbt。 GitHub地址:https://github.com/PeytomX/RoboMasterS1_Webots.git 只实现了以下功能: 1,云台的Yaw,Pitch控制 2,底盘只能前进后退(控制说明会打印出来)。 3,第一视角摄像头显示 目前没有实现的: 1,底盘的麦克纳姆轮模拟 2,发弹 3,鼠标控制 目前想参考kuka的机器人把麦轮做出来,但是没有研究出来,会搞的大神可以一起探讨。 Webots模拟RoboMaster S1世界文件

    参考资料

    webots-R2020a-rev1百度盘下载地址: 链接:https://pan.baidu.com/s/1xnVMNtDvNJinigwC0fYiXQ 提取码:v36h 官方下载地址: https://www.cyberbotics.com/ 速度很慢,现在已经更新到2020b了 官方指导资料: https://www.cyberbotics.com/doc/guide/index 速度比较慢,需要小飞机(ssr)加速,如果英文不好可以用chrome插件彩云小译 第三方参考资料: https://www.guyuehome.com/6039

    https://blog.csdn.net/qq_33816775/article/details/102941035?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1

    第三方S1模型文件,包含catia和vrml97

    链接:https://pan.baidu.com/s/1N_82wcwb8NRzdUosg8i1uw 提取码:lvxu

    机器人控制器代码

    用Python写的 代码片.

    """S1_controller controller.""" from controller import Robot, Motor, Camera, Keyboard, Mouse # create the Robot instance. robot = Robot() # get the time step of the current world. TIME_STEP = 64 print("请用键盘和鼠标控制RoboMaster S1:") print("- 'W': 前进。") print("- 'S': 后退。") print("- 'D': 向右平移。") print("- 'A': 向左平移。") print("- '左': YAW逆时针旋转。") print("- '右': YAW顺时针旋转。") print("- '上': pitch轴抬高。") print("- '下': pitch轴下降。") keyboard = robot.getKeyboard() keyboard.enable(10) maincamera = robot.getCamera('camera') #获取相机 maincamera.enable(10) #开启相机,并定义刷新间隔为10ms yawmotor = robot.getMotor('yaw_motor') #获取yaw轴电机 yawmotor.setPosition(float('inf')) #定义旋转位置为无穷远 yawmotor.setVelocity(0.0) #定义初始速度为0 pitchmotor = robot.getMotor('pitch_motor') pitchmotor.setPosition(float('inf')) pitchmotor.setVelocity(0.0) wheels = [] wheelsNames = ['wheel_fl_motor', 'wheel_fr_motor', 'wheel_br_motor', 'wheel_bl_motor'] for i in range(4): wheels.append(robot.getMotor(wheelsNames[i])) wheels[i].setPosition(float('inf')) wheels[i].setVelocity(0.0) # 定义ID # 1-------0 # | # | # | # 2-------3 # y # | # | # -------->X w为逆时针 Vx=0 Vy=0 w=0 def Mecanum(Vx,Vy,w,i): #速度解算子函数 motorVelocity=[0,0,0,0] motorVelocity[0]=Vy-Vx+w motorVelocity[1]=Vy+Vx-w motorVelocity[2]=Vy-Vx-w motorVelocity[3]=Vy+Vx+w return motorVelocity[i] while robot.step(TIME_STEP) != -1: # yawmotor.setVelocity(1.0) # pitchmotor.setVelocity(1.0) key=keyboard.getKey() if (key==ord('W')): Vy=5 print('前进') if (key==ord('S')): Vy=-5 print('后退') if (key==ord('A')): Vx=-5 print('前进') if (key==ord('D')): Vx=5 print('前进') if (key==Keyboard.UP): pitchmotor.setVelocity(-1.0) print('pitch轴抬高') if (key==Keyboard.DOWN): pitchmotor.setVelocity(1.0) print('pitch轴下降') if (key==Keyboard.LEFT): yawmotor.setVelocity(1.0) print('YAW逆时针旋转') if (key==Keyboard.RIGHT): yawmotor.setVelocity(-1.0) print('YAW顺时针旋转') if (key==-1): Vx=0 Vy=0 w=0 pitchmotor.setVelocity(0) yawmotor.setVelocity(0) print('停止') # print(key) wheels[0].setVelocity(Mecanum(Vx,Vy,w,0)) wheels[1].setVelocity(Mecanum(Vx,Vy,w,1)) wheels[2].setVelocity(Mecanum(Vx,Vy,w,2)) wheels[3].setVelocity(Mecanum(Vx,Vy,w,3))
    Processed: 0.040, SQL: 8