本文与相关代码由alyssa1024编写,感谢!
跟着小鱼的步伐,咱们前面已经让张三走到时尚前沿,追更上了世纪畅销小说艳娘传奇。
看到自己的作品流传愈广,拥趸愈多,李四甚感欣慰,愈发精益求精,立志为广大读者创造福利,第一件就是为略显单调的小说配上插图,让大家一睹艳娘传奇风姿。
还记得4.6节我们自定义的Novel.msg
接口嘛,早期发布小说时我们只使用了ROS2内置的std_msgs.msg
中的string
类型传递消息,并没用上
# 标准消息接口 字符串
string content
# 图像消息,调用sensor_msgs下的Image类型
sensor_msgs/Image image
如今时机成熟,是时候让我们自定义的消息类型发光发热了,其中的content就是我们小说的主体内容,而image自然就是要添加的插图了
插图哪里来呢?我们再次回忆2.4节的第三个小游戏,当时我们开启了cam2image
这个节点,打开了潘多拉的照片流,诶,插图这不就来了嘛
原来一切都是心机鱼冥冥之中的铺垫~
修改头文件
在illage_li
的li4
节点中引入以下头文件
#导入系统内置的图片消息类型
from sensor_msgs.msg import Image
#从村庄接口话题消息类中导入小说消息类型
from village_interfaces.msg import Novel
修改li4类
将发布小说的接口类型更换为导入的Novel
类型
self.write = self.create_publisher(Novel,"sexy_girl", 10)
添加获取图片的订阅端,第一个参数为消息类型,第二个是话题名称,第三个是处理图片的回调函数,第四个是消息队列的长度
#声明一个空的图像
self.image = Image()
# 开始获取图片
self.create_subscription(Novel,"image",self.recv_image_callback,10)
添加接收图片的回调函数
def recv_image_callback(self,image):
self.image = image
最后修改timer_callback函数
msg = Novel()
msg.content = '第%d回:潋滟湖 %d 次偶遇胡艳娘' % (self.i,self.i)
msg.image = self.image
self.write.publish(msg) #将小说内容发布出去
self.get_logger().info('李四:我发布了艳娘传奇:"%s"' % msg.content) #打印一下发布的数据,供我们看
self.get_logger().info('李四:并且为艳娘传奇配上了插图,长:"%d",宽:%d' % (msg.image.height,msg.image.width)) #打印一下发布的插图尺寸,供我们看
在vscode中,使用Ctrl+~
打开终端,在town_ws
目录下输入
colcon build --packages-select village_li
Ctrl+Alt+T
打开新终端,先启动相机发布图片的节点
ros2 run image_tools cam2image
在原终端town_ws
目录下输入
. install/setup.bash
ros2 run village_li li4_node
技术交流&&问题求助:
QQ交流群:139707339
微信公众号:鱼香ROS
小鱼微信:AiIotRobot