Manchester Centre for Robotics & AI ROS Nodes, Services and Robotic Implementation

Manchester Centre for Robotics & AI
ROS Nodes, Services and Robotic Implementation
Problem Statement
Consider a differential drive robot with wheel radius ∈ (0, ∞) and distance between
wheels ∈ (0, ∞). Consider that each wheel can be independently controlled with linear
velocity signals
( ),
( ) ∈ [ 0.1, 01] for the left and right wheels respectively.
The wheels are designed in such a way that when
( ) =
( ) > 0, the robot moves
towards its x axis. The sampling time of the robot wheel controllers is = 0.01.
Figure 1 shows the mechanical arrangement for a simple differential drive robot. All
units are in SI base, i.e. seconds, meters, radians, etc.
Package, Node Naming, and Parameters
The naming used for the robot must be the one assigned to you adjusted as follows.
For example, suppose that the name assigned to you was RobotName.
robot_prefix = robot_name
package_name = robot_name_controller
node_name = robot_name_control_node
In addition, notice that and are assigned to you in your spreadsheet row.
Figure 1 – Schematic of an example d

💡 Buy the answer for only $12 Get it now →

ifferential drive robot
2 | P a g e
Assessment
This coursework is worth 25% of the total unit marks and it is therefore expected that it
will take students up to 25 hours to complete.
Create an ament_python package called package_name containing a node called
node_name that does the task described below. For your own testing, you might want
to also implement a pairing robot node.
1. Turn on the robot by using its robot_prefixon_off service. Note that the
robot takes an unspecified amount of seconds to turn on, hence you must wait for
the service to return successfully before sending/receiving valid information
to/from the robot.
2. Subscribe to the robot_prefixgetpose topic which uses
geometry_msgs/msg/PoseStamped messages, which holds the pose of the
robot. It contains the current x y position and z axis orientation about the
world-reference frame using two fields.
Namely, pose.position,
has the and positions with respect to the world-reference frame, with = 0.
Furthermore, the field pose.orientation is the quaternion representing its
orientation,
where = cos (

💡 Buy the answer for only $12 Get it now →