ROS/Gazebo练习2: stack light simulation

2023-05-16

light_description/urdf/light.xacro

<?xml version="1.0"?>
<!-- light -->
<robot name="light" xmlns:xacro="http://www.ros.org/wiki/xacro">

  <!-- Import Rviz colors -->
  <xacro:include filename="$(find robot_description)/urdf/materials.xacro" />

  <!-- Constants for robot dimensions -->
  <xacro:property name="radius_BL" value="0.02" />
  <xacro:property name="radius_G" value="0.02" /> 
  <xacro:property name="radius_Y" value="0.02" /> 
  <xacro:property name="radius_R" value="0.02" /> 
  <xacro:property name="radius_TP" value="0.02" /> 
 
  <xacro:property name="length_BL" value="0.08" />
  <xacro:property name="length_G" value="0.04" /> 
  <xacro:property name="length_Y" value="0.04" /> 
  <xacro:property name="length_R" value="0.04" /> 
  <xacro:property name="length_TP" value="0.01" /> 
 
  <!-- Used for fixing robot to Gazebo 'base_link' -->
  <link name="world"/>

  <joint name="base_link_to_world_joint" type="fixed">
    <parent link="world"/>
    <child link="base_link"/>
  </joint>
  
  <!-- LINK_BASE -->
  <link name="base_link">
    <collision>
      <origin xyz="0 0 ${length_BL/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_BL}" radius="${radius_BL}"/>
      </geometry>
    </collision>

    <visual>
      <origin xyz="0 0 ${length_BL/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_BL}" radius="${radius_BL}"/>
      </geometry>
      <material name="white"/>
    </visual>

    <inertial>
       <mass value="0.121"/>
        <origin xyz="1.08E-04 -1.03E-03 2.08E-02" rpy="0 0 0"/>
        <inertia ixx="3.20E-05" ixy="-9.45E-08" ixz="2.61E-07"
          iyy="4.14E-05" iyz="3.88E-07"
          izz="4.29E-05"/>
    </inertial>
  </link>

  <!-- JOINT_1 -->
  <joint name="joint_1" type="fixed">
    <parent link="base_link"/>
    <child link="link_g"/>
    <origin xyz="0 0 ${length_BL}" rpy="0 0 0"/>
  </joint>

  <!-- LINK_GREEN -->
  <link name="link_g">
    <collision>
      <origin xyz="0 0 ${length_G/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_G}" radius="${radius_G}"/>
      </geometry>
    </collision>

    <visual>
      <origin xyz="0 0 ${length_G/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_G}" radius="${radius_G}"/>
      </geometry>
      <material name="green"/>
    </visual>

    <inertial>
       <mass value="0.121"/>
        <origin xyz="1.08E-04 -1.03E-03 2.08E-02" rpy="0 0 0"/>
        <inertia ixx="3.20E-05" ixy="-9.45E-08" ixz="2.61E-07"
          iyy="4.14E-05" iyz="3.88E-07"
          izz="4.29E-05"/>
    </inertial>
  </link>

  <!-- JOINT_2 -->
  <joint name="joint_2" type="fixed">
    <parent link="link_g"/>
    <child link="link_y"/>
    <origin xyz="0 0 ${length_G}" rpy="0 0 0"/>
  </joint>

  <!-- LINK_Y -->
  <link name="link_y">
    <collision>
      <origin xyz="0 0 ${length_Y/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_Y}" radius="${radius_Y}"/>
      </geometry>
    </collision>

    <visual>
      <origin xyz="0 0 ${length_Y/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_Y}" radius="${radius_Y}"/>
      </geometry>
      <material name="orange"/>
    </visual>

    <inertial>
       <mass value="0.121"/>
        <origin xyz="1.08E-04 -1.03E-03 2.08E-02" rpy="0 0 0"/>
        <inertia ixx="3.20E-05" ixy="-9.45E-08" ixz="2.61E-07"
          iyy="4.14E-05" iyz="3.88E-07"
          izz="4.29E-05"/>
    </inertial>
  </link>

  <!-- JOINT_3 -->
  <joint name="joint_3" type="fixed">
    <parent link="link_y"/>
    <child link="link_r"/>
    <origin xyz="0 0 ${length_Y}" rpy="0 0 0"/>
  </joint>

  <!-- LINK_R -->
  <link name="link_r">
    <collision>
      <origin xyz="0 0 ${length_R/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_R}" radius="${radius_R}"/>
      </geometry>
    </collision>

    <visual>
      <origin xyz="0 0 ${length_R/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_R}" radius="${radius_R}"/>
      </geometry>
      <material name="red"/>
    </visual>

    <inertial>
       <mass value="0.121"/>
        <origin xyz="1.08E-04 -1.03E-03 2.08E-02" rpy="0 0 0"/>
        <inertia ixx="3.20E-05" ixy="-9.45E-08" ixz="2.61E-07"
          iyy="4.14E-05" iyz="3.88E-07"
          izz="4.29E-05"/>
    </inertial>
  </link>

  <!-- JOINT_4 -->
  <joint name="joint_4" type="fixed">
    <parent link="link_r"/>
    <child link="link_top"/>
    <origin xyz="0 0 ${length_R}" rpy="0 0 0"/>
  </joint>

  <!-- LINK_TOP -->
  <link name="link_top">
    <collision>
      <origin xyz="0 0 ${length_TP/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_TP}" radius="${radius_TP}"/>
      </geometry>
    </collision>

    <visual>
      <origin xyz="0 0 ${length_TP/2}" rpy="0 0 0"/>
      <geometry>
	      <cylinder length="${length_TP}" radius="${radius_TP}"/>
      </geometry>
      <material name="white"/>
    </visual>

    <inertial>
       <mass value="0.121"/>
        <origin xyz="1.08E-04 -1.03E-03 2.08E-02" rpy="0 0 0"/>
        <inertia ixx="3.20E-05" ixy="-9.45E-08" ixz="2.61E-07"
          iyy="4.14E-05" iyz="3.88E-07"
          izz="4.29E-05"/>
    </inertial>
  </link>

  <!-- For gazebo simulation -->
    <!-- color for gazebo simulation-->
    <gazebo reference="base_link">
      <material>Gazebo/White</material>
    </gazebo>
    <gazebo reference="link_g">
      <material>Gazebo/Grey</material>
    </gazebo>
    <gazebo reference="link_y">
      <material>Gazebo/Grey</material>
    </gazebo>
    <gazebo reference="link_r">
      <material>Gazebo/Grey</material>
    </gazebo>
    <gazebo reference="link_top">
      <material>Gazebo/White</material>
    </gazebo> 

</robot>

light_command/stack_light_msgs

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(stack_light_msgs)

add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
  message_generation
  std_msgs
)

add_service_files(
  FILES
  light_srv.srv
)

generate_messages(
  DEPENDENCIES
  std_msgs
)

catkin_package(
 CATKIN_DEPENDS
 message_runtime
)

package.xml

<?xml version="1.0"?>
<package format="2">
  <name>stack_light_msgs</name>
  <version>0.0.0</version>
  <description>The stack_light_msgs package</description>

  <maintainer email="wuzepei@todo.todo">wuzepei</maintainer>

  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>message_generation</build_depend>
  <build_depend>std_msgs</build_depend>

  <build_export_depend>std_msgs</build_export_depend>

  <exec_depend>std_msgs</exec_depend>
  <exec_depend>message_runtime</exec_depend>

  <export></export>
</package>

/srv/light_srv.srv

uint8 red
uint8 yellow
uint8 green
---
uint8 red
uint8 yellow
uint8 green

light_command/stack_light

CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2)
project(stack_light)

add_compile_options(-std=c++11)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  stack_light_msgs
)

catkin_package(
  CATKIN_DEPENDS 
  message_runtime
  stack_light_msgs 
)

include_directories(
  ${catkin_INCLUDE_DIRS}
)

add_executable(stacklight
  src/LightNode.cpp
)

target_link_libraries(stacklight ${catkin_LIBRARIES})

add_dependencies(stacklight ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

package.xml

<?xml version="1.0"?>
<package format="2">
  <name>stack_light</name>
  <version>0.0.0</version>
  <description>The stack_light package</description>

  <maintainer email="wuzepei@todo.todo">wuzepei</maintainer>

  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>

  <build_depend>roscpp</build_depend>
  <build_depend>rospy</build_depend>
  <build_depend>std_msgs</build_depend>
  <build_depend>message_generation</build_depend>
  <build_depend>stack_light_msgs</build_depend>

  <build_export_depend>roscpp</build_export_depend>
  <build_export_depend>rospy</build_export_depend>
  <build_export_depend>std_msgs</build_export_depend>

  <exec_depend>roscpp</exec_depend>
  <exec_depend>rospy</exec_depend>
  <exec_depend>std_msgs</exec_depend>
  <exec_depend>message_runtime</exec_depend>
  <exec_depend>stack_light_msgs</exec_depend>

  <export></export>
</package>

/src/LightNode.cpp

/**
 * stack_light Server
 */

#include <string>
#include "ros/ros.h"
#include <stack_light_msgs/light_srv.h>


// @param [in] &req.red        red light on
// @param [in] &req.yellow     yellow light on
// @param [in] &req.green      green light on

// @param [out]  &res.result   all lights result 
// @param [out]  &res.red      red light state
// @param [out]  &res.yellow   yellow light state
// @param [out]  &res.green    green light state


void lightOn(std::string color)
{
    ROS_INFO("%s light is ON",color.c_str());
    // TODO
}

void lightOff(std::string color)
{
    ROS_INFO("%s light is Off",color.c_str());
    // TODO
}

// service回调函数,输入参数req,输出参数res
bool colorJudgment(stack_light_msgs::light_srv::Request  &req,
         stack_light_msgs::light_srv::Response &res)
{
    // 将输入参数中的请求数据相加,结果放到应答变量中
    if(req.red == 0) 
    {
        lightOff("red");
        res.red = 0;
    }
    else
    {
        lightOn("red");
        res.red = 1;
    }

    if(req.yellow == 0)
    {
        lightOff("yellow");
        res.yellow = 0;
    }
    else
    {
        lightOn("yellow");
        res.yellow = 1;
    }

    if(req.green == 0)
    {
        lightOff("green");
        res.green = 0;
    }
    else
    {
        lightOn("green");
        res.green = 1;
    }
    
    return true;
}

int main(int argc, char **argv)
{
    // ROS节点初始化
    ros::init(argc, argv, "lightNode");

    // 创建节点句柄
    ros::NodeHandle n;

    // 创建一个名为add_two_ints的server,注册回调函数add()
    ros::ServiceServer service = n.advertiseService("light_srv", colorJudgment);

    // 循环等待回调函数
    ROS_INFO("Ready to add light_srv.");
    ros::spin();

    return 0;
}



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ROS/Gazebo练习2: stack light simulation 的相关文章

  • 扫描线算法 - 一维平面的实现

    问题很简单 平面上有一些给定的一维线 我们需要找到至少有一行的空间的总大小 让我用一个示例图像来讨论这个问题 这可能是一个案例 Or 这可能是一个案例或类似的东西 我知道这是一个基本问题扫线算法 https en wikipedia org
  • memcpy 溢出边界利用? (破坏堆栈)

    我试图弄清楚这是否会以某种方式溢出 void print address char p arp hw int i hw length size p OFFSET1 189 4 193 memcpy hw addr packet OFFSET
  • 为什么后续的 Rust 变量会递增堆栈指针而不是递减它?

    我发现很奇怪的是 当你在 Rust 中创建静态分配的变量时 它似乎随着堆栈指针的增加而增加 我知道情况并非如此 因为堆栈指针随着内存分配而减少 如果我在 C 中做同样的事情 我会看到堆栈指针随着我创建更多变量而减少 为什么会这样呢 Rust
  • java中的时间同步

    在 for 循环中 我通过检索和处理车辆信息来控制基于模拟步骤的交通模拟器 SUMO 为了确保我的程序 实时 模拟 1 个模拟步骤 1 秒 我想在处理阶段之后让我的程序休眠 直到下一个时间步骤开始 为了获得更好的结果 我根据最初采用的参考时
  • 堆栈里面有什么?

    如果我运行一个程序 就像 include
  • 种子设置:为什么输入不变后输出不同

    设置种子可确保再现性 并且在仿真建模中非常重要 考虑一个简单的模型f 有两个变量y1 and y2出于兴趣 这些变量的输出由随机过程决定 rbinom 和参数x1 and x2 两个感兴趣变量的输出彼此独立 现在假设我们想要将相应参数发生变
  • 有意的缓冲区溢出并不总是导致程序崩溃

    考虑以下最小 C 程序 案例编号1 include
  • 资源规格和代理跟踪

    我需要解决一个问题 但由于缺乏 Java 培训 我无法解决该问题 要编写什么代码来跟踪获取资源的代理 让我更好地解释一下 我有一系列房间 每个进入该结构的特工都会占用一个房间 并在整个住宿期间保留该房间 我想实时查看哪些房间被占用以及由哪个
  • 群体行为问题

    昨天我看到了克雷格雷诺兹的Boids http www red3d com cwr boids 随后我想尝试一下用 Java 实现一个简单的 2D 版本 我已经根据以下内容整理了一个相当基本的设置康拉德 帕克的笔记 http www ver
  • 在Java中,为什么Stack是一个具体类,而Queue是一个接口?

    Queue 的哪一个子类是 普通 队列 1 java util Stack 是 Java 1 0 的遗留类 它早于 Collections 框架很多年 坦率地说 它是一个例子horrible多方面的设计 一切都不是事情应有的样子 主要问题是
  • 如果堆栈在数字较低的地址处增长,为什么指针比较会颠倒这一点?

    由于堆栈向下增长 即朝着数值较小的内存地址增长 为什么 i lt j是真的 如果我错了 请纠正我 但我想这是 C 创建者 C 维护的 的设计决定 但我想知道为什么 同样奇怪的是 堆分配的对象pin位于比堆栈变量在数值上更高的内存地址 这也与
  • iOS 如何以编程方式检测顶视图控制器何时弹出?

    假设我有一个带有 2 个视图控制器的导航控制器堆栈 VC2 位于顶部 VC1 位于底部 我可以在 VC1 中包含一些代码来检测 VC2 刚刚从堆栈中弹出吗 由于我试图从 VC1 的代码中检测 VC2 的弹出 似乎类似视图将出现 or 查看是
  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12
  • 为什么灯光出现在对面?

    我正在尝试使用构建照明this https learnopengl com Lighting Basic Lighting教程 但是 灯光出现在人体物体的错误一侧 我不知道为什么 法线是按三角形创建的 三角形的顶点基本上具有相同的法线 gl
  • C 中的递归深度是否有任何硬连线限制

    正在讨论的程序尝试计算sum of first n natural numbers using recursion 我知道这可以使用一个简单的公式来完成n n 1 2但这里的想法是使用recursion 程序如下 include
  • 如何增加 Qt 中线程的堆栈大小 - QThread::setStackSize() 似乎不起作用?

    从问题来看 运行批量插入或替换 500 行时 SQLite 堆栈溢出 为什么 https stackoverflow com questions 22576958 sqlite stack overflow when running a b
  • NOP 雪橇如何工作?

    我找不到回答这个问题的好来源 我知道 nop sled 是一种用于规避缓冲区溢出攻击中堆栈随机化的技术 但我无法理解它是如何工作的 有什么简单的例子可以说明这种方法 128 字节 nop sled 等术语是什么意思 有些攻击包括使程序跳转到
  • ROS中spin和rate.sleep的区别

    我是 ROS 新手 正在尝试了解这个强大的工具 我很困惑spin and rate sleep功能 谁能帮助我了解这两个功能之间的区别以及何时使用每个功能 ros spin and ros spinOnce 负责处理通信事件 例如到达的消息
  • 为什么 Box2D 不应该使用像素作为单位?

    手册中说我应该使用小单位 0 1 10米 不鼓励使用像素作为测量单位 但是为什么 Box2D 比我使用小单位时工作得更好 并且具有更好的模拟效果呢 Box2D 是一个模拟框架 内部使用MKS 单位制 http en wikipedia or
  • 这个洗牌算法有什么问题吗?

    我一直在做一些休闲假期计算 我的迷你项目是模拟意大利游戏 tomboli 一个关键的组成部分是对以下过程的模拟 游戏由一名男子控制 他拿着一袋 90 个弹珠 编号为 1 到 90 他从袋中随机取出一颗弹珠 每次向玩家喊出弹珠编号 经过一番思

随机推荐

  • TCP连接建立

    TCP 一种面向来连接的 可靠的 基于字节流的传输层通信协议 面向连接 xff1a 数据在发送之前必须在两端建立连接 xff0c 方法就是我们熟知的三次握手连接 可靠传输 xff1a 通过多种机制来保证数据的正确传输 xff0c 比如序列号
  • UDP接收端收不到广播的消息问题排查

    网络调试助手可以互相发送 xff0c 而你的UDP广播代码却不行 你是广播 是不会被路由器转发的 但是在同一个交换机下 是可以收到广播的 还有就是 电脑的虚拟网卡会拦截广播操作 xff0c 因为你没有指定一个地址 xff0c 所以代码正确的
  • STM32带FIFO的DMA传输应用示例

    STM32系列芯片都内置DMA外设 xff0c 其中很多系列的DMA配备了FIFO 这里以STM32F429芯片及开发板为例 xff0c 演示一下带FIFO的DMA传输实现过程 大致情况是这样的 xff0c 我用TIMER1通道1的比较事件
  • 两种方式判断内存的大小端存储方式

    1 目的 xff1a 判断ubuntu操作系统的内存属于大端还是小端存储 2 源代码 两种方法判断大小端 xff08 处理器取值时的字节序 xff09 xff1a 1 字符指针 2 联合体 法1 if 1 include lt stdio
  • 字符串:求str1在str2中首次出现的位置。

    span class token macro property span class token directive keyword include span span class token string lt stdio h gt sp
  • 基于ROS利用客户端和服务端实现C++节点和python节点间传送图像

    基于ROS利用客户端和服务端实现C 43 43 节点和python节点间传送图像 配置ROS下和python3通信以及配置python3可用的cv bridge 环境安装和使用 参考 xff1a https blog csdn net qq
  • iMaxB6充电介绍

    iMaxB6是一款多用途充电器 xff0c 能够为Li ion Li Poly Li Fe Ni Cd Ni MH和Pb类型电池充电 xff0c 支持6串以内的平衡充电 简要步骤 xff1a 1 连接正负电源 xff1b 2 连接平衡线 x
  • 基于stm32串口环形缓冲队列处理机制

    原文链接 xff1a 基于stm32串口环形缓冲队列处理机制 入门级 xff08 单字节 xff09 串口环形缓冲区实验 1 1 实验简介 最简单的串口数据处理机制是数据接收并原样回发的机制是 xff1a 成功接收到一个数 xff0c 触发
  • 源码安装nginx 1.23.1

    先看看仓库们 yum list nginx 已加载插件 xff1a fastestmirror langpacks Loading mirror speeds from cached hostfile base mirrors aliyun
  • Sublime Text运行C和C++程序

    原文链接 xff1a Sublime Text运行C和C 43 43 程序 Sublime Text 是一款当下非常流行的文本编辑器 xff0c 其功能强大 xff08 提供有众多的插件 xff09 界面简洁 还支持跨平台使用 xff08
  • keilC51编译常见错误和警告说明

    如对编译出错感兴趣的网友能否把你们常遇到的错误信息收集起来并提出最终的解决办法加以归纳以期共享 xff01 1 L15 重复调用 WARNING L15 MULTIPLE CALL TO SEGMENT SEGMENT PR SPI REC
  • RS485的电路以及相关波形

    1 RS485的电路 xff0c 要注意RE引脚一般是和DE引脚接在一起的 2 差分信号AB的波形 xff0c 高电平6 2v左右 xff0c 低电平 3v 3 A点的波形 4 B点波形 5 接收RX的波形
  • Ubuntu安装cmake

    Ubuntu18 04安装cmake 转载自https www cnblogs com yanqingyang p 12731855 html 一 使用安装命令 span class token function sudo span apt
  • C/C++混淆点-strcat和strcpy区别

    一 原因分析 假设 xff1a char str 61 NULL str 61 new char 11 你想为字符串str开辟一个存储十个字符的内存空间 xff0c 然后你现在有两个字符串 xff1a char c1 61 34 abc 3
  • QGC 添加电机测试功能

    组装过程中为了测试电机的连接以及转向 xff0c 现将电机测试功能单独制作一个页面 xff0c 以便使用 一 xff0c 效果 原型 实际效果总是差那么一丢丢 二 xff0c 实现思路 MavlinkConsole 功能 xff0c 可以在
  • 川崎duAro机器人 ROS_moveit demo

    说明 demo cpp Author hiics include lt ros ros h gt include lt iostream gt MoveIt include lt moveit move group interface mo
  • Windows10 下C/C++网络编程基本:socket实现tcp的例子

    1 说明 待编辑 2 代码 test server h span class token macro property span class token directive keyword ifndef span INCLUDE TEST
  • C++ 实现简单Tcp服务器端 -- Select方式

    test server h span class token macro property span class token directive keyword ifndef span INCLUDE TEST SERVER H span
  • curl 命令的使用:HTTP请求、下载文件、FTP上传下载

    1 curl 命令简介 cURL xff08 CommandLine Uniform Resource Locator xff09 xff0c 是一个利用 URL 语法 xff0c 在命令行终端下使用的网络请求工具 xff0c 支持 HTT
  • ROS/Gazebo练习2: stack light simulation

    light description urdf light xacro span class token prolog lt xml version 61 34 1 0 34 gt span span class token comment