Skip to content

Commit f0b0921

Browse files
Critical bug in rvc_pose_detector fixes and multiple realsense camera support (open-edge-platform#975)
1 parent 289180b commit f0b0921

16 files changed

Lines changed: 510 additions & 116 deletions

File tree

robotics-ai-suite/robot-vision-control/src/rvc_dynamic_motion_controller_use_case/cameraurdf/d405camera.xacro

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0"?>
2+
3+
<robot name="d405_camera" xmlns:xacro="http://ros.org/wiki/xacro">
4+
<xacro:arg name="use_nominal_extrinsics" default="false"/>
5+
<xacro:arg name="name" default="cameraipc0"/>
6+
<xacro:include filename="$(find realsense2_description)/urdf/_d405.urdf.xacro" />
7+
<link name="world" />
8+
<xacro:sensor_d405 parent="world" name="$(arg name)" use_nominal_extrinsics="$(arg use_nominal_extrinsics)" >
9+
<origin xyz="0.36 0.66 0.755" rpy="-3.141592654 1.570796327 -1.570796327"/>
10+
</xacro:sensor_d405>
11+
</robot>
12+

robotics-ai-suite/robot-vision-control/src/rvc_dynamic_motion_controller_use_case/cameraurdf/d415cameraipc0.xacro

Lines changed: 0 additions & 14 deletions
This file was deleted.

robotics-ai-suite/robot-vision-control/src/rvc_dynamic_motion_controller_use_case/cameraurdf/d415cameraipc1.xacro

Lines changed: 0 additions & 14 deletions
This file was deleted.

robotics-ai-suite/robot-vision-control/src/rvc_dynamic_motion_controller_use_case/cameraurdf/d435camera.xacro renamed to robotics-ai-suite/robot-vision-control/src/rvc_dynamic_motion_controller_use_case/cameraurdf/d435cameraipc.xacro

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
<?xml version="1.0"?>
22

3-
<robot name="realsense2_camera" xmlns:xacro="http://ros.org/wiki/xacro">
3+
<robot name="d435_camera" xmlns:xacro="http://ros.org/wiki/xacro">
44
<xacro:arg name="use_nominal_extrinsics" default="false"/>
5-
<xacro:arg name="name" default="camera1"/>
5+
<xacro:arg name="name" default="cameraipc"/>
66
<xacro:arg name="use_mesh" default="true"/>
7-
<xacro:arg name="use_plug" default="true"/>
7+
<xacro:arg name="use_plug" default="false"/>
88
<xacro:include filename="$(find realsense2_description)/urdf/_d435.urdf.xacro" />
99
<link name="world" />
1010
<xacro:sensor_d435 parent="world" name="$(arg name)" use_mesh="$(arg use_mesh)" add_plug="$(arg use_plug)" use_nominal_extrinsics="$(arg use_nominal_extrinsics)" >
11-
<origin rpy="-1.503104 0.485758 0.066405" xyz="-0.785000 0.802000 0.657000"/>
11+
<origin xyz="0.36 0.66 0.755" rpy="-3.141592654 1.570796327 -1.570796327"/>
1212
</xacro:sensor_d435>
1313
</robot>
1414

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?xml version="1.0"?>
2+
3+
<robot name="d455_camera" xmlns:xacro="http://ros.org/wiki/xacro">
4+
<xacro:arg name="use_nominal_extrinsics" default="false"/>
5+
<xacro:arg name="name" default="cameraipc0"/>
6+
<xacro:include filename="$(find realsense2_description)/urdf/_d455.urdf.xacro" />
7+
<link name="world" />
8+
<xacro:sensor_d455 parent="world" name="$(arg name)" use_nominal_extrinsics="$(arg use_nominal_extrinsics)" >
9+
<origin xyz="0.36 0.66 0.755" rpy="-3.141592654 1.570796327 -1.570796327"/>
10+
</xacro:sensor_d455>
11+
</robot>
12+

robotics-ai-suite/robot-vision-control/src/rvc_dynamic_motion_controller_use_case/config/robot_demo_config_qt.rviz

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ Panels:
1515
- /Pose1/Topic1
1616
- /PointCloud22/Topic1
1717
- /MarkerArray2/Topic1
18-
- /PlanningScene1
1918
- /PlanningScene1/Scene Geometry1
2019
- /PlanningScene1/Scene Robot1
2120
Splitter Ratio: 0.5823529362678528
@@ -425,7 +424,7 @@ Visualization Manager:
425424
Filter size: 10
426425
History Policy: Keep Last
427426
Reliability Policy: Best Effort
428-
Value: camera/depth/color/points
427+
Value: camera/cameraipc/depth/color/points
429428
Use Fixed Frame: true
430429
Use rainbow: true
431430
Value: false
@@ -729,21 +728,34 @@ Visualization Manager:
729728
Durability Policy: Volatile
730729
History Policy: Keep Last
731730
Reliability Policy: Reliable
732-
Value: d405rs_description
733-
Enabled: false
731+
Value: rs_description
732+
Enabled: true
734733
Links:
735734
All Links Enabled: true
736735
Expand Joint Details: false
737736
Expand Link Details: false
738737
Expand Tree: false
739738
Link Tree Style: Links in Alphabetic Order
739+
cameraipc_bottom_screw_frame:
740+
Alpha: 1
741+
Show Axes: false
742+
Show Trail: false
743+
cameraipc_link:
744+
Alpha: 1
745+
Show Axes: false
746+
Show Trail: false
747+
Value: true
748+
world:
749+
Alpha: 1
750+
Show Axes: false
751+
Show Trail: false
740752
Mass Properties:
741753
Inertia: false
742754
Mass: false
743755
Name: d405RS
744756
TF Prefix: ""
745757
Update Interval: 0
746-
Value: false
758+
Value: true
747759
Visual Enabled: true
748760
Enabled: true
749761
Global Options:

robotics-ai-suite/robot-vision-control/src/rvc_dynamic_motion_controller_use_case/launch/dynamic_demo_launch.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,10 @@ def launch_setup(context, *args, **kwargs):
7474
# UR specific arguments
7575
#ur_type_arg = LaunchConfiguration( "ur_type", default="ur5e")
7676
#robot_ip_arg = LaunchConfiguration( "robot_ip", default="10.11.12.99")
77+
78+
myRSModelTypeConf = LaunchConfiguration("rs_model")
79+
myRSModelType= context.perform_substitution(myRSModelTypeConf)
80+
7781
launch_rviz_arg = LaunchConfiguration( "launch_rviz", default="false")
7882
headless_mode_arg = LaunchConfiguration( "headless_mode", default="false")
7983

@@ -384,7 +388,7 @@ def launch_setup(context, *args, **kwargs):
384388

385389
)
386390

387-
camera_xacro_path = robot_demo_main_dir + '/cameraurdf/d415camera' + whoAmI_arg + '.xacro'
391+
camera_xacro_path = robot_demo_main_dir + '/cameraurdf/' + myRSModelType + 'camera' + whoAmI_arg + '.xacro'
388392
camera_robot_state_publisher_node = Node(
389393
name='camera_robot_state_publisher',
390394

@@ -528,13 +532,13 @@ def launch_setup(context, *args, **kwargs):
528532
)
529533
]
530534
if ((motion_controller_string == "servo") or (motion_controller_string == "linear_controller")):
531-
nodes_to_start.append(io_and_status_controller_spawner)
532-
nodes_to_start.append(dashboard_client_node)
535+
#nodes_to_start.append(io_and_status_controller_spawner)
536+
#nodes_to_start.append(dashboard_client_node)
533537
nodes_to_start.append(control_node)
534538
nodes_to_start.append(joint_state_broadcaster_spawner)
535539
nodes_to_start.append(robot_controller_spawner)
536540
nodes_to_start.append(gripper_forward_command_controller_spawner)
537-
nodes_to_start.append(joint_trajectory_controller_node)
541+
#nodes_to_start.append(joint_trajectory_controller_node)
538542
nodes_to_start.append(gripper_sensor_broadcaster)
539543
return nodes_to_start
540544

@@ -729,4 +733,12 @@ def generate_launch_description():
729733
description="Port that will be opened to forward script commands from the driver to the robot",
730734
)
731735
)
736+
declared_arguments.append(
737+
DeclareLaunchArgument(
738+
"rs_model",
739+
description="model type, can be d405, d415, d435, d455",
740+
default_value="d415",
741+
choices=['d405', 'd415', 'd435', 'd455']
742+
)
743+
)
732744
return LaunchDescription(declared_arguments + [OpaqueFunction(function=launch_setup)] )

robotics-ai-suite/robot-vision-control/src/rvc_vision/rvc_pose_detector/CMakeLists.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ find_package(rvc_messages REQUIRED)
4444
find_package(rvc_vision_messages REQUIRED)
4545
find_package(message_filters REQUIRED)
4646
find_package(Eigen3 REQUIRED)
47+
find_package(tf2_ros REQUIRED)
48+
find_package(tf2 REQUIRED)
49+
find_package(tf2_eigen REQUIRED)
50+
find_package(tf2_geometry_msgs REQUIRED)
51+
find_package(tf2_sensor_msgs REQUIRED)
4752

4853
# find non-ROS dependencies
4954
find_package(PCL REQUIRED)
@@ -66,6 +71,9 @@ ament_target_dependencies(${PROJECT_NAME_PLUGIN}
6671
pcl_conversions
6772
message_filters
6873
tf2_eigen
74+
tf2_ros
75+
tf2_geometry_msgs
76+
tf2_sensor_msgs
6977
)
7078
target_include_directories(${PROJECT_NAME_PLUGIN} PUBLIC
7179
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>

robotics-ai-suite/robot-vision-control/src/rvc_vision/rvc_pose_detector/include/rvc_pose_detector.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,15 @@
3535
#include <message_filters/sync_policies/exact_time.h>
3636

3737
#include <pcl_conversions/pcl_conversions.h>
38+
#include <pcl/filters/extract_indices.h>
3839

3940
#include <tf2_eigen/tf2_eigen.hpp>
41+
42+
#include <sensor_msgs/msg/camera_info.hpp>
43+
#include <tf2_ros/transform_listener.h>
44+
#include <tf2_ros/buffer.h>
45+
#include <tf2_sensor_msgs/tf2_sensor_msgs.h> // for doTransform(sensor_msgs::PointCloud2)
46+
4047
#include "matcher.hpp"
4148

4249
namespace RVC
@@ -50,6 +57,13 @@ struct MatchOperation
5057
class PoseDetector : public rclcpp::Node
5158
{
5259
private:
60+
std::unique_ptr<tf2_ros::Buffer> tfBuffer;
61+
std::shared_ptr<tf2_ros::TransformListener> tfListener;
62+
// Camera intrinsics
63+
double fx_, fy_, cx_, cy_;
64+
bool intrinsicsReceived;
65+
void cameraInfoCallback(sensor_msgs::msg::CameraInfo::ConstSharedPtr msg);
66+
rclcpp::Subscription<sensor_msgs::msg::CameraInfo>::SharedPtr camera_info_sub_;
5367

5468
message_filters::Subscriber<rvc_vision_messages::msg::RotatedBBList> m_rotated_bb_list_sub;
5569
message_filters::Subscriber<sensor_msgs::msg::PointCloud2> m_pcl_sub;

0 commit comments

Comments
 (0)