Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

initial commit

  • Loading branch information...
commit 78a709d36845848536b58e1b5c197b1f5df48565 0 parents
Timo Hackel authored
33 .gitignore
@@ -0,0 +1,33 @@
+#CMake:
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+#objects and libraries
+*.so
+*.a
+*.o
+*.lo
+*.la
+*.d
+*.pyc
+*.pyo
+#vi, emacs and gedit swap files
+*~
+*.swp
+.backup-*
+#generated directories:
+build/
+doc/
+bin/
+#generated messages/srvs
+msg_gen/
+srv_gen/
+#gitignores or/and logic is not advanced
+_*.py
+#testing output files:
+.build-version
+.rospack_cache
+*.out
+*.tar.gz
+#svn
+.svn/
17 CMakeLists.txt
@@ -0,0 +1,17 @@
+cmake_minimum_required(VERSION 2.4.6)
+include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
+
+# Append to CPACK_SOURCE_IGNORE_FILES a semicolon-separated list of
+# directories (or patterns, but directories should suffice) that should
+# be excluded from the distro. This is not the place to put things that
+# should be ignored everywhere, like "build" directories; that happens in
+# rosbuild/rosbuild.cmake. Here should be listed packages that aren't
+# ready for inclusion in a distro.
+#
+# This list is combined with the list in rosbuild/rosbuild.cmake. Note
+# that CMake 2.6 may be required to ensure that the two lists are combined
+# properly. CMake 2.4 seems to have unpredictable scoping rules for such
+# variables.
+#list(APPEND CPACK_SOURCE_IGNORE_FILES /core/experimental)
+
+rosbuild_make_distribution(0.1.0)
1  Makefile
@@ -0,0 +1 @@
+include $(shell rospack find mk)/cmake_stack.mk
10 frames.gv
@@ -0,0 +1,10 @@
+digraph G {
+"/base_link" -> "/base_frame"[label="Broadcaster: /base_link\nAverage rate: 96.629 Hz\nMost recent transform: -0.005 sec old \nBuffer length: 4.833 sec\n"];
+"/base_frame" -> "/base_laser_link"[label="Broadcaster: /sick_s300/sick_s300_tf\nAverage rate: 5.212 Hz\nMost recent transform: 0.042 sec old \nBuffer length: 4.797 sec\n"];
+"/base_laser_link" -> "/base_laser"[label="Broadcaster: /base_laser\nAverage rate: 96.755 Hz\nMost recent transform: 0.001 sec old \nBuffer length: 4.827 sec\n"];
+"/base_frame" -> "/odom"[label="Broadcaster: /odom\nAverage rate: 96.678 Hz\nMost recent transform: -0.006 sec old \nBuffer length: 4.810 sec\n"];
+edge [style=invis];
+ subgraph cluster_legend { style=bold; color=black; label ="view_frames Result";
+"Recorded at time: 1321959263.176"[ shape=plaintext ] ;
+ }->"/base_link";
+}
30 neo_bring_up/CMakeLists.txt
@@ -0,0 +1,30 @@
+cmake_minimum_required(VERSION 2.4.6)
+include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
+
+# Set the build type. Options are:
+# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage
+# Debug : w/ debug symbols, w/o optimization
+# Release : w/o debug symbols, w/ optimization
+# RelWithDebInfo : w/ debug symbols, w/ optimization
+# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries
+#set(ROS_BUILD_TYPE RelWithDebInfo)
+
+rosbuild_init()
+
+#set the default path for built executables to the "bin" directory
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
+#set the default path for built libraries to the "lib" directory
+set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
+
+#uncomment if you have defined messages
+#rosbuild_genmsg()
+#uncomment if you have defined services
+#rosbuild_gensrv()
+
+#common commands for building c++ executables and libraries
+#rosbuild_add_library(${PROJECT_NAME} src/example.cpp)
+#target_link_libraries(${PROJECT_NAME} another_library)
+#rosbuild_add_boost_directories()
+#rosbuild_link_boost(${PROJECT_NAME} thread)
+#rosbuild_add_executable(example examples/example.cpp)
+#target_link_libraries(example ${PROJECT_NAME})
1  neo_bring_up/Makefile
@@ -0,0 +1 @@
+include $(shell rospack find mk)/cmake.mk
26 neo_bring_up/mainpage.dox
@@ -0,0 +1,26 @@
+/**
+\mainpage
+\htmlinclude manifest.html
+
+\b bring_ups is ...
+
+<!--
+Provide an overview of your package.
+-->
+
+
+\section codeapi Code API
+
+<!--
+Provide links to specific auto-generated API documentation within your
+package that is of particular interest to a reader. Doxygen will
+document pretty much every part of your code, so do your best here to
+point the reader to the actual API.
+
+If your codebase is fairly large or has different sets of APIs, you
+should use the doxygen 'group' tag to keep these APIs together. For
+example, the roscpp documentation has 'libros' group.
+-->
+
+
+*/
14 neo_bring_up/manifest.xml
@@ -0,0 +1,14 @@
+<package>
+ <description brief="neo_bring_up">
+
+ neo_bring_up
+
+ </description>
+ <author>Timo Hackel</author>
+ <license>BSD</license>
+ <review status="unreviewed" notes=""/>
+ <url>http://ros.org/wiki/neo_bring_up</url>
+
+</package>
+
+
18 neo_bring_up/ros/launch/mp_500.launch
@@ -0,0 +1,18 @@
+<launch>
+ <group>
+
+ <!--robot platform-->
+ <include file="$(find neo_serrelayboard)/ros/launch/relayboard.launch"/>
+ <include file="$(find neo_srbdrive)/ros/launch/srb_drives.launch"/>
+ <include file="$(find neo_platformctrl_diff)/ros/launch/srb_PlatformCtrl.launch"/>
+ <!--sensors-->
+ <include file="$(find neo_sick_s300)/ros/launch/sick_s300.launch"/>
+ <!--tele operator-->
+ <include file="$(find neo_teleop)/ros/launch/teleop.launch"/>
+ <!--tf broadcaster-->
+ <param name="robot_description" command="$(find xacro)/xacro.py '$(find neo_description_mp_500)/ros/robot/mp_500.urdf.xacro'" />
+ <node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" output="screen" >
+ <param name="publish_frequency" type="double" value="50.0" />
+ </node>
+ </group>
+</launch>
29 neo_bring_up/ros/launch/mpo_500.launch
@@ -0,0 +1,29 @@
+<launch>
+ <group>
+
+ <!--robot platform-->
+ <include file="$(find neo_base_drive_can)/ros/launch/base_drive_chain.launch"/>
+ <include file="$(find neo_platformctrl_mecanum)/ros/launch/platformCtrl.launch"/>
+ <include file="$(find neo_serrelayboard)/ros/launch/relayboard.launch">
+ <arg name="loadDrives" value="false"/>
+ </include>
+ <!--tf broadcaster-->
+ <param name="robot_description" command="$(find xacro)/xacro.py '$(find neo_description_mpo_500)/ros/robot/mpo_500.urdf.xacro'" />
+ <node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" output="screen" >
+ <param name="publish_frequency" type="double" value="100.0" />
+ </node>
+ <!--sensors-->
+ <include file="$(find neo_sick_s300)/ros/launch/sick_s300.launch">
+ <arg name="name" value="sick_front"/>
+ <arg name="scanner_type" value="$(env ROBOT)_front"/>
+ </include>
+ <include file="$(find neo_sick_s300)/ros/launch/sick_s300.launch">
+ <arg name="name" value="sick_back"/>
+ <arg name="scanner_type" value="$(env ROBOT)_back"/>
+ </include>
+ <include file="$(find neo_sick_s300)/ros/launch/unify_scans.launch"/>
+ <!--tele operator-->
+ <include file="$(find neo_teleop)/ros/launch/teleop.launch"/>
+
+ </group>
+</launch>
33 neo_teleop/CMakeLists.txt
@@ -0,0 +1,33 @@
+cmake_minimum_required(VERSION 2.4.6)
+include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)
+
+# Set the build type. Options are:
+# Coverage : w/ debug symbols, w/o optimization, w/ code-coverage
+# Debug : w/ debug symbols, w/o optimization
+# Release : w/o debug symbols, w/ optimization
+# RelWithDebInfo : w/ debug symbols, w/ optimization
+# MinSizeRel : w/o debug symbols, w/ optimization, stripped binaries
+#set(ROS_BUILD_TYPE RelWithDebInfo)
+
+rosbuild_init()
+
+#set the default path for built executables to the "bin" directory
+set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
+#set the default path for built libraries to the "lib" directory
+set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
+
+#uncomment if you have defined messages
+#rosbuild_genmsg()
+#uncomment if you have defined services
+#rosbuild_gensrv()
+
+rosbuild_add_executable(${PROJECT_NAME} ros/src/${PROJECT_NAME}.cpp)
+rosbuild_add_executable(${PROJECT_NAME}_keyboard ros/src/${PROJECT_NAME}_keyboard.cpp)
+
+#common commands for building c++ executables and libraries
+#rosbuild_add_library(${PROJECT_NAME} src/example.cpp)
+#target_link_libraries(${PROJECT_NAME} another_library)
+#rosbuild_add_boost_directories()
+#rosbuild_link_boost(${PROJECT_NAME} thread)
+#rosbuild_add_executable(example examples/example.cpp)
+#target_link_libraries(example ${PROJECT_NAME})
1  neo_teleop/Makefile
@@ -0,0 +1 @@
+include $(shell rospack find mk)/cmake.mk
26 neo_teleop/mainpage.dox
@@ -0,0 +1,26 @@
+/**
+\mainpage
+\htmlinclude manifest.html
+
+\b neo_teleop is ...
+
+<!--
+Provide an overview of your package.
+-->
+
+
+\section codeapi Code API
+
+<!--
+Provide links to specific auto-generated API documentation within your
+package that is of particular interest to a reader. Doxygen will
+document pretty much every part of your code, so do your best here to
+point the reader to the actual API.
+
+If your codebase is fairly large or has different sets of APIs, you
+should use the doxygen 'group' tag to keep these APIs together. For
+example, the roscpp documentation has 'libros' group.
+-->
+
+
+*/
16 neo_teleop/manifest.xml
@@ -0,0 +1,16 @@
+<package>
+ <description brief="neo_teleop">
+
+ neo_teleop
+
+ </description>
+ <author>mob</author>
+ <license>BSD</license>
+ <review status="unreviewed" notes=""/>
+ <url>http://ros.org/wiki/neo_teleop</url>
+ <depend package="neo_joy"/>
+ <depend package="geometry_msgs"/>
+ <depend package="trajectory_msgs"/>
+</package>
+
+
4 neo_teleop/ros/launch/mp_500_0_9.yaml
@@ -0,0 +1,4 @@
+axis_linear_x: 1
+axis_angular_z: 2
+scale_angular_z: 0.4
+scale_linear_x: 0.4
4 neo_teleop/ros/launch/mp_500_2_1.yaml
@@ -0,0 +1,4 @@
+axis_linear_x: 1
+axis_angular_z: 2
+scale_angular_z: 0.4
+scale_linear_x: 0.4
6 neo_teleop/ros/launch/mpo_500_1_0.yaml
@@ -0,0 +1,6 @@
+axis_linear_x: 1
+axis_linear_y: 0
+axis_angular_z: 2
+scale_angular_z: 0.4
+scale_linear_x: 0.4
+scale_linear_y: 0.4
14 neo_teleop/ros/launch/teleop.launch
@@ -0,0 +1,14 @@
+<?xml version="1.0" ?>
+<launch>
+
+ <!-- upload parameters-->
+ <rosparam command="load" ns="neo_teleop/joy" file="$(find neo_teleop)/ros/launch/teleop.yaml"/>
+ <rosparam command="load" ns="neo_teleop" file="$(find neo_teleop)/ros/launch/$(env ROBOT).yaml"/>
+
+ <!-- start cob teleop node -->
+ <node pkg="neo_teleop" type="neo_teleop" name="neo_teleop_node" ns="neo_teleop" output="screen"/>
+
+ <!-- run joystick -->
+ <include file="$(find neo_joy)/ros/launch/joy.launch" />
+
+</launch>
21 neo_teleop/ros/launch/teleop.yaml
@@ -0,0 +1,21 @@
+# common params
+run_factor: 2.0
+
+# buttons
+lower_neck_button: 6
+upper_neck_button: 4
+tray_button: 3
+arm_joint12_button: 0
+arm_joint34_button: 1
+arm_joint56_button: 2
+arm_joint7_button: 3
+deadman_button: 5
+run_button: 7
+
+# axes
+axis_vx: 1
+axis_vy: 0
+axis_vth: 2
+up_down: 5 #tray--up/down; tilt--front/back, here we just name up_down
+left_right: 4 #pan--left/right
+
11 neo_teleop/ros/launch/teleop_keyboard.launch
@@ -0,0 +1,11 @@
+<?xml version="1.0" ?>
+<launch>
+
+ <node pkg="neo_teleop" type="neo_teleop_keyboard" name="spawn_teleop_keyboard" output="screen">
+ <param name="walk_vel" value="0.1" />
+ <param name="run_vel" value="0.2" />
+ <param name="yaw_rate" value="0.1" />
+ <param name="yaw_run_rate" value="0.2" />
+ </node>
+</launch>
+
95 neo_teleop/ros/src/neo_teleop.cpp
@@ -0,0 +1,95 @@
+/*********************************************************************
+ * Software License Agreement (BSD License)
+ *
+ * Copyright (c) 2011, Neobotix GmbH
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of the Neobotix nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *********************************************************************/
+
+
+#include <ros/ros.h>
+#include <sensor_msgs/Joy.h>
+#include <geometry_msgs/Twist.h>
+
+class TeleopNeo
+{
+public:
+ TeleopNeo();
+
+private:
+ void joyCallback(const sensor_msgs::Joy::ConstPtr& joy);
+
+ ros::NodeHandle nh_;
+
+ int linear_x, linear_y, angular_z;
+ double l_scale_x, l_scale_y, a_scale_z;
+ ros::Publisher vel_pub_;
+ ros::Subscriber joy_sub_;
+
+};
+
+
+TeleopNeo::TeleopNeo():
+ linear_x(1), linear_y(0), angular_z(2)
+{
+
+ nh_.param("axis_linear_x", linear_x, linear_x);
+ nh_.param("scale_linear_x", l_scale_x, l_scale_x);
+ nh_.param("axis_linear_y", linear_y, linear_y);
+ nh_.param("scale_linear_y", l_scale_y, l_scale_y);
+ nh_.param("axis_angular_z", angular_z, angular_z);
+ nh_.param("scale_angular_z", a_scale_z, a_scale_z);
+
+
+ ROS_INFO("started joystick drive with ");
+
+ vel_pub_ = nh_.advertise<geometry_msgs::Twist>("/cmd_vel", 1);
+
+
+ joy_sub_ = nh_.subscribe<sensor_msgs::Joy>("/joy", 10, &TeleopNeo::joyCallback, this);
+
+}
+
+void TeleopNeo::joyCallback(const sensor_msgs::Joy::ConstPtr& joy)
+{
+ geometry_msgs::Twist vel;
+ vel.angular.z = a_scale_z*joy->axes[angular_z];
+ vel.linear.x = l_scale_x*joy->axes[linear_x];
+ vel.linear.y = l_scale_y*joy->axes[linear_y];
+ vel_pub_.publish(vel);
+}
+
+
+int main(int argc, char** argv)
+{
+ ros::init(argc, argv, "teleop_Neo");
+ TeleopNeo teleop_Neo;
+
+ ros::spin();
+}
203 neo_teleop/ros/src/neo_teleop_keyboard.cpp
@@ -0,0 +1,203 @@
+/*
+ * teleop_pr2_keyboard
+ * Copyright (c) 2008, Willow Garage, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the <ORGANIZATION> nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+// Author: Kevin Watts
+
+#include <termios.h>
+#include <signal.h>
+#include <math.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <ros/ros.h>
+#include <geometry_msgs/Twist.h>
+
+#define KEYCODE_A 0x61
+#define KEYCODE_D 0x64
+#define KEYCODE_S 0x73
+#define KEYCODE_W 0x77
+#define KEYCODE_Q 0x71
+#define KEYCODE_E 0x65
+
+#define KEYCODE_A_CAP 0x41
+#define KEYCODE_D_CAP 0x44
+#define KEYCODE_S_CAP 0x53
+#define KEYCODE_W_CAP 0x57
+#define KEYCODE_Q_CAP 0x51
+#define KEYCODE_E_CAP 0x45
+
+class TeleopPR2Keyboard
+{
+ private:
+ double walk_vel, run_vel, yaw_rate, yaw_rate_run;
+ geometry_msgs::Twist cmd;
+
+ ros::NodeHandle n_;
+ ros::Publisher vel_pub_;
+
+ public:
+ void init()
+ {
+ cmd.linear.x = cmd.linear.y = cmd.angular.z = 0;
+
+ vel_pub_ = n_.advertise<geometry_msgs::Twist>("cmd_vel", 1);
+
+ ros::NodeHandle n_private("~");
+ n_private.param("walk_vel", walk_vel, 0.5);
+ n_private.param("run_vel", run_vel, 1.0);
+ n_private.param("yaw_rate", yaw_rate, 1.0);
+ n_private.param("yaw_run_rate", yaw_rate_run, 1.5);
+
+ }
+
+ ~TeleopPR2Keyboard() { }
+ void keyboardLoop();
+
+};
+
+int kfd = 0;
+struct termios cooked, raw;
+
+void quit(int sig)
+{
+ tcsetattr(kfd, TCSANOW, &cooked);
+ exit(0);
+}
+
+int main(int argc, char** argv)
+{
+ ros::init(argc, argv, "pr2_base_keyboard");
+
+ TeleopPR2Keyboard tpk;
+ tpk.init();
+
+ signal(SIGINT,quit);
+
+ tpk.keyboardLoop();
+
+ return(0);
+}
+
+void TeleopPR2Keyboard::keyboardLoop()
+{
+ char c;
+ bool dirty=false;
+
+ // get the console in raw mode
+ tcgetattr(kfd, &cooked);
+ memcpy(&raw, &cooked, sizeof(struct termios));
+ raw.c_lflag &=~ (ICANON | ECHO);
+ // Setting a new line, then end of file
+ raw.c_cc[VEOL] = 1;
+ raw.c_cc[VEOF] = 2;
+ tcsetattr(kfd, TCSANOW, &raw);
+
+ puts("Reading from keyboard");
+ puts("---------------------------");
+ puts("Use 'WASD' to translate");
+ puts("Use 'QE' to yaw");
+ puts("Press 'Shift' to run");
+
+
+ for(;;)
+ {
+ // get the next event from the keyboard
+ if(read(kfd, &c, 1) < 0)
+ {
+ perror("read():");
+ exit(-1);
+ }
+
+ cmd.linear.x = cmd.linear.y = cmd.angular.z = 0;
+
+ switch(c)
+ {
+ // Walking
+ case KEYCODE_W:
+ cmd.linear.x = walk_vel;
+ dirty = true;
+ break;
+ case KEYCODE_S:
+ cmd.linear.x = - walk_vel;
+ dirty = true;
+ break;
+ case KEYCODE_A:
+ cmd.linear.y = walk_vel;
+ dirty = true;
+ break;
+ case KEYCODE_D:
+ cmd.linear.y = - walk_vel;
+ dirty = true;
+ break;
+ case KEYCODE_Q:
+ cmd.angular.z = yaw_rate;
+ dirty = true;
+ break;
+ case KEYCODE_E:
+ cmd.angular.z = - yaw_rate;
+ dirty = true;
+ break;
+
+ // Running
+ case KEYCODE_W_CAP:
+ cmd.linear.x = run_vel;
+ dirty = true;
+ break;
+ case KEYCODE_S_CAP:
+ cmd.linear.x = - run_vel;
+ dirty = true;
+ break;
+ case KEYCODE_A_CAP:
+ cmd.linear.y = run_vel;
+ dirty = true;
+ break;
+ case KEYCODE_D_CAP:
+ cmd.linear.y = - run_vel;
+ dirty = true;
+ break;
+ case KEYCODE_Q_CAP:
+ cmd.angular.z = yaw_rate_run;
+ dirty = true;
+ break;
+ case KEYCODE_E_CAP:
+ cmd.angular.z = - yaw_rate_run;
+ dirty = true;
+ break;
+ }
+
+
+ if (dirty == true)
+ {
+ vel_pub_.publish(cmd);
+ }
+
+
+ }
+}
11 stack.xml
@@ -0,0 +1,11 @@
+<stack>
+ <description brief="neo_apps">neo_apps</description>
+ <author>Maintained by mob</author>
+ <license>BSD</license>
+ <review status="unreviewed" notes=""/>
+ <url>http://ros.org/wiki/neo_apps</url>
+ <depend stack="common_msgs" /> <!-- trajectory_msgs, geometry_msgs -->
+ <depend stack="neo_driver" /> <!-- neo_joy -->
+ <depend stack="ros" />
+
+</stack>
11 stack.xml.bak
@@ -0,0 +1,11 @@
+<stack>
+ <description brief="neo_apps">neo_apps</description>
+ <author>Maintained by mob</author>
+ <license>BSD</license>
+ <review status="unreviewed" notes=""/>
+ <url>http://ros.org/wiki/neo_apps</url>
+ <depend stack="common_msgs" /> <!-- trajectory_msgs, geometry_msgs -->
+ <depend stack="neo_driver" /> <!-- neo_joy -->
+ <depend stack="ros" />
+
+</stack>
Please sign in to comment.
Something went wrong with that request. Please try again.