pull/1282/head
ZwX1616 5 years ago
parent 0e059f5d4a
commit 4bcfe54efd
  1. 26
      selfdrive/camerad/cameras/camera_webcam.cc
  2. 18
      selfdrive/manager.py
  3. 7
      tools/webcam/README.md
  4. 10
      tools/webcam/warp_vis.py

@ -54,8 +54,8 @@ static void* rear_thread(void *arg) {
CameraState* s = (CameraState*)arg; CameraState* s = (CameraState*)arg;
cv::VideoCapture cap_rear(1); // road cv::VideoCapture cap_rear(1); // road
cap_rear.set(cv::CAP_PROP_FRAME_WIDTH, 1280); cap_rear.set(cv::CAP_PROP_FRAME_WIDTH, 853);
cap_rear.set(cv::CAP_PROP_FRAME_HEIGHT, 720); cap_rear.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
cap_rear.set(cv::CAP_PROP_FPS, s->fps); cap_rear.set(cv::CAP_PROP_FPS, s->fps);
cap_rear.set(cv::CAP_PROP_AUTOFOCUS, 0); // off cap_rear.set(cv::CAP_PROP_AUTOFOCUS, 0); // off
cap_rear.set(cv::CAP_PROP_FOCUS, 0); // 0 - 255? cap_rear.set(cv::CAP_PROP_FOCUS, 0); // 0 - 255?
@ -66,9 +66,13 @@ static void* rear_thread(void *arg) {
size.width = s->ci.frame_width; size.width = s->ci.frame_width;
// transforms calculation see tools/webcam/warp_vis.py // transforms calculation see tools/webcam/warp_vis.py
float ts[9] = {1.00220264, 0.0, -59.40969163, float ts[9] = {1.50330396, 0.0, -59.40969163,
0.0, 1.00220264, 76.20704846, 0.0, 1.50330396, 76.20704846,
0.0, 0.0, 1.0}; 0.0, 0.0, 1.0};
// if camera upside down:
// float ts[9] = {-1.50330396, 0.0, 1223.4,
// 0.0, -1.50330396, 797.8,
// 0.0, 0.0, 1.0};
const cv::Mat transform = cv::Mat(3, 3, CV_32F, ts); const cv::Mat transform = cv::Mat(3, 3, CV_32F, ts);
if (!cap_rear.isOpened()) { if (!cap_rear.isOpened()) {
@ -126,8 +130,8 @@ void front_thread(CameraState *s) {
int err; int err;
cv::VideoCapture cap_front(2); // driver cv::VideoCapture cap_front(2); // driver
cap_front.set(cv::CAP_PROP_FRAME_WIDTH, 1280); cap_front.set(cv::CAP_PROP_FRAME_WIDTH, 853);
cap_front.set(cv::CAP_PROP_FRAME_HEIGHT, 720); cap_front.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
cap_front.set(cv::CAP_PROP_FPS, s->fps); cap_front.set(cv::CAP_PROP_FPS, s->fps);
// cv::Rect roi_front(320, 0, 960, 720); // cv::Rect roi_front(320, 0, 960, 720);
@ -136,9 +140,13 @@ void front_thread(CameraState *s) {
size.width = s->ci.frame_width; size.width = s->ci.frame_width;
// transforms calculation see tools/webcam/warp_vis.py // transforms calculation see tools/webcam/warp_vis.py
float ts[9] = {0.94713656, 0.0, -30.16740088, float ts[9] = {1.42070485, 0.0, -30.16740088,
0.0, 0.94713656, 91.030837, 0.0, 1.42070485, 91.030837,
0.0, 0.0, 1.0}; 0.0, 0.0, 1.0};
// if camera upside down:
// float ts[9] = {-1.42070485, 0.0, 1182.2,
// 0.0, -1.42070485, 773.0,
// 0.0, 0.0, 1.0};
const cv::Mat transform = cv::Mat(3, 3, CV_32F, ts); const cv::Mat transform = cv::Mat(3, 3, CV_32F, ts);
if (!cap_front.isOpened()) { if (!cap_front.isOpened()) {
@ -266,4 +274,4 @@ void cameras_run(DualCameraState *s) {
err = pthread_join(rear_thread_handle, NULL); err = pthread_join(rear_thread_handle, NULL);
assert(err == 0); assert(err == 0);
cameras_close(s); cameras_close(s);
} }

@ -189,8 +189,13 @@ persistent_processes = [
'thermald', 'thermald',
'logmessaged', 'logmessaged',
'ui', 'ui',
'uploader',
] ]
if not WEBCAM:
persistent_processes += [
'uploader',
]
if ANDROID: if ANDROID:
persistent_processes += [ persistent_processes += [
'logcatd', 'logcatd',
@ -201,7 +206,6 @@ if ANDROID:
car_started_processes = [ car_started_processes = [
'controlsd', 'controlsd',
'plannerd', 'plannerd',
'loggerd',
'radard', 'radard',
'dmonitoringd', 'dmonitoringd',
'calibrationd', 'calibrationd',
@ -209,13 +213,19 @@ car_started_processes = [
'camerad', 'camerad',
'modeld', 'modeld',
'proclogd', 'proclogd',
'ubloxd',
'locationd', 'locationd',
] ]
if WEBCAM:
if not WEBCAM:
car_started_processes += [
'loggerd',
'ubloxd',
]
else:
car_started_processes += [ car_started_processes += [
'dmonitoringmodeld', 'dmonitoringmodeld',
] ]
if ANDROID: if ANDROID:
car_started_processes += [ car_started_processes += [
'sensord', 'sensord',

@ -23,14 +23,15 @@ git clone https://github.com/commaai/openpilot.git
``` ```
## Build openpilot for webcam ## Build openpilot for webcam
``` ```
cd ~/openpilot cd ~/openpilot
scons use_webcam=1 # check out selfdrive/camerad/cameras/camera_webcam.cc line72&146 if any camera is upside down
scons use_webcam=1
touch prebuilt touch prebuilt
``` ```
## Connect the hardwares ## Connect the hardwares
``` ```
# Connect the road facing camera first, then the driver facing camera # Connect the road facing camera first, then the driver facing camera
# (default indexes are 1 and 2; can be modified in selfdrive/camerad/cameras/camera_webcam.cc) # (default indexes are 1 and 2; can be modified in selfdrive/camerad/cameras/camera_webcam.cc)
# Connect your computer to panda # Connect your computer to panda
``` ```
## GO ## GO

@ -5,7 +5,7 @@ import numpy as np
eon_focal_length = 910.0 # pixels eon_focal_length = 910.0 # pixels
eon_dcam_focal_length = 860.0 # pixels eon_dcam_focal_length = 860.0 # pixels
webcam_focal_length = 908.0 # pixels webcam_focal_length = -908.0/1.5 # pixels
eon_intrinsics = np.array([ eon_intrinsics = np.array([
[eon_focal_length, 0., 1164/2.], [eon_focal_length, 0., 1164/2.],
@ -18,8 +18,8 @@ eon_dcam_intrinsics = np.array([
[ 0, 0, 1]]) [ 0, 0, 1]])
webcam_intrinsics = np.array([ webcam_intrinsics = np.array([
[webcam_focal_length, 0., 1280/2.], [webcam_focal_length, 0., 1280/2/1.5],
[ 0., webcam_focal_length, 720/2.], [ 0., webcam_focal_length, 720/2/1.5],
[ 0., 0., 1.]]) [ 0., 0., 1.]])
if __name__ == "__main__": if __name__ == "__main__":
@ -30,8 +30,8 @@ if __name__ == "__main__":
print("trans_webcam_to_eon_front:\n", trans_webcam_to_eon_front) print("trans_webcam_to_eon_front:\n", trans_webcam_to_eon_front)
cap = cv2.VideoCapture(1) cap = cv2.VideoCapture(1)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 853)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
while (True): while (True):
ret, img = cap.read() ret, img = cap.read()

Loading…
Cancel
Save