Skip to content

Commit

Permalink
Fixes for live launch
Browse files Browse the repository at this point in the history
  • Loading branch information
sundermann committed Oct 24, 2023
1 parent 20d1a5a commit 754640a
Show file tree
Hide file tree
Showing 16 changed files with 143 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ void ArduinoCommunication::spin() {
RCLCPP_ERROR_THROTTLE(get_logger(), clk, 1000, "Could not connect to arduino %s", exception.what());
}

rclcpp::spin(nh);
rclcpp::spin_some(nh);
r.sleep();
}
}
Expand Down
13 changes: 3 additions & 10 deletions catkin_ws/src/autominy/launch/communication/Communication.launch
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
<launch>
<arg name="live" description="Whether to instantiate a live system (true) or a bag-based one (false)" />

<!-- Relay into communication ns -->
<!--<include file="$(find-pkg-share autominy)/launch/communication/Relay.launch">
<arg name="live" value="$(var live)" />
</include>-->

<!-- Multimaster communication -->
<!--<include file="$(find-pkg-share autominy)/launch/communication/Multimaster.launch">
<arg name="live" value="$(var live)" />
</include>-->

<node name="gps" exec="gps.py" pkg="road_marking_localization">
<param name="id" value="$(env ROS_GPS_MARKER 999)"/>
</node>
</launch>
4 changes: 3 additions & 1 deletion catkin_ws/src/autominy/launch/sensors/Arduino.launch
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<arg name="baudrate" default="$(env ROS_ARDUINO_BAUDRATE 115200)" />

<!-- Arduino communication -->
<group>
<push-ros-namespace namespace="arduino" />
<node pkg="arduino_communication" exec="arduino_communication_node" name="arduino" output="screen">
<param name="baud" value="$(var baudrate)" />
<param name="device" value="/dev/ttyArduino" />
Expand All @@ -11,5 +13,5 @@
<remap from="steering" to="/actuators/steering_pwm" />
<remap from="led" to="/actuators/led" />
</node>

</group>
</launch>
22 changes: 7 additions & 15 deletions catkin_ws/src/autominy/launch/sensors/D435.launch
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,16 @@
<arg name="agent_prefix" default="" />
<arg name="tf_prefix" default="" />

<!--<group if="$(var live)">
<include file="$(find-pkg-share realsense2_camera)/launch/rs_rgbd.launch">
<arg name="align_depth" value="false" />
<arg name="depth_registered_processing" value="false"/>
<group if="$(var live)">
<include file="$(find-pkg-share realsense2_camera)/launch/rs_launch.py">
<arg name="align_depth.enable" value="false" />
<arg name="enable_color" value="true"/>
<arg name="enable_infra1" value="true"/>
<arg name="enable_infra2" value="false"/>
<arg name="depth_fps" value="15"/>
<arg name="infra_fps" value="15"/>
<arg name="color_fps" value="15"/>
<arg name="depth_width" value="848"/>
<arg name="infra_width" value="848"/>
<arg name="color_width" value="640"/>
<arg name="depth_height" value="480"/>
<arg name="infra_height" value="480"/>
<arg name="color_height" value="480"/>
<arg name="depth_module.profile" value="848x480x15"/>
<arg name="rgb_camera.profile" value="640x480x15"/>
</include>
</group>-->
</group>

<group>
<push_ros_namespace namespace="camera/stereo_camera_pose_estimation"/>
Expand All @@ -36,7 +28,7 @@
<param name="marker_frame" value="$(var tf_prefix)marker" />
<param name="threshold" value="130" />

<remap from="$(var agent_prefix)/sensors/camera/stereo_camera_pose_estimation/camera/color/image_rect_color" to="$(var agent_prefix)/sensors/camera/color/image_rect_color" />
<remap from="$(var agent_prefix)/sensors/camera/stereo_camera_pose_estimation/camera/color/image_rect_color" to="$(var agent_prefix)/sensors/camera/color/image_raw" />
<remap from="$(var agent_prefix)/sensors/camera/stereo_camera_pose_estimation/camera/depth/image_rect_raw" to="$(var agent_prefix)/sensors/camera/depth/image_rect_raw"/>
<remap from="$(var agent_prefix)/sensors/camera/stereo_camera_pose_estimation/camera/color/camera_info" to="$(var agent_prefix)/sensors/camera/color/camera_info"/>
<remap from="$(var agent_prefix)/sensors/camera/stereo_camera_pose_estimation/camera/depth/camera_info" to="$(var agent_prefix)/sensors/camera/depth/camera_info"/>
Expand Down
18 changes: 9 additions & 9 deletions catkin_ws/src/autominy/launch/sensors/Localization.launch
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,18 @@

<remap from="odometry/filtered" to="localization/filtered_map"/>

<remap from="odometry/wheel" to="odometry/odom" />
<remap from="odometry/wheel" to="odom" />
<remap from="odometry/gps" to="road_marking_localization/corrected_odom" />
<remap from="imu/data" to="imu" />
<remap from="simulation/odom_ground_truth" to="$(var agent_prefix)/simulation/odom_ground_truth" />

</node>

<!--<arg name="gps_id" value="$(env ROS_GPS_MARKER 999)" />
<remap from="gps" to="/communication/gps/$(var gps_id)" />
<remap from="localization" to="/sensors/localization/filtered_map" />
<include file="$(find-pkg-share road_marking_localization)/launch/Initialpose.launch">
<arg name="gps_id" value="$(var gps_id)" />
</include>-->

<group>
<arg name="gps_id" default="$(env ROS_GPS_MARKER 999)" />
<set_remap from="gps" to="/sensors/odometry/gps" />
<set_remap from="localization" to="/sensors/localization/filtered_map" />
<include file="$(find-pkg-share road_marking_localization)/launch/Initialpose.launch">
<arg name="gps_id" value="$(var gps_id)" />
</include>
</group>
</launch>
2 changes: 2 additions & 0 deletions catkin_ws/src/autominy/launch/sensors/Map.launch
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<arg name="live" description="Whether to instantiate a live system (true) or a bag-based one (false)" />
<arg name="tf_prefix" default="" />

<node pkg="tf2_ros" exec="static_transform_publisher" name="map_broadcaster" args="0 0 0 0 0 0 1 map odom" />

<include file="$(find-pkg-share map_publisher)/launch/robotics_lab.launch.py">
<arg name="tf_prefix" value="$(var tf_prefix)" />
</include>
Expand Down
2 changes: 1 addition & 1 deletion catkin_ws/src/autominy/launch/sensors/RPLidar.launch
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
<param name="p_ref_2_x" value="$(env ROS_LIDAR_CALIBRATION_P_REF_2_X -0.035)" />
<param name="p_ref_2_y" value="$(env ROS_LIDAR_CALIBRATION_P_REF_2_Y -0.055)" />

<remap from="/sensors/lidar_pose_estimation/scan" to="/sensors/rplidar/scan"/>
<remap from="scan" to="/sensors/rplidar/scan"/>
</node>


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<arg name="tf_prefix" default="" />
<arg name="agent_prefix" default="" />

<!--<node
<node namespace="road_marking_localization"
pkg="road_marking_localization"
name="road_marking_localization"
exec="road_marking_localization_node"
Expand All @@ -15,6 +15,5 @@
<remap from="$(var agent_prefix)/sensors/road_marking_localization/camera/depth/camera_info" to="$(var agent_prefix)/sensors/camera/depth/camera_info"/>
<remap from="$(var agent_prefix)/sensors/road_marking_localization/initialpose" to="$(var agent_prefix)/initialpose"/>
<remap from="$(var agent_prefix)/sensors/road_marking_localization/map" to="$(var agent_prefix)/sensors/map"/>
</node>-->
</launch>
</node>
</launch>
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@
<arg name="model" value="car"/>
<arg name="tf_prefix" value="$(var tf_prefix)"/>
<arg name="agent_prefix" value="$(var agent_prefix)"/>
<arg name="live" value="$(var live)" />
</include>
</launch>
3 changes: 2 additions & 1 deletion catkin_ws/src/car_description/launch/description.launch
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
<arg name="model" default="car"/>
<arg name="tf_prefix" default=""/>
<arg name="agent_prefix" default=""/>
<arg name="live" default="false"/>

<node pkg="robot_state_publisher" exec="robot_state_publisher" name="robot_state_publisher">
<param name="publish_frequency" value="50.0"/>
Expand All @@ -12,7 +13,7 @@
value="$(command 'xacro \'$(find-pkg-share car_description)/urdf/$(var model).xacro\' tf_prefix:=$(var tf_prefix) car_name:=$(var tf_prefix)model_car agent_prefix:=$(var agent_prefix)')" />
</node>

<node name="joint_state_publisher"
<node unless="$(var live)" name="joint_state_publisher"
pkg ="joint_state_publisher"
exec="joint_state_publisher">
</node>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ namespace low_voltage_shutdown {

LowVoltageShutdownNodelet::LowVoltageShutdownNodelet(const rclcpp::NodeOptions &opts) : rclcpp::Node("low_voltage_shutdown", opts) {
shutdownVoltage = declare_parameter<double>("shutdown_voltage", 13.0);
voltageSubscriber = create_subscription<autominy_msgs::msg::Voltage>("voltage", 10, std::bind(&LowVoltageShutdownNodelet::onVoltage, this, std::placeholders::_1));
voltageSubscriber = create_subscription<autominy_msgs::msg::Voltage>("/sensors/voltage", 10, std::bind(&LowVoltageShutdownNodelet::onVoltage, this, std::placeholders::_1));
}

void LowVoltageShutdownNodelet::onVoltage(const autominy_msgs::msg::Voltage::ConstSharedPtr &msg) {
Expand Down
2 changes: 1 addition & 1 deletion catkin_ws/src/map_publisher/launch/robotics_lab.launch
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<launch>
<arg name="tf_prefix" default="" />
<node pkg="tf2_ros" exec="static_transform_publisher" name="map_broadcaster" args="0 0 0 0 0 0 1 map odom" />
<node pkg="tf2_ros" exec="static_transform_publisher" name="map_broadcaster" args="0 0 0 0 0 0 1 map odom" />

<!-- Run the map server-->
<arg name="map_file" default="$(find-pkg-share map_publisher)/map/fu_robotics_lab_map.yaml"/>
Expand Down
5 changes: 4 additions & 1 deletion catkin_ws/src/road_marking_localization/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,13 @@ install(
DESTINATION lib/${PROJECT_NAME}
)

install(PROGRAMS scripts/gps.py scripts/gps_initialpose.py
DESTINATION lib/${PROJECT_NAME})

## Mark other files for installation (e.g. launch and bag files, etc.)
install(
DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)

ament_package()
ament_package()
55 changes: 55 additions & 0 deletions catkin_ws/src/road_marking_localization/scripts/gps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
#!/usr/bin/python3

import rclpy
import roslibpy

from rclpy.node import Node
from rclpy.time import Time
from rclpy.executors import MultiThreadedExecutor

from nav_msgs.msg import Odometry

class GPSClient(Node):
def __init__(self):
super().__init__('gps_client')
self.id = self.declare_parameter('id', 16)
self.pub = self.create_publisher(Odometry, '/sensors/odometry/gps', 10)
client = roslibpy.Ros(host='192.168.43.2', port=9090)
client.run()
listener = roslibpy.Topic(client, '/communication/gps/' + str(self.get_parameter('id').value), 'nav_msgs/Odometry')
listener.subscribe(self.on_gps)

def on_gps(self, message):
odom = Odometry()
odom.header.stamp = self.get_clock().now().to_msg();
odom.header.frame_id = message['header']['frame_id']
odom.child_frame_id = message['child_frame_id']
odom.pose.pose.position.x = message['pose']['pose']['position']['x']
odom.pose.pose.position.y = message['pose']['pose']['position']['y']
odom.pose.pose.position.z = message['pose']['pose']['position']['z']
odom.pose.pose.orientation.x = message['pose']['pose']['orientation']['x']
odom.pose.pose.orientation.y = message['pose']['pose']['orientation']['y']
odom.pose.pose.orientation.z = message['pose']['pose']['orientation']['z']
odom.pose.pose.orientation.w = message['pose']['pose']['orientation']['w']
odom.twist.twist.linear.x = message['twist']['twist']['linear']['x']
odom.twist.twist.linear.y = message['twist']['twist']['linear']['y']
odom.twist.twist.linear.z = message['twist']['twist']['linear']['z']
odom.twist.twist.angular.x = message['twist']['twist']['angular']['x']
odom.twist.twist.angular.y = message['twist']['twist']['angular']['y']
odom.twist.twist.angular.z = message['twist']['twist']['angular']['z']
self.pub.publish(odom)

print(message)

def main(args=None):
rclpy.init(args=args)
gps_client = GPSClient()
executor = MultiThreadedExecutor()
executor.add_node(gps_client)

rclpy.spin(gps_client)
rclpy.shutdown()


if __name__ == '__main__':
main()
69 changes: 47 additions & 22 deletions catkin_ws/src/road_marking_localization/scripts/gps_initialpose.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,75 @@
#! /usr/bin/python3
#!/usr/bin/python3

import rospy
import rclpy
import math
from tf.transformations import euler_from_quaternion
import numpy as np

from nav_msgs.msg import Odometry
from geometry_msgs.msg import PoseWithCovarianceStamped
from rclpy.node import Node


def euler_from_quaternion(x, y, z, w):
sinr_cosp = 2 * (w * x + y * z)
cosr_cosp = 1 - 2 * (x * x + y * y)
roll = np.arctan2(sinr_cosp, cosr_cosp)

sinp = 2 * (w * y - z * x)
pitch = np.arcsin(sinp)

siny_cosp = 2 * (w * z + x * y)
cosy_cosp = 1 - 2 * (y * y + z * z)
yaw = np.arctan2(siny_cosp, cosy_cosp)

class GPSInitialpose:
return roll, pitch, yaw

class GPSInitialpose(Node):

def __init__(self):
self.initialpose_pub = rospy.Publisher("/initialpose", PoseWithCovarianceStamped, queue_size=1)
self.gps_sub = rospy.Subscriber("gps", Odometry, self.on_gps, queue_size=1)
self.localization_sub = rospy.Subscriber("localization", Odometry, self.on_localization, queue_size=1)
super().__init__("gps_initialpose")
self.initialpose_pub = self.create_publisher(PoseWithCovarianceStamped, "/initialpose", 1)
self.gps_sub = self.create_subscription(Odometry, "/sensors/odometry/gps", self.on_gps, 1)
self.localization_sub = self.create_subscription(Odometry, "/sensors/localization/filtered_map", self.on_localization, 1)
self.localization = None
self.tolerance_xy = rospy.get_param("tolerance_xy", 0.4)
self.tolerance_yaw = rospy.get_param("tolerance_yaw", 1.5)
self.last_correction = rospy.Time.now()
self.declare_parameter("tolerance_xy", 0.4)
self.declare_parameter("tolerance_yaw", 1.5)
self.tolerance_xy = self.get_parameter("tolerance_xy").value
self.tolerance_yaw = self.get_parameter("tolerance_yaw").value
self.last_correction = self.get_clock().now()

def on_localization(self, msg):
self.localization = msg

def on_gps(self, msg):
if self.localization and (rospy.Time.now() - self.last_correction).to_sec() > 3.0:
if self.localization and (self.get_clock().now() - self.last_correction).nanoseconds / 1e9 > 3.0:
distance = math.sqrt((self.localization.pose.pose.position.x - msg.pose.pose.position.x) ** 2.0 + (
self.localization.pose.pose.position.y - msg.pose.pose.position.y) ** 2.0)
yaw_localization = euler_from_quaternion((self.localization.pose.pose.orientation.x,
self.localization.pose.pose.orientation.y,
self.localization.pose.pose.orientation.z,
self.localization.pose.pose.orientation.w))[2]
yaw_localization = euler_from_quaternion(self.localization.pose.pose.orientation.x,
self.localization.pose.pose.orientation.y,
self.localization.pose.pose.orientation.z,
self.localization.pose.pose.orientation.w)[2]
yaw_gps = euler_from_quaternion(
(msg.pose.pose.orientation.x, msg.pose.pose.orientation.y, msg.pose.pose.orientation.z,
msg.pose.pose.orientation.w))[2]
msg.pose.pose.orientation.x, msg.pose.pose.orientation.y, msg.pose.pose.orientation.z,
msg.pose.pose.orientation.w)[2]
delta_yaw = math.fabs(yaw_localization - yaw_gps)

if distance > self.tolerance_xy: # or delta_yaw > self.tolerance_yaw:
print (distance, delta_yaw)
pose = PoseWithCovarianceStamped()
pose.pose = msg.pose
pose.header.frame_id = "map"
pose.header.stamp = rospy.Time.now()
pose.header.stamp = self.get_clock().now().to_msg()
self.initialpose_pub.publish(pose)
self.last_correction = rospy.Time.now()
self.last_correction = self.get_clock().now()

def main(args=None):
rclpy.init(args=args)

node = GPSInitialpose()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()


if __name__ == '__main__':
rospy.init_node('gps_initialpose')
GPSInitialpose()
rospy.spin()
main()
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace road_marking_localization {
config.y_box = declare_parameter<double>("y_box", 2.0);
config.minimum_z = declare_parameter<double>("minimum_z", -0.02);
config.maximum_z = declare_parameter<double>("maximum_z", 0.02);
config.threshold = declare_parameter<int>("threshold", 160);
config.threshold = declare_parameter<int>("threshold", 180);
config.icp_max_iterations = declare_parameter<int>("icp_max_iterations", 5);
config.icp_RANSAC_outlier_rejection_threshold = declare_parameter<double>("icp_RANSAC_outlier_rejection_threshold", 0.0);
config.icp_RANSAC_iterations = declare_parameter<int>("icp_RANSAC_iterations", 0);
Expand Down Expand Up @@ -59,7 +59,7 @@ namespace road_marking_localization {
robotLocalizationSetPose = create_client<robot_localization::srv::SetPose>("/sensors/set_pose");

mapSubscriber = create_subscription<nav_msgs::msg::OccupancyGrid>("map", qos, std::bind(&RoadMarkingLocalizationNodelet::onMap, this, std::placeholders::_1));
positionEstimateSubscriber = create_subscription<geometry_msgs::msg::PoseWithCovarianceStamped>("initialpose", 1, std::bind(&RoadMarkingLocalizationNodelet::onEstimatedPosition, this, std::placeholders::_1));
positionEstimateSubscriber = create_subscription<geometry_msgs::msg::PoseWithCovarianceStamped>("/initialpose", 1, std::bind(&RoadMarkingLocalizationNodelet::onEstimatedPosition, this, std::placeholders::_1));

auto qos2 = rclcpp::QoS(2).get_rmw_qos_profile();
infraImageSubscriber.subscribe(this, "camera/infra1/image_rect_raw", "raw", qos2);
Expand Down Expand Up @@ -449,4 +449,4 @@ namespace road_marking_localization {
}
}

}
}

0 comments on commit 754640a

Please sign in to comment.