-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
カメラライントレースを修正 #49
カメラライントレースを修正 #49
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
文章について一部コメントしてます。
実装に課題があるので調査してほしいです。
画像処理そのものにどれくらい時間が掛かっているのかも調査お願いします。
camera_line_follower実行時の時間計測
合計約50msの処理をカメラ画像トピック(30FPS)のコールバック関数内で行っているために、処理が間に合っていない可能性があります。 |
@YusukeKato どのステップでどれぐらい処理時間が掛かっているか、処理時間を短縮できるか、検証お願いします。 下記が候補です。
|
画像のpublish処理については、画像サイズを小さくすれば改善すると思います。 また、image_transportを使うと改善する可能性あります。 https://github.com/ros-perception/image_transport_tutorials/blob/main/src/my_publisher.cpp#L26-L27 |
画像処理にかかった時間の計測結果は以下のようになりました。 合計
内訳
|
画像サイズを小さくしたときの画像処理とpublish処理にかかった時間を計測しました。 デフォルトの画像サイズの場合(640x480、2値化はinRange()を使用、rqt_image_view起動時)
画像サイズを320x240に変更した場合(2値化はinRange()を使用、rqt_image_view起動時)
画像サイズ320x240でadaptiveThreshold() を使用(rqt_image_view起動時)
画像サイズを小さくすることで画像処理とpublish処理に時間がかかりすぎる問題は解決しそうです。 |
ヒストグラム平坦化について調査しました。 参考 : https://docs.opencv.org/4.x/d6/dc7/group__imgproc__hist.html#ga7e54091f0c937d49bf84152a16f76d6e 使用方法 cv::equalizeHist(input_gray_image, output_hist_equalized_image); ヒストグラム平坦化の処理にかかる時間は1ms以内でした。 ヒストグラム平坦化前のグレイスケール画像↓ ヒストグラム平坦化を行ったグレイスケール画像↓ |
usb_camをlaunchファイルから起動する際に、パラメータを設定してホワイトバランスと露光の自動調整機能をオフにしようとしましたが、うまくいきませんでした。そのため、以下のコマンドを実行して対処しています。 v4l2-ctl -c auto_exposure=1
v4l2-ctl -c white_balance_automatic=0 |
V4L2のパラメータ名が違うというのはissueにありました。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
シミュレータで動作確認しました。
ROS パラメータ変更が適用されてOKです。
コメントの確認お願いします。
README.md
Outdated
[`./src/camera_line_follower_component.cpp`](./src/camera_line_follower_component.cpp) | ||
を編集します。 | ||
|
||
物体検出精度が悪い時にはカメラの露光や関数内のパラメータを調整して下さい。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ROSパラメータが用意されたので、パラメータを変更して調整できることを説明してください。
raspimouse2 パッケージのREADMEのように、パラメータ一覧を記載するとわかりやすいです。
cmd_vel.linear.x = LINEAR_VEL * (object_normalized_area_ - TARGET_AREA); | ||
cmd_vel.angular.z = ANGULAR_VEL * object_normalized_point_.x; | ||
cmd_vel.linear.x = LINEAR_VEL; | ||
cmd_vel.angular.z = ANGULAR_VEL * object_normalized_point_.x * 2.0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ここの2.0 がどういう意味なのかわかるように定数にしてください。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
この2.0はデバッグ時に使用していた係数なので削除しました。
2.0を削除したことで回転方向の速度が変わりますが、ANGULAR_VELを調整することで対応できると思います。
constexpr double ANGULAR_VEL = -0.8; // unit: rad/s
ついでに、ライン検出の関数名を ~ing という名称は、プロセスや状態に付けたいので。 |
コメントありがとうございます。
|
カメラパラメータについて言葉足らずでした。 他の投稿を見ると、どうやらデバイスによって名称が変わるようです。 サンプルのlaunchファイル側でv4l2-ctrlコマンドを実行することもできますが、 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
シミュレータで確認しました。
微修正お願いします。
README.en.md
Outdated
#### Configure | ||
|
||
Edit [`./src/camera_line_follower_component.cpp`](./src/camera_line_follower_component.cpp) | ||
to change a color of tracking target. | ||
|
||
If the object detection accuracy is poor, adjust the camera exposure and parameters in the function | ||
|
||
```cpp | ||
cv::inRange(gray, 0, 100, extracted_bin); | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Parametersの説明が追加されたので、Configureの説明は削除してOKです
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
日本語READMEも同様にお願いします。
@@ -197,6 +203,10 @@ CallbackReturn Camera_Follower::on_configure(const rclcpp_lifecycle::State &) | |||
switches_sub_ = create_subscription<raspimouse_msgs::msg::Switches>( | |||
"switches", 1, std::bind(&Camera_Follower::callback_switches, this, std::placeholders::_1)); | |||
|
|||
// Set parameter defaults | |||
declare_parameter(BRIGHTNESS_MIN_VAL_PARAM, 0); | |||
declare_parameter(BRIGHTNESS_MAX_VAL_PARAM, 100); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
READMEに記載している数値も変更お願いします。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
私の環境でもライントレースに失敗していました。
しきい値のデフォルト値を90に変更しました。
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTMです!
What does this implement/fix?
カメラライントレースサンプルを改善するために以下の修正を加えます。
Does this close any currently open issues?
しません。
How has this been tested?
実機で下記のコマンドを実行してサンプルコースを走行できることを確認しました。
シミュレータでも動作確認しました。
ros2 topic pub --once /switches raspimouse_msgs/msg/Switches "{switch0: false, switch1: false, switch2: true}"
Any other comments?
ありません。
Checklists