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

Adding Back TCP Handler to ROS2 #824

Closed
wants to merge 37 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
fcee79a
Added TCP socket
tsender Aug 9, 2022
c8710fe
Updates to launch file and logger
tsender Aug 9, 2022
8c4074a
Added TCP, fixed bugs, optimized large array processing
tsender Oct 18, 2022
441cea9
Optimized large binary array publishing
tsender Oct 21, 2022
17252e5
Fixed linting issue
tsender Oct 21, 2022
59958f3
Removed unnecessary debug comments
tsender Oct 21, 2022
f0d0b6e
Fixed rosbridge_tcp and updated tcp_handler to match ros1 version
tsender Nov 12, 2022
2bcbee3
Cleaned up some comments
tsender Nov 12, 2022
663c946
Merge branch 'ros2' of github.com:tsender/rosbridge_suite into ros2
tsender Nov 13, 2022
5278d23
Removed a few unnecesary lines, updated shebang
tsender Nov 13, 2022
a034f92
Added back TCP handler
tsender Nov 13, 2022
c376306
Added new line to pass linter requirements
tsender Nov 13, 2022
e6905d6
Added blank lines to end of other files
tsender Nov 13, 2022
07423aa
Switching to threading tcp server
tsender Nov 19, 2022
8e77ec9
Trying to fix connection reset errors
tsender Nov 22, 2022
c9c8248
Added auto-reload rosbridge tcp on failure
tsender Nov 25, 2022
7f39f0a
Adding more exception catching to rosbridge_tcp
tsender Dec 7, 2022
cb77661
Added close socket call before retrying to reload TCP server
tsender Dec 8, 2022
5a1358a
Putting rclpy.spin in separate thread
tsender Dec 9, 2022
5e70579
Trying to catch broken pipe and connection reset error
tsender Dec 10, 2022
f70ebb4
Still trying to debug connection reset problem
tsender Dec 12, 2022
c860885
Added debug logging to srv handle_request()
tsender Dec 12, 2022
6a80230
Added more debug stuff
tsender Dec 13, 2022
e7e708c
Minor changes
tsender Dec 17, 2022
6ad6893
Removed temporary advertise service debug log
tsender Jan 1, 2023
21f47bf
Adding back internal.subscribers qos code for foxy
tsender Jan 1, 2023
fa654ed
Trying to auto terminate client request after broken pipe
tsender Feb 3, 2023
94fd8fc
Updated interface to match latest (but didn't implement anything)
JKaniarz Apr 18, 2023
b55105f
Merge pull request #1 from JKaniarz/tcp_handler
tsender Apr 21, 2023
f08a704
Merge branch 'RobotWebTools:ros2' into ros2
tsender Apr 21, 2023
4a6b60e
Requiring bson_only_mode to be true for TCp handler to operate, chang…
tsender Apr 21, 2023
ab047a3
Cleanup
tsender Apr 21, 2023
40fac79
Fixed merge conflict with ros2 branch
tsender Apr 21, 2023
06827d1
Merge branch 'RobotWebTools:ros2' into foxy
tsender Apr 21, 2023
ddd5fdf
Updated repo, minor changes
tsender Apr 21, 2023
9e33c51
Fixed merge conflict with latest version
tsender Apr 21, 2023
0886f32
Fixing default arg values in TCP launch file
tsender Oct 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from rosbridge_library.internal import message_conversion
from rosbridge_library.internal.ros_loader import get_service_class


class AdvertisedServiceHandler:

id_counter = 1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,9 @@ def unadvertise_service(self, message):
# unregister service in ROS
if service_name in self.protocol.external_service_list.keys():
self.protocol.external_service_list[service_name].graceful_shutdown()
self.protocol.external_service_list[service_name].service_handle.shutdown(
"Unadvertise request."
)
# self.protocol.external_service_list[service_name].service_handle.shutdown(
# "Unadvertise request."
# )
del self.protocol.external_service_list[service_name]
self.protocol.log("info", "Unadvertised service %s." % service_name)
else:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.

from multiprocessing.spawn import is_forking
from threading import Timer

from rclpy.duration import Duration
Expand Down
8 changes: 5 additions & 3 deletions rosbridge_library/src/rosbridge_library/protocol.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
# POSSIBILITY OF SUCH DAMAGE.

import time
import traceback
import datetime

from rosbridge_library.capabilities.fragmentation import Fragmentation
from rosbridge_library.util import bson, json
Expand Down Expand Up @@ -134,7 +136,7 @@ def incoming(self, message_string=""):
# that receives exactly one full BSON message.
# This will then be passed to self.deserialize and shouldn't cause any
# exceptions because of fragmented messages (broken or invalid messages might still be sent tough)
self.log("error", "Exception in deserialization of BSON")
self.log("error", f"Exception in deserialization of BSON: {traceback.format_exc()}")

else:
# TODO: handling of partial/multiple/broken json data in incoming buffer
Expand Down Expand Up @@ -387,9 +389,9 @@ def log(self, level, message, lid=None):
"""
stdout_formatted_msg = None
if lid is not None:
stdout_formatted_msg = f"[Client {self.client_id}] [id: {lid}] {message}"
stdout_formatted_msg = f"[{datetime.datetime.now()}] [Client {self.client_id}] [id: {lid}] {message}"
else:
stdout_formatted_msg = f"[Client {self.client_id}] {message}"
stdout_formatted_msg = f"[{datetime.datetime.now()}] [Client {self.client_id}] {message}"

if level == "error" or level == "err":
self.node_handle.get_logger().error(stdout_formatted_msg)
Expand Down
6 changes: 3 additions & 3 deletions rosbridge_server/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ ament_package()
install(PROGRAMS
scripts/rosbridge_websocket.py
scripts/rosbridge_websocket
scripts/rosbridge_tcp
DESTINATION lib/${PROJECT_NAME}
)

install(FILES
launch/rosbridge_websocket_launch.xml
DESTINATION share/${PROJECT_NAME}/launch
install(DIRECTORY launch
DESTINATION share/${PROJECT_NAME}
)

if(BUILD_TESTING)
Expand Down
45 changes: 45 additions & 0 deletions rosbridge_server/launch/rosbridge_tcp_launch.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<launch>
<arg name="port" default="9090" />
<arg name="host" default="" />

<arg name="incoming_buffer" default="65536" />
<arg name="socket_timeout" default="10" />
<arg name="retry_startup_delay" default="5.0" />

<arg name="fragment_timeout" default="600" />
<arg name="delay_between_messages" default="0" />
<arg name="max_message_size" default="None" />
<arg name="unregister_timeout" default="10.0" />

<arg name="call_services_in_new_thread" default="false" />

<arg name="topics_glob" default="" />
<arg name="services_glob" default="" />
<arg name="params_glob" default="" />
<arg name="bson_only_mode" default="true" />

<node name="rosbridge_tcp" pkg="rosbridge_server" exec="rosbridge_tcp" output="screen">
<param name="port" value="$(var port)"/>
<param name="host" value="$(var host)"/>
<param name="incoming_buffer" value="$(var incoming_buffer)"/>
<param name="socket_timeout" value="$(var socket_timeout)"/>
<param name="retry_startup_delay" value="$(var retry_startup_delay)"/>
<param name="fragment_timeout" value="$(var fragment_timeout)"/>
<param name="delay_between_messages" value="$(var delay_between_messages)"/>
<param name="max_message_size" value="$(var max_message_size)"/>
<param name="unregister_timeout" value="$(var unregister_timeout)"/>
<param name="call_services_in_new_thread" value="$(var call_services_in_new_thread)"/>

<param name="topics_glob" value="$(var topics_glob)"/>
<param name="services_glob" value="$(var services_glob)"/>
<param name="params_glob" value="$(var params_glob)"/>

<param name="bson_only_mode" value="$(var bson_only_mode)"/>
</node>

<node name="rosapi" pkg="rosapi" exec="rosapi_node">
<param name="topics_glob" value="$(var topics_glob)"/>
<param name="services_glob" value="$(var services_glob)"/>
<param name="params_glob" value="$(var params_glob)"/>
</node>
</launch>