-
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
object_trackingにおいて画像トピックをサブスクライブするように変更 #43
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.
シミュレータ上での動作確認ができました。
いくつかコメントしているので確認お願いします。
@@ -117,7 +120,7 @@ void Tracker::tracking(const cv::Mat & input_frame, cv::Mat & result_frame) | |||
cv::Mat hsv; | |||
cv::cvtColor(input_frame, hsv, cv::COLOR_BGR2HSV); | |||
cv::Mat extracted_bin; | |||
cv::inRange(hsv, cv::Scalar(9, 100, 100), cv::Scalar(29, 255, 255), extracted_bin); // Orange | |||
cv::inRange(hsv, cv::Scalar(0, 100, 100), cv::Scalar(29, 255, 255), extracted_bin); // Red-Orange |
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.
メンバ変数device_index_、image_witdh_、image_heightは使用されなくなったので削除してください
@@ -38,7 +38,7 @@ class Tracker : public rclcpp_lifecycle::LifecycleNode | |||
explicit Tracker(const rclcpp::NodeOptions & options); | |||
|
|||
protected: | |||
void on_image_timer(); | |||
void on_image_timer(const sensor_msgs::msg::Image::SharedPtr msg_image); |
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.
ここはコールバック関数なので、image_callback
のような名称に変更してください
@@ -54,7 +54,8 @@ class Tracker : public rclcpp_lifecycle::LifecycleNode | |||
std::shared_ptr<rclcpp_lifecycle::LifecyclePublisher<sensor_msgs::msg::Image>> result_image_pub_; | |||
std::shared_ptr<rclcpp_lifecycle::LifecyclePublisher<geometry_msgs::msg::Twist>> cmd_vel_pub_; | |||
std::shared_ptr<rclcpp::Client<std_srvs::srv::SetBool>> motor_power_client_; | |||
rclcpp::TimerBase::SharedPtr image_timer_; | |||
rclcpp::Subscription<sensor_msgs::msg::Image>::SharedPtr image_sub_; | |||
// rclcpp::TimerBase::SharedPtr image_timer_; |
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.
image_timer_は使用しないので削除してください
src/object_tracking_component.cpp
Outdated
return CallbackReturn::FAILURE; | ||
} | ||
image_sub_ = create_subscription<sensor_msgs::msg::Image>( | ||
"camera/color/image_raw", 1, std::bind(&Tracker::on_image_timer, this, _1)); |
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 2のデモパッケージに倣って、rclcpp::SensorDataQoS()を使用してください
src/object_tracking_component.cpp
Outdated
@@ -25,6 +25,8 @@ | |||
#include "rclcpp/rclcpp.hpp" | |||
#include "std_msgs/msg/string.hpp" | |||
#include "lifecycle_msgs/srv/change_state.hpp" | |||
#include "cv_bridge/cv_bridge.h" | |||
using std::placeholders::_1; |
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.
細かい指摘です。
1箇所でしか使用してないので、create_subscription内に直接std::placeholders::_1と記述してください。
launch/object_tracking.launch.py
Outdated
ComposableNode( | ||
package='raspimouse', | ||
plugin='raspimouse::Raspimouse', | ||
name='raspimouse', | ||
parameters=[{'use_light_sensors': False}]), |
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.
ComposableNodeのまま使用できませんか?
IfConditionも適用できると思います。
launch/object_tracking.launch.py
Outdated
usb_cam_node = Node( | ||
package='usb_cam', | ||
executable='usb_cam_node_exe', | ||
remappings=[('image_raw', 'camera/color/image_raw')], | ||
parameters=[ | ||
{'video_device': LaunchConfiguration('video_device')}, | ||
{'frame_id': 'camera_color_optical_frame'}, | ||
{'pixel_format': 'yuyv2rgb'} | ||
], | ||
condition=IfCondition(LaunchConfiguration('use_camera_node')) |
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.
usb_camもcomponentが提供されているので、composable nodeとして立ち上げてください。
usb_cam::UsbCamNode
参考情報:
https://docs.ros.org/en/foxy/Tutorials/Intermediate/Composition.html#discover-available-components
https://github.com/ros-drivers/usb_cam/blob/ros2/CMakeLists.txt#L62-L65
parameters=[{'use_light_sensors': False, }], | ||
condition=IfCondition(LaunchConfiguration('mouse')) | ||
) | ||
|
||
container = ComposableNodeContainer( |
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.
プロセス内通信を使用してトピックのやり取りを高速化したいです。
各ノードのuse_intra_process_comms
をTrueにしてください
参考:https://docs.ros.org/en/foxy/How-To-Guides/Launching-composable-nodes.html#launch-file-examples
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.
オッケーです!
1箇所コメントしたので修正お願いします。
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.
usb_camノードを使用するので、raw_imageトピックとpublisherが不要になりました。
削除お願いします。
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.
LGTMです!
* object_trackingにおいて画像トピックをサブスクライブするように変更 (#43) * 画像トピックのサブスクライバを実装 * 画像トピックがRGBなのでBGRに変換 * mouseとcamera_nodeのオンオフを実装 * 実機で動作するように変更 * 物体追従のパラメータ調整 * 不要なメンバ変数を削除 * コールバック関数の名前を変更 * コメントアウトしていた不要な行を削除 * rclcpp::SensorDataQoS()を使用するように変更 * std::placeholders::_1を直接書くように修正 * raspimouseノードにComposableNodeを使用 * usb_camノードにもComposableNodeを使用 * 各ノードのuse_intra_process_commsをtrueに変更 * image_pub_を削除 * READMEのobject_trackingのコマンドを修正 * Gazeboの場合のコマンド例を削除 * READMEにGazeboでも実行できることを追記 (#44) * READMEにGazeboでも動作することを追記 * 英語版のREADMEにもGazeboの情報を追記 * READMEのサンプル集のリンクを修正 * READMEのraspimouse_simのリンクを修正 * リリースのためにCHANGELOG.rstとpackage.xmlを更新 (#45) * リリースのためにCHANGELOG.rstを更新 * 2.1.0
What does this implement/fix?
元々object_trackingではOpenCVを使用してRGBカメラから直接画像を取得していましたが、画像トピックをサブスクライブするように変更します。
実機ではusb_camを使用して画像トピックを配信します。
シミュレータではxacroファイルにカメラ情報を記述することで画像トピックを配信します。
Does this close any currently open issues?
しません。
How has this been tested?
シミュレータの場合
端末1で下記のコマンドを実行します。
端末2で下記のコマンドを実行します。
Gazebo上の赤いキューブを移動させると、ラズパイマウスが追従します。
実機の場合
デバイスドライバのインストールを行ってから、端末で下記のコマンドを実行します。
ラズパイマウスが赤い物体を追従します。
Any other comments?
raspimouse_descriptionとraspimouse_simが必要です(両方ともros2ブランチ)。
https://github.com/rt-net/raspimouse_sim/tree/ros2
https://github.com/rt-net/raspimouse_description/tree/ros2
Checklists