Skip to content

Commit f32f9fa

Browse files
committed
add roseus program to convert raw sensor value into distance
1 parent ad424ca commit f32f9fa

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

Diff for: jsk_arc2017_baxter/euslisp/proximity-calibrator.l

+74
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
#!/usr/bin/env roseus
2+
3+
(ros::load-ros-manifest "roseus")
4+
(ros::load-ros-manifest "force_proximity_ros")
5+
6+
(defclass proximity-calibrator
7+
:super propertied-object
8+
:slots (proximities-calibrated-
9+
proximities-init-
10+
proximities-param-a-
11+
topic-list-))
12+
13+
(defmethod proximity-calibrator
14+
(:init (&rest args &key topic-list)
15+
(ros::roseus "proximity-calibrator")
16+
;; create subscribers and publishers
17+
(ros::subscribe "/set_init_proximities" std_msgs::Empty #'send self :set-init-proximities)
18+
(dolist (topic-name topic-list)
19+
(ros::subscribe topic-name force_proximity_ros::ProximityArray #'send self :cb topic-name)
20+
(ros::advertise (format nil "~A/init" topic-name) std_msgs::Float64MultiArray 1)
21+
(ros::advertise (format nil "~A/calibrated" topic-name) std_msgs::Float64MultiArray 1)
22+
(ros::advertise (format nil "~A/distance" topic-name) std_msgs::Float64MultiArray 1))
23+
24+
;; make hash tables
25+
(setq proximities-calibrated- (make-hash-table :test #'equal))
26+
(setq proximities-init- (make-hash-table :test #'equal))
27+
(setq proximities-param-a- (make-hash-table :test #'equal))
28+
29+
;; get default proximity parameters from rosparam
30+
(dolist (topic-name topic-list)
31+
(sethash topic-name
32+
proximities-param-a-
33+
(ros::get-param (format nil "~A/a" topic-name)))
34+
(sethash topic-name
35+
proximities-init-
36+
(ros::get-param (format nil "~A/b" topic-name))))
37+
(ros::spin-once)
38+
self)
39+
(:cb (topic-name msg)
40+
;; set calibrated sensor value to hash table
41+
(sethash topic-name
42+
proximities-calibrated-
43+
(mapcar #'- (mapcar #'(lambda (x) (send x :proximity)) (send msg :proximities))
44+
(gethash topic-name proximities-init-)))
45+
;; publish distance calculated from proximtiy values
46+
(send self :publish-proximities topic-name)
47+
)
48+
(:publish-proximities (topic-name)
49+
(let ((float-array (instance std_msgs::Float64MultiArray :init)))
50+
(send float-array :data (gethash topic-name proximities-init-))
51+
(ros::publish (format nil "~A/init" topic-name) float-array)
52+
(send float-array :data (gethash topic-name proximities-calibrated-))
53+
(ros::publish (format nil "~A/calibrated" topic-name) float-array)
54+
(send float-array :data
55+
(mapcar #'(lambda (a I-b)
56+
(if (> I-b 0)
57+
(sqrt (/ a I-b))
58+
*inf*))
59+
(gethash topic-name proximities-param-a-)
60+
(gethash topic-name proximities-calibrated-)))
61+
(ros::publish (format nil "~A/distance" topic-name) float-array)))
62+
(:set-init-proximities (msg)
63+
(ros::spin-once)
64+
(dolist (topic-name topic-list-)
65+
(sethash topic-name
66+
proximities-init-
67+
(gethash topic-name proximities-raw-))))
68+
)
69+
70+
71+
(defun init (&optional (topic-list (list "/proximity_sensor_topic1" "/proximity_sensor_topic2")))
72+
(when (not (boundp '*pc*))
73+
(setq *pc* (instance proximity-calibrator :init :topic-list topic-list)))
74+
(ros::spin-once))

0 commit comments

Comments
 (0)