Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions 240047/turtle_sim/src/build/.built_by
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
colcon
Empty file.
Empty file.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import rclpy
from rclpy.node import Node
from turtle_pub.srv import DrawCircle # Custom service


class DrawCircleClient(Node):
def __init__(self):
super().__init__('draw_circle_client')
# Create client for DrawCircle service
self.client = self.create_client(DrawCircle, 'draw_circle')
while not self.client.wait_for_service(timeout_sec=1.0):
self.get_logger().info('⏳ Waiting for service...')

def send_request(self, x, y, radius):
# Prepare request with x, y, radius
req = DrawCircle.Request()
req.x = x
req.y = y
req.radius = radius

# Call service asynchronously
future = self.client.call_async(req)
rclpy.spin_until_future_complete(self, future)
return future.result()


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

client = DrawCircleClient()

# Example request: teleport to (2, 3) and draw a circle of radius 1.0
resp = client.send_request(2.0, 3.0, 1.0)

if resp.success:
client.get_logger().info('✅ Circle drawn successfully!')
else:
client.get_logger().info('❌ Failed to draw circle')

rclpy.shutdown()


if __name__ == '__main__':
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
from turtlesim.srv import TeleportAbsolute
from turtle_pub.srv import DrawCircle
import math


class DrawCircleServer(Node):
def __init__(self):
super().__init__('draw_circle_server')

# Create service
self.srv = self.create_service(DrawCircle, 'draw_circle', self.draw_circle_callback)

# Publisher for velocity commands
self.publisher = self.create_publisher(Twist, 'turtle1/cmd_vel', 10)

# Client for teleportation
self.teleport_client = self.create_client(TeleportAbsolute, 'turtle1/teleport_absolute')

# Wait until the teleport service is available
while not self.teleport_client.wait_for_service(timeout_sec=1.0):
self.get_logger().info('⏳ Waiting for /turtle1/teleport_absolute service...')

self.get_logger().info('✅ DrawCircle service ready!')

def draw_circle_callback(self, request, response):
self.get_logger().info(f'Received: x={request.x}, y={request.y}, r={request.radius}')

# ---- Step 1: Teleport the turtle ----
teleport_req = TeleportAbsolute.Request()
teleport_req.x = float(request.x)
teleport_req.y = float(request.y)
teleport_req.theta = 0.0 # start facing right

future = self.teleport_client.call_async(teleport_req)
rclpy.spin_until_future_complete(self, future)

if future.result() is None:
self.get_logger().error('❌ Teleport service call failed!')
response.success = False
return response

self.get_logger().info('🐢 Teleported turtle successfully!')

# ---- Step 2: Draw a circle ----
twist = Twist()

# Move forward briefly (to offset from teleport point)
twist.linear.x = 1.0
twist.angular.z = 0.0
start_time = self.get_clock().now().seconds_nanoseconds()[0]
while self.get_clock().now().seconds_nanoseconds()[0] - start_time < request.radius:
self.publisher.publish(twist)

# Rotate with forward motion (circle)
twist.linear.x = 1.0
twist.angular.z = 1.0
start_time = self.get_clock().now().seconds_nanoseconds()[0]
duration = 2 * math.pi * request.radius
while self.get_clock().now().seconds_nanoseconds()[0] - start_time < duration:
self.publisher.publish(twist)

# Stop
twist.linear.x = 0.0
twist.angular.z = 0.0
self.publisher.publish(twist)

# Response
response.success = True
self.get_logger().info('✅ Finished drawing circle!')
return response


def main(args=None):
rclpy.init(args=args)
node = DrawCircleServer()
rclpy.spin(node)
rclpy.shutdown()


if __name__ == '__main__':
main()
1 change: 1 addition & 0 deletions 240047/turtle_sim/src/build/turtle_pub/colcon_build.rc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
0
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# generated from colcon_core/shell/template/command_prefix.sh.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
AMENT_PREFIX_PATH=/home/adithya/turtle_sim/src/install/turtle_pub:/home/adithya/turtle_sim/install/turtle_pub:/opt/ros/humble
COLCON=1
COLCON_PREFIX_PATH=/home/adithya/turtle_sim/src/install:/home/adithya/turtle_sim/install
COLORTERM=truecolor
DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus
DESKTOP_SESSION=ubuntu
DISPLAY=:0
GDMSESSION=ubuntu
GNOME_DESKTOP_SESSION_ID=this-is-deprecated
GNOME_SETUP_DISPLAY=:1
GNOME_SHELL_SESSION_MODE=ubuntu
GNOME_TERMINAL_SCREEN=/org/gnome/Terminal/screen/e5129de6_3122_48bf_9b1e_e99924ac10da
GNOME_TERMINAL_SERVICE=:1.272
GTK_MODULES=gail:atk-bridge
HOME=/home/adithya
IM_CONFIG_PHASE=1
LANG=en_US.UTF-8
LANGUAGE=en_IN:en
LC_ALL=en_US.UTF-8
LD_LIBRARY_PATH=/opt/ros/humble/opt/rviz_ogre_vendor/lib:/opt/ros/humble/lib/x86_64-linux-gnu:/opt/ros/humble/lib
LESSCLOSE=/usr/bin/lesspipe %s %s
LESSOPEN=| /usr/bin/lesspipe %s
LOGNAME=adithya
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
OLDPWD=/home/adithya/turtle_sim
PATH=/opt/ros/humble/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/snap/bin
PWD=/home/adithya/turtle_sim/src/build/turtle_pub
PYTHONPATH=/home/adithya/turtle_sim/src/build/turtle_pub:/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages:/home/adithya/turtle_sim/build/turtle_pub:/home/adithya/turtle_sim/install/turtle_pub/lib/python3.10/site-packages:/opt/ros/humble/lib/python3.10/site-packages:/opt/ros/humble/local/lib/python3.10/dist-packages
QT_ACCESSIBILITY=1
QT_IM_MODULE=ibus
ROS_DISTRO=humble
ROS_LOCALHOST_ONLY=0
ROS_PYTHON_VERSION=3
ROS_VERSION=2
SESSION_MANAGER=local/adithya-ASUS:@/tmp/.ICE-unix/1420,unix/adithya-ASUS:/tmp/.ICE-unix/1420
SHELL=/bin/bash
SHLVL=1
SSH_AGENT_LAUNCHER=gnome-keyring
SSH_AUTH_SOCK=/run/user/1000/keyring/ssh
SYSTEMD_EXEC_PID=7119
TERM=xterm-256color
USER=adithya
USERNAME=adithya
VTE_VERSION=6800
WAYLAND_DISPLAY=wayland-0
XAUTHORITY=/run/user/1000/.mutter-Xwaylandauth.HZMNC3
XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg
XDG_CURRENT_DESKTOP=ubuntu:GNOME
XDG_DATA_DIRS=/usr/share/ubuntu:/usr/local/share/:/usr/share/:/var/lib/snapd/desktop
XDG_MENU_PREFIX=gnome-
XDG_RUNTIME_DIR=/run/user/1000
XDG_SESSION_CLASS=user
XDG_SESSION_DESKTOP=ubuntu
XDG_SESSION_TYPE=wayland
XMODIFIERS=@im=ibus
_=/usr/bin/colcon
17 changes: 17 additions & 0 deletions 240047/turtle_sim/src/build/turtle_pub/install.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub/draw_circle_server.py
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub/__init__.py
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub/draw_circle_client.py
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub/__pycache__/draw_circle_server.cpython-310.pyc
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub/__pycache__/__init__.cpython-310.pyc
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub/__pycache__/draw_circle_client.cpython-310.pyc
/home/adithya/turtle_sim/src/install/turtle_pub/share/ament_index/resource_index/packages/turtle_pub
/home/adithya/turtle_sim/src/install/turtle_pub/share/turtle_pub/package.xml
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub-0.0.0-py3.10.egg-info/dependency_links.txt
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub-0.0.0-py3.10.egg-info/zip-safe
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub-0.0.0-py3.10.egg-info/top_level.txt
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub-0.0.0-py3.10.egg-info/SOURCES.txt
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub-0.0.0-py3.10.egg-info/PKG-INFO
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub-0.0.0-py3.10.egg-info/entry_points.txt
/home/adithya/turtle_sim/src/install/turtle_pub/lib/python3.10/site-packages/turtle_pub-0.0.0-py3.10.egg-info/requires.txt
/home/adithya/turtle_sim/src/install/turtle_pub/lib/turtle_pub/draw_circle_client
/home/adithya/turtle_sim/src/install/turtle_pub/lib/turtle_pub/draw_circle_server
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
import sys
if sys.prefix == '/usr':
sys.real_prefix = sys.prefix
sys.prefix = sys.exec_prefix = '/home/adithya/turtle_sim/src/install/turtle_pub'
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Metadata-Version: 2.1
Name: turtle-pub
Version: 0.0.0
Summary: TODO: Package description
Home-page: UNKNOWN
Maintainer: adithya
Maintainer-email: [email protected]
License: TODO: License declaration
Platform: UNKNOWN

UNKNOWN

Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package.xml
setup.cfg
setup.py
../build/turtle_pub/turtle_pub.egg-info/PKG-INFO
../build/turtle_pub/turtle_pub.egg-info/SOURCES.txt
../build/turtle_pub/turtle_pub.egg-info/dependency_links.txt
../build/turtle_pub/turtle_pub.egg-info/entry_points.txt
../build/turtle_pub/turtle_pub.egg-info/requires.txt
../build/turtle_pub/turtle_pub.egg-info/top_level.txt
../build/turtle_pub/turtle_pub.egg-info/zip-safe
resource/turtle_pub
test/test_copyright.py
test/test_flake8.py
test/test_pep257.py
turtle_pub/__init__.py
turtle_pub/draw_circle_client.py
turtle_pub/draw_circle_server.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
[console_scripts]
draw_circle_client = turtle_pub.draw_circle_client:main
draw_circle_server = turtle_pub.draw_circle_server:main

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
setuptools
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
turtle_pub
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@

1 change: 1 addition & 0 deletions 240047/turtle_sim/src/install/.colcon_install_layout
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
isolated
Empty file.
Loading