1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- '''
- This is an example builder script that sets up a rover in Morse to
- be driven by ArduPilot.
- The rover has the basic set of sensors that ArduPilot needs
- To start the simulation use this:
- morse run rover.py
- Then connect with ArduPilot like this:
- sim_vehicle.py --model morse --console --map
- This model assumes you will setup a skid-steering rover with left throttle on
- channel 1 and right throttle on channel 2, which means you need to set:
- SERVO1_FUNCTION 73
- SERVO3_FUNCTION 74
- '''
- from morse.builder import *
- # use the ATRV rover
- vehicle = ATRV()
- vehicle.properties(Object = True, Graspable = False, Label = "Vehicle")
- vehicle.translate(x=0.0, z=0.0)
- vehicle.rotate(z=math.pi)
- # add a camera
- camera = SemanticCamera(name="Camera")
- camera.translate(x=0.2, y=0.3, z=0.9)
- vehicle.append(camera)
- camera.properties(cam_far=800)
- camera.properties(Vertical_Flip=False)
- camera.rotate(z=math.pi)
- # we could optionally stream the video to a port
- #camera.add_stream('socket')
- # add sensors needed for ArduPilot operation to a vehicle
- pose = Pose()
- vehicle.append(pose)
- imu = IMU()
- vehicle.append(imu)
- gps = GPS()
- gps.alter('UTM')
- vehicle.append(gps)
- velocity = Velocity()
- vehicle.append(velocity)
- # add a 360 degree laser scanner, sitting 1m above the rover
- # this is setup to be similar to the RPLidarA2
- scan = Hokuyo()
- scan.translate(x=0.0, z=1.0)
- vehicle.append(scan)
- scan.properties(Visible_arc = True)
- scan.properties(laser_range = 18.0)
- scan.properties(resolution = 5.0)
- scan.properties(scan_window = 360.0)
- scan.create_laser_arc()
- # create a compound sensor of all of the individual sensors and stream it
- all_sensors = CompoundSensor([imu, gps, velocity, pose, scan])
- all_sensors.add_stream('socket')
- vehicle.append(all_sensors)
- # make the vehicle controllable with speed and angular velocity
- # this will be available on port 60001 by default
- # an example command is:
- # {"v":2, "w":1}
- # which is 2m/s fwd, and rotating left at 1 radian/second
- motion = MotionVW()
- vehicle.append(motion)
- motion.add_stream('socket')
- # this would allow us to control the vehicle with a keyboard
- # we don't enable it as it causes issues with sensor consistency
- #keyboard = Keyboard()
- #keyboard.properties(Speed=3.0)
- #vehicle.append(keyboard)
- # Environment
- env = Environment('indoors-1/boxes', fastmode=False)
- env.set_camera_location([10.0, -10.0, 10.0])
- env.set_camera_rotation([1.0470, 0, 0.7854])
- env.select_display_camera(camera)
- env.set_camera_clip(clip_end=1000)
- # startup at CMAC. A location is needed for the magnetometer
- env.properties(longitude = 149.165230, latitude = -35.363261, altitude = 584.0)
|