AirSim Image data processing in Simulink

6 views (last 30 days)
deelaka dheeraratne
deelaka dheeraratne on 28 Feb 2020
Commented: Akash K on 29 Jul 2020
Hi,
I’m trying to do an autonomous landing exercise using Airsim and Simulink (connected via a ROS network). I have set up the environment and have managed to get image data to MATLAB using a script. However, when I do this in MATLAB, I do get an image with colours inverted. (orange goes to blue etc which is not an issue for me right now). When I try to do it in Simulink using ROS subscriber, Read Image and Video Viewer blocks the image turns out to be black. I’m looking at an image of 240H x 320W and the image topic does give out 240x320x3=230400 to match the RGB image. When I took the data directly from the subscriber block in Simulink only 128 data points are given. I need to convert the image given by Airsim to a HxWx3 array so it can be processed by my target detecting algorithm. Has anyone come across this issue? Or is there a better way to do it? Please help
This is the Python API used to get the image:
import setup_path
import airsim
import rospy
# ROS Image message
from sensor_msgs.msg import Image
def airpub():
pub = rospy.Publisher("airsim/image_raw", Image, queue_size=1)
rospy.init_node('image_raw', anonymous=True)
rate = rospy.Rate(10) # 10hz
# connect to the AirSim simulator
client = airsim.MultirotorClient()
client.confirmConnection()
while not rospy.is_shutdown()
responses = client.simGetImages([
airsim.ImageRequest("0", airsim.ImageType.Scene,False,False)]) #scene vision image in uncompressed RGB array
response = responses[0]
for response in responses:
img_rgb_string = response.image_data_uint8
# Populate image message
msg=Image()
msg.header.stamp = rospy.Time.now()
msg.header.frame_id = "frameId"
msg.encoding = "rgb8"
msg.height = 240 # resolution should match values in settings.json
msg.width = 320
msg.data = img_rgb_string
msg.is_bigendian = 0
msg.step = msg.width * 1
# log time and size of published image
rospy.loginfo(len(response.image_data_uint8))
# publish image message
pub.publish(msg)
# sleep until next cycle
rate.sleep()
if __name__ == '__main__':
try:
airpub()
except rospy.ROSInterruptException:
pass
  1 Comment
Akash K
Akash K on 29 Jul 2020
Try using reshape(H, W, 3, 'uint8') function foe a 3 channel RGB array

Sign in to comment.

Answers (0)

Categories

Find more on Publishers and Subscribers in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!