Skip to content
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

Merged
merged 16 commits into from
Nov 1, 2023

Conversation

YusukeKato
Copy link
Contributor

@YusukeKato YusukeKato commented Oct 27, 2023

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で下記のコマンドを実行します。

ros2 launch raspimouse_gazebo raspimouse_with_color_objects.launch.py use_rgb_camera:=true

端末2で下記のコマンドを実行します。

ros2 launch raspimouse_ros2_examples object_tracking.launch.py mouse:=false use_camera_node:=false

Gazebo上の赤いキューブを移動させると、ラズパイマウスが追従します。

実機の場合

デバイスドライバのインストールを行ってから、端末で下記のコマンドを実行します。

ros2 launch raspimouse_ros2_examples object_tracking.launch.py video_device:=/dev/video0

ラズパイマウスが赤い物体を追従します。

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

@YusukeKato YusukeKato added the Type: Feature New Feature label Oct 27, 2023
@YusukeKato YusukeKato requested a review from ShotaAk October 27, 2023 04:39
@YusukeKato YusukeKato self-assigned this Oct 27, 2023
@YusukeKato YusukeKato marked this pull request as ready for review October 30, 2023 07:17
Copy link
Contributor

@ShotaAk ShotaAk left a 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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

オレンジ色(RGB: 1.0, 0.65, 0.0)でも認識することを確認しました。

Copy link
Contributor

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);
Copy link
Contributor

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_;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image_timer_は使用しないので削除してください

return CallbackReturn::FAILURE;
}
image_sub_ = create_subscription<sensor_msgs::msg::Image>(
"camera/color/image_raw", 1, std::bind(&Tracker::on_image_timer, this, _1));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ROS 2のデモパッケージに倣って、rclcpp::SensorDataQoS()を使用してください

https://github.com/ros2/demos/blob/647f858a80cefa5bf205b0b48c255b28dd18a7a1/image_tools/src/cam2image.cpp#L94-L95

@@ -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;
Copy link
Contributor

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と記述してください。

Comment on lines 33 to 37
ComposableNode(
package='raspimouse',
plugin='raspimouse::Raspimouse',
name='raspimouse',
parameters=[{'use_light_sensors': False}]),
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ComposableNodeのまま使用できませんか?
IfConditionも適用できると思います。

https://github.com/ros2/launch_ros/blob/rolling/launch_ros/launch_ros/descriptions/composable_node.py#L48

Comment on lines 75 to 84
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'))
Copy link
Contributor

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(
Copy link
Contributor

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://github.com/SSL-Roots/consai_ros2/blob/4b539f3fe7870fb5e510d76e920470f9efdf4132/consai_robot_controller/launch/test.launch.py#L78

参考:https://docs.ros.org/en/foxy/How-To-Guides/Launching-composable-nodes.html#launch-file-examples

@ShotaAk ShotaAk closed this Nov 1, 2023
@ShotaAk ShotaAk reopened this Nov 1, 2023
Copy link
Contributor

@ShotaAk ShotaAk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

オッケーです!
1箇所コメントしたので修正お願いします。

Copy link
Contributor

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も合わせて修正お願いします。

Copy link
Contributor

@ShotaAk ShotaAk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTMです!

@ShotaAk ShotaAk merged commit 7c323ab into master Nov 1, 2023
1 check passed
@ShotaAk ShotaAk deleted the subscribe-image-topic branch November 1, 2023 09:29
ShotaAk pushed a commit that referenced this pull request Nov 7, 2023
* 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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: Feature New Feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants