Skip to content
Snippets Groups Projects
Commit 0db5c095 authored by Emil Harlan's avatar Emil Harlan
Browse files

a

parent e6fc1eca
No related branches found
No related tags found
No related merge requests found
import asyncio
import math
import numpy as np
import rclpy import rclpy
from nav_msgs.msg import Odometry
from rclpy.node import Node from rclpy.node import Node
from nav_msgs.msg import Odometry
import math
import numpy as np
import robomaster import robomaster
from robomaster import robot from robomaster import robot
class OdometryPublisher(Node): class OdometryPublisher(Node):
def __init__(self): def __init__(self):
super().__init__('odometry_publisher') super().__init__('odometry_publisher')
self.publisher_ = self.create_publisher(Odometry, 'odometry', 10) self.publisher_ = self.create_publisher(Odometry, 'odometry', 10)
ep_robot = robot.Robot()
ep_robot.initialize(conn_type="rndis")
ep_chassis = ep_robot.chassis
ep_chassis.sub_position(freq=10, callback=self.sub_position_handler)
self.x = 0 self.x = 0
self.y = 0 self.y = 0
self.z = 0 self.z = 0
def quaternion_from_euler(self, ai, aj, ak): def sub_position_handler(self, position_info):
ai /= 2.0 self.x, self.y, self.z = position_info
aj /= 2.0 self.publish_odometry()
ak /= 2.0 print("ok")
ci = math.cos(ai)
si = math.sin(ai)
cj = math.cos(aj)
sj = math.sin(aj)
ck = math.cos(ak)
sk = math.sin(ak)
cc = ci * ck
cs = ci * sk
sc = si * ck
ss = si * sk
q = np.empty((4,))
q[0] = cj * sc - sj * cs
q[1] = cj * ss + sj * cc
q[2] = cj * cs - sj * sc
q[3] = cj * cc + sj * ss
return q
def publish_odometry(self): def publish_odometry(self):
print("publishing odometry") print("ja")
q = self.quaternion_from_euler(0, 0, -self.z * math.pi / 180) q = self.quaternion_from_euler(0, 0, -self.z* math.pi/180)
msg = Odometry() msg = Odometry()
msg.header.stamp = self.get_clock().now().to_msg() msg.header.stamp = self.get_clock().now().to_msg()
msg.pose.pose.position.x = self.x msg.pose.pose.position.x = self.x
...@@ -54,27 +38,36 @@ class OdometryPublisher(Node): ...@@ -54,27 +38,36 @@ class OdometryPublisher(Node):
msg.pose.pose.orientation.w = 0 msg.pose.pose.orientation.w = 0
self.publisher_.publish(msg) self.publisher_.publish(msg)
async def sub_position_handler(self, position_info): def quaternion_from_euler(self, ai, aj, ak):
self.x = position_info.x ai /= 2.0
self.y = position_info.y aj /= 2.0
self.z = position_info.z ak /= 2.0
print("chassis position: x:{0}, y:{1}, z:{2}".format(self.x, self.y, self.z)) ci = math.cos(ai)
self.publish_odometry() si = math.sin(ai)
cj = math.cos(aj)
sj = math.sin(aj)
ck = math.cos(ak)
sk = math.sin(ak)
cc = ci*ck
cs = ci*sk
sc = si*ck
ss = si*sk
async def start(self): q = np.empty((4, ))
ep_robot = robot.Robot() q[0] = cj*sc - sj*cs
ep_robot.initialize(conn_type="rndis") q[1] = cj*ss + sj*cc
ep_chassis = ep_robot.chassis q[2] = cj*cs - sj*sc
await ep_chassis.sub_position(freq=10, callback=self.sub_position_handler) q[3] = cj*cc + sj*ss
return q
def main(args=None): def main(args=None):
rclpy.init(args=args) rclpy.init(args=args)
node = OdometryPublisher() node = OdometryPublisher()
asyncio.run(node.start()) rclpy.spin(node)
node.destroy_node() node.destroy_node()
rclpy.shutdown() rclpy.shutdown()
if __name__ == '__main__': if __name__ == '__main__':
main() main()
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment