• 欢迎访问GanAHE的小创元世纪,技术交流与资源分享,欢迎加入GanAHE的小创元世纪🤪 微信公众号:星辰换日
  • 电影、教程、软件等分享资源请在本站或微信公众号合作平台:【星辰换日】获取。
  • 首页展示个人参与或独立开发的产品,更多功能在建中......🙆🏼天王盖地虎
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏本站吧🥺
  • 注册采用有效的邮箱,有助于及时收到评论回复、最新资源以及活动通知哟~✔🥳
  • 目前在逐渐打通微信小程序与网站之前的间隔~💻🏢

ROS学习-将官方turtlesim的turtle乌龟全部列出

Linux GanAHE 2个月前 (03-19) 7次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

一、创建功能包

Linux下,Ros的工作空间路径为:~/src/catkin_ws,执行如下指令:

cd ~/catkin_ws/src
catkin_create_pkg myServiceSpawn roscpp rospy std_msgs geometry_msgs turtlesim

创建功能包myServiceSpawn。

注意:可以自行命名功能包以及下文的文件名,执行命令后要对应上即可。

二、创建Clint请求

在功能包myServiceSpawn下,新建scripts文件夹用来存储Python脚本,随后在该目录下创建turtle_spawn.py文件

Python实现:

#!usr/bin/env python
#-*- coding: utf-8 -*-

import sys
import rospy
import random
from turtlesim.srv import Spawn

def turtle_spawn(x,y,name):
    rospy.init_node("turtle_spawn")

    rospy.wait_for_service("/spawn")
    try:
        add_turtle = rospy.ServiceProxy("/spawn",Spawn)
        respone = add_turtle(x,y,0.0,name)

        return respone.name

    except rospy.ServiceException as e:
        rospy.logerr("!ERROR! "+e.__str__())

if __name__=="__main__":
    x = 0.2
    y = 0.2
    for i in range(2,120):
        rospy.loginfo("Spawn successlly! the name is %s",turtle_spawn(x,y,"turtle"+str(i)))
        x += 1
        if x > 10:
            y += 1
            x = 1
        if y > 20:
            break

三、执行

首先启动master节点:

roscore

随后启动turtlesim_node:

rosrun turtlesim turtlesim_node

执行python脚本:

python ~/catkin_ws/src/myServiceSpawn/scripts/turtle_spawn.py 

file

四、补充

采用C++也可以实现请求增加新乌龟,在功能包中的src目录下创建turtle_spawn.cpp文件,代码如下:

#include <ros/ros.h>
#include <turtlesim/Spawn.h>

int main(int argc,char **argv)
{
    ros::init(argc,argv,"turtle_spawn");

    ros::NodeHandle node;

    ros::service::waitForService("/spawn");
    ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");

    //init the request
    turtlesim::Spawn srv;
    srv.request.x = 2.0;
    srv.request.y = 2.0;
    srv.request.name = "turtle5";

    ROS_INFO("Call service to spawn turtle:[x:%0.6f, y:%0.6f, name:%s]",srv.request.x,srv.request.y,srv.request.name.c_str());

    add_turtle.call(srv);

    ROS_INFO("Spawn successfully! you have named it as %s",srv.response.name.c_str());

    return 0;

};

在功能包中的CMakeLists.txt添加:

add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES})

回到catkin_ws工作空间编译后执行:

cd ~/catkin_ws
catkin_make

rosrun myServiceSpawn turtle_spawn

GanAHE 的小创元世纪, 版权所有丨如未注明 , 均为原创丨本网站采用@BY-NC-SA协议进行授权
转载请注明原文链接:ROS学习-将官方turtlesim的turtle乌龟全部列出
喜欢 (0)
[WeChat]
分享 (0)
关于作者:
网站的建设与维护者、DGZC的守护者
0 0 评分
都看完了,打个分儿叭~
通知
提醒
0 评论
内部反馈
显示所有评论
0
有什么想法吗,快来留下你的评论吧!x
()
x