├── README-ZH.md ├── README.md ├── scout_base ├── CMakeLists.txt ├── include │ └── scout_base │ │ ├── scout_messenger.hpp │ │ └── scout_params.hpp ├── launch │ ├── display_model.launch │ ├── scout_base.launch │ ├── scout_mini_base.launch │ └── scout_mini_omni.launch ├── package.xml ├── rviz │ └── model_display.rviz └── src │ ├── scout_base_node.cpp │ └── scout_messenger.cpp ├── scout_bringup ├── CMakeLists.txt ├── launch │ ├── scout_mini_robot_base.launch │ ├── scout_miniomni_robot_base.launch │ ├── scout_robot_base.launch │ ├── scout_simulated_robot.launch │ └── scout_teleop_keyboard.launch ├── package.xml └── scripts │ ├── bringup_can2usb.bash │ └── setup_can2usb.bash ├── scout_description ├── CHANGELOG.rst ├── CMakeLists.txt ├── launch │ ├── display_scout_mini.launch │ ├── display_scout_v2.launch │ ├── gazebo.launch │ ├── scout_mini_stock.launch │ └── scout_v2_stock.launch ├── meshes │ ├── 1_Link.STL │ ├── 2_Link.STL │ ├── 3_Link.STL │ ├── 4_Link.STL │ ├── base_link.dae │ ├── scout_mini_base_link.STL │ ├── scout_mini_base_link.dae │ ├── wheel.dae │ ├── wheel_type1.dae │ └── wheel_type2.dae ├── package.xml ├── rviz │ ├── model_display.rviz │ ├── navigation.rviz │ └── scout_mini_model_display.rviz └── urdf │ ├── empty.urdf │ ├── scout_mini.gazebo │ ├── scout_mini.urdf.xacro │ ├── scout_mini_wheel.gazebo │ ├── scout_mini_wheel.xacro │ ├── scout_v2.gazebo │ ├── scout_v2.xacro │ ├── scout_wheel.gazebo │ ├── scout_wheel_type1.xacro │ └── scout_wheel_type2.xacro └── scout_msgs ├── CHANGELOG.md ├── CMakeLists.txt ├── msg ├── ScoutBmsStatus.msg ├── ScoutDriverState.msg ├── ScoutLightCmd.msg ├── ScoutLightState.msg ├── ScoutMotorState.msg ├── ScoutRsStatus.msg └── ScoutStatus.msg └── package.xml /README-ZH.md: -------------------------------------------------------------------------------- 1 | # 松灵机器人产品SCOUT 的ROS package 2 | 3 | ## ROS Packages 说明 4 | 5 | * scout_bringup: launch and configuration files to start ROS nodes 6 | * scout_base: a ROS wrapper around Scout SDK to monitor and control the robot 7 | * scout_msgs: scout related message definitions 8 | * (scout_ros: meta package for the Scout robot ROS packages) 9 | 10 | 11 | 下图是是整个ros package的一个基本框架说明,或许它可以帮助你理解你理解整个ros package内部是如何工作的,他们之间的是相互联系的。 12 | 其中最底层的是移动机器人底盘,它通过can或者usart实现运行在计算平台的sdk进行基本信息的获取,具体可以根据wrp_sdk了解更多信息。 仿真部分是基于Webots,构建起的仿真环境。 13 | 14 | 15 | 16 | 其中上图中紫色部分是包含在这个ros-package中的部分。 17 | 18 | ## 通讯接口设置 19 | 20 | ### 设置串口 21 | 22 | 通常来说,usb转串口设备在Linux或者Ubuntu系统中会被自动识别为“/dev/ttyUSB0” 或者看起来类似的设备,这个可以通过指令查询 23 | ``` 24 | $ ls -l /dev/ttyUSB* 25 | ``` 26 | 如果在打开设备的操作过程中出现了"... permission denied ..."的错误,有可能因为权限的原因造成的,您需要向您的用户帐户授予端口访问权限,可以通过如下指令: 27 | 28 | ``` 29 | $ sudo usermod -a -G dialout $USER 30 | ``` 31 | 32 | 需要重新登录账户才能使刚刚的操作生效。 33 | ### 配置 CAN-TO-USB适配器 34 | 35 | 1. 设置CAN转USB适配器,启用gs_usb内核模块(本指令需要搭配相应的硬件设备才可以使用,需要Linux内部版本>4.5) 36 | 37 | ``` 38 | $ sudo modprobe gs_usb 39 | ``` 40 | 41 | 2. 设置can设备参数 42 | 43 | ``` 44 | $ sudo ip link set can0 up type can bitrate 500000 45 | ``` 46 | 47 | 3. 如果在前面的步骤中没有发生错误,您可以使用以下指令查看can设备 48 | 49 | ``` 50 | $ ifconfig -a 51 | ``` 52 | 53 | 4. 安装和使用can-utils来测试硬件 54 | 55 | ``` 56 | $ sudo apt install can-utils 57 | ``` 58 | 59 | 5. 测试指令 60 | 61 | ``` 62 | # receiving data from can0 63 | $ candump can0 64 | # send data to can0 65 | $ cansend can0 001#1122334455667788 66 | ``` 67 | 68 | 文件中提供了 "./scripts"文件夹里的两个脚本以便于设置。您可以在首次安装时运行“ ./setup_can2usb.bash”,并在每次拔出和重新插入适配器时运行“ ./bringup_can2usb.bash”以启动设备。 69 | 70 | ## ROS package 的基础使用 71 | 72 | 1. 安装 ROS packages 依赖 73 | 74 | ``` 75 | $ sudo apt install ros-melodic-teleop-twist-keyboard 76 | ``` 77 | 78 | 如果你使用是 Kinetic版本,把上述指令中的“melodic” 改成 “kinetic” 即可 79 | 80 | 2. 将scout ros package 下载至的您的catkin 工作空间,并编译 81 | 82 | (下面的操作是假定你的catkin编译工作空间在: ~/catkin_ws/src 目录下) 83 | 84 | ``` 85 | $ cd ~/catkin_ws/src 86 | $ git clone --recursive https://github.com/agilexrobotics/ugv_sdk.git 87 | $ git clone https://github.com/agilexrobotics/scout_ros.git 88 | $ cd .. 89 | $ catkin_make 90 | ``` 91 | 如果你买的小车版本是1.0通信协议版本,执行以下指令切换ugv_sdk的版本至1.0版本 92 | ``` 93 | $ cd ugv_sdk && git checkout master 94 | ``` 95 | 然后重新编译 96 | 97 | 3. 启动 ROS nodes 98 | 99 | * 启动scout车节点 100 | 101 | ``` 102 | $ roslaunch scout_bringup scout_minimal.launch 103 | ``` 104 | 105 | * 启动scout-mini车节点 106 | 107 | ``` 108 | $ roslaunch scout_bringup scout_mini_minimal.launch 109 | ``` 110 | 111 | * 启动scout-mini车的全向轮模式(麦克纳母轮) 112 | 113 | ```bash 114 | $ roslaunch scout_bringup scout_miniomni_robot_base.launch 115 | ``` 116 | 117 | * Start the keyboard tele-op node 118 | 119 | ``` 120 | $ roslaunch scout_bringup scout_teleop_keyboard.launch 121 | ``` 122 | 123 | **SAFETY PRECAUSION**: 124 | 125 | The default command values of the keyboard teleop node are high, make sure you decrease the speed commands before starting to control the robot with your keyboard! Have your remote controller ready to take over the control whenever necessary. 126 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ROS Packages for Scout Mobile Robot 2 | 3 | ## Packages 4 | 5 | This repository contains minimal packages to control the scout robot using ROS. 6 | 7 | * scout_bringup: launch and configuration files to start ROS nodes 8 | * scout_base: a ROS wrapper around [ugv_sdk](https://github.com/agilexrobotics/ugv_sdk) to monitor and control the scout robot 9 | * scout_description: URDF model for the mobile base, a sample urdf (scout_description/sample/scout_v2_nav.xacro) is provided for customized robot with addtional sensors 10 | * scout_msgs: scout related message definitions 11 | 12 | ### Update the packages for your customized robot 13 | 14 | **Additional sensors** 15 | 16 | It's likely that you may want to add additional sensors to the scout mobile platform, such as a Lidar for navigation. In such cases, a new ".xacro" file needs to be created to describe the relative pose of the new sensor with respect to the robot base, so that the sensor frame can be reflected in the robot tf tree. 17 | 18 | A [sample](scout_description/sample/scout_v2_nav.xacro) ".xacro" file is present in this repository, in which the base ".xacro" file of an empty scout platform is first included, and then additional links are defined. 19 | 20 | The nodes in this ROS package are made to handle only the control of the scout base and publishing of the status. Additional nodes may need to be created by the user to handle the sensors. 21 | 22 | **Alternative odometry calculation** 23 | 24 | By default the scout_base package will publish odometry message to topic "/odom". In case you want to use a different approach to calculate the odometry, for example estimating the position together with an IMU, you could rename the default odometry topic to be something else. 25 | 26 | ``` 27 | $ roslaunch scout_bringup scout_base_robot.launch odom_topic_name:="" 28 | ``` 29 | 30 | ## Communication interface setup 31 | 32 | Please refer to the [README](https://github.com/westonrobot/ugv_sdk_sdk#hardware-interface) of "ugv_sdk" package for setup of communication interfaces. 33 | 34 | #### Note on CAN interface on Nvidia Jetson Platforms 35 | 36 | Nvidia Jeston TX2/Xavier/XavierNX have CAN controller(s) integrated in the main SOC. If you're using a dev kit, you need to add a CAN transceiver for proper CAN communication. 37 | 38 | ## Basic usage of the ROS packages 39 | 40 | 1. Install dependent libraries 41 | 42 | ``` 43 | $ sudo apt install -y libasio-dev 44 | $ sudo apt install -y ros-$ROS_DISTRO-teleop-twist-keyboard 45 | ``` 46 | 47 | 2. Clone the packages into your catkin workspace and compile 48 | 49 | (the following instructions assume your catkin workspace is at: ~/catkin_ws/src) 50 | 51 | ``` 52 | $ cd ~/catkin_ws/src 53 | $ git clone https://github.com/agilexrobotics/ugv_sdk.git 54 | $ git clone https://github.com/agilexrobotics/scout_ros.git 55 | $ cd .. 56 | $ catkin_make 57 | ``` 58 | 59 | 3. Setup CAN-To-USB adapter 60 | 61 | * Enable gs_usb kernel module(If you have already added this module, you do not need to add it) 62 | ``` 63 | $ sudo modprobe gs_usb 64 | ``` 65 | 66 | * first time use scout-ros package 67 | ``` 68 | $ rosrun scout_bringup setup_can2usb.bash 69 | ``` 70 | 71 | * if not the first time use scout-ros package(Run this command every time you turn off the power) 72 | ``` 73 | $ rosrun scout_bringup bringup_can2usb.bash 74 | ``` 75 | 76 | * Testing command 77 | ``` 78 | # receiving data from can0 79 | $ candump can0 80 | ``` 81 | 82 | 4. Launch ROS nodes 83 | 84 | * Start the base node for scout 85 | 86 | ``` 87 | $ roslaunch scout_bringup scout_robot_base.launch 88 | ``` 89 | 90 | The [scout_bringup/scout_minimal.launch](scout_bringup/launch/scout_minimal.launch) has 5 parameters: 91 | 92 | - port_name: specifies the port used to communicate with the robot, default = "can0" 93 | - simulated_robot: indicates if launching with a simulation, default = "false" 94 | - model_xacro: specifies the target ".xacro" file for the publishing of tf frames, default = [scout_v2.xacro](scout_base/description/scout_v2.xacro) 95 | - odom_topic_name: sets the name of the topic which calculated odometry is published to, defaults = "odom" 96 | - is_scout_mini:Suitable for chassis of type scout_mini,defaults = "false" 97 | 98 | * Start the base node for scout-mini 99 | 100 | ``` 101 | $ roslaunch scout_bringup scout_mini_robot_base.launch 102 | ``` 103 | 104 | * Start the base node for scout-min(omni mode) 105 | 106 | ```bash 107 | $ roslaunch scout_bringup scout_miniomni_robot_base.launch 108 | ``` 109 | 110 | 111 | * Start the keyboard tele-op node 112 | 113 | ``` 114 | $ roslaunch scout_bringup scout_teleop_keyboard.launch 115 | ``` 116 | 117 | **SAFETY PRECAUSION**: 118 | 119 | The default command values of the keyboard teleop node are high, make sure you decrease the speed commands before starting to control the robot with your keyboard! Have your remote controller ready to take over the control whenever necessary. 120 | -------------------------------------------------------------------------------- /scout_base/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(scout_base) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | add_compile_options(-std=c++11) 6 | 7 | find_package(catkin REQUIRED COMPONENTS 8 | roslaunch 9 | roscpp 10 | sensor_msgs 11 | std_msgs 12 | geometry_msgs 13 | tf2 14 | tf2_ros 15 | ugv_sdk 16 | scout_msgs 17 | ) 18 | 19 | # find_package(Boost REQUIRED COMPONENTS chrono) 20 | 21 | ################################### 22 | ## catkin specific configuration ## 23 | ################################### 24 | 25 | catkin_package( 26 | INCLUDE_DIRS include 27 | LIBRARIES scout_messenger 28 | CATKIN_DEPENDS ugv_sdk scout_msgs 29 | # DEPENDS Boost 30 | ) 31 | 32 | ########### 33 | ## Build ## 34 | ########### 35 | 36 | ## Specify additional locations of header files 37 | ## Your package locations should be listed before other locations 38 | include_directories( 39 | include 40 | ${catkin_INCLUDE_DIRS} 41 | ) 42 | 43 | add_library(scout_messenger STATIC src/scout_messenger.cpp) 44 | target_link_libraries(scout_messenger ${catkin_LIBRARIES}) 45 | add_dependencies(scout_messenger ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 46 | 47 | add_executable(scout_base_node src/scout_base_node.cpp) 48 | target_link_libraries(scout_base_node scout_messenger ${catkin_LIBRARIES}) 49 | 50 | ############# 51 | ## Install ## 52 | ############# 53 | 54 | install(TARGETS scout_messenger scout_base_node 55 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 56 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 57 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}) 58 | 59 | install(DIRECTORY include/${PROJECT_NAME}/ 60 | DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}) 61 | 62 | install(DIRECTORY launch 63 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 64 | -------------------------------------------------------------------------------- /scout_base/include/scout_base/scout_messenger.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * scout_messenger.hpp 3 | * 4 | * Created on: Jun 14, 2019 10:24 5 | * Description: 6 | * 7 | * Copyright (c) 2019 Ruixiang Du (rdu) 8 | */ 9 | 10 | #ifndef SCOUT_MESSENGER_HPP 11 | #define SCOUT_MESSENGER_HPP 12 | 13 | #include 14 | 15 | #include 16 | #include 17 | // #include 18 | #include 19 | 20 | #include "scout_msgs/ScoutLightCmd.h" 21 | #include "ugv_sdk/mobile_robot/scout_robot.hpp" 22 | #include 23 | 24 | namespace westonrobot 25 | { 26 | class ScoutROSMessenger 27 | { 28 | public: 29 | explicit ScoutROSMessenger(ros::NodeHandle *nh); 30 | ScoutROSMessenger(ScoutRobot *scout, ros::NodeHandle *nh, bool is_scout_omni); 31 | 32 | std::string odom_frame_; 33 | std::string base_frame_; 34 | std::string odom_topic_name_; 35 | bool pub_tf; 36 | bool is_scout_omni; 37 | bool simulated_robot_ = false; 38 | int sim_control_rate_ = 50; 39 | 40 | void SetupSubscription(); 41 | 42 | void PublishStateToROS(); 43 | void PublishSimStateToROS(double linear, double angular); 44 | 45 | void GetCurrentMotionCmdForSim(double &linear, double &angular); 46 | 47 | private: 48 | ScoutRobot *scout_; 49 | ros::NodeHandle *nh_; 50 | 51 | std::mutex twist_mutex_; 52 | geometry_msgs::Twist current_twist_; 53 | 54 | ros::Publisher odom_publisher_; 55 | ros::Publisher status_publisher_; 56 | ros::Publisher BMS_status_publisher_; 57 | ros::Publisher rs_status_publisher_; 58 | ros::Subscriber motion_cmd_subscriber_; 59 | ros::Subscriber light_cmd_subscriber_; 60 | tf2_ros::TransformBroadcaster tf_broadcaster_; 61 | 62 | // speed variables 63 | double linear_speed_ = 0.0; 64 | double angular_speed_ = 0.0; 65 | double lateral_speed_ = 0.0; 66 | double position_x_ = 0.0; 67 | double position_y_ = 0.0; 68 | double theta_ = 0.0; 69 | 70 | ros::Time last_time_; 71 | ros::Time current_time_; 72 | 73 | void TwistCmdCallback(const geometry_msgs::Twist::ConstPtr &msg); 74 | void LightCmdCallback(const scout_msgs::ScoutLightCmd::ConstPtr &msg); 75 | void PublishOdometryToROS(double linear, double angular, double dt); 76 | void PublishOdometryToROSOmni(double linear, double angular, double lateral_velocity, double dt); 77 | }; 78 | } // namespace westonrobot 79 | 80 | #endif /* SCOUT_MESSENGER_HPP */ 81 | -------------------------------------------------------------------------------- /scout_base/include/scout_base/scout_params.hpp: -------------------------------------------------------------------------------- 1 | /* 2 | * scout_params.hpp 3 | * 4 | * Created on: Sep 27, 2019 15:08 5 | * Description: 6 | * 7 | * Copyright (c) 2020 Ruixiang Du (rdu) 8 | */ 9 | 10 | #ifndef SCOUT_PARAMS_HPP 11 | #define SCOUT_PARAMS_HPP 12 | 13 | namespace westonrobot 14 | { 15 | struct ScoutParams 16 | { 17 | /* Scout Parameters */ 18 | static constexpr double max_steer_angle = 30.0; // in degree 19 | 20 | static constexpr double track = 0.58306; // in meter (left & right wheel distance) 21 | static constexpr double wheelbase = 0.498; // in meter (front & rear wheel distance) 22 | static constexpr double wheel_radius = 0.165; // in meter 23 | 24 | // from user manual v1.2.8 P18 25 | // max linear velocity: 1.5 m/s 26 | // max angular velocity: 0.7853 rad/s 27 | static constexpr double max_linear_speed = 1.5; // in m/s 28 | static constexpr double max_angular_speed = 0.7853; // in rad/s 29 | static constexpr double max_speed_cmd = 10.0; // in rad/s 30 | }; 31 | } // namespace westonrobot 32 | 33 | #endif /* SCOUT_PARAMS_HPP */ 34 | -------------------------------------------------------------------------------- /scout_base/launch/display_model.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /scout_base/launch/scout_base.launch: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /scout_base/launch/scout_mini_base.launch: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /scout_base/launch/scout_mini_omni.launch: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /scout_base/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | scout_base 4 | 0.3.3 5 | AgileX Scout robot driver 6 | 7 | Ruixiang Du 8 | WestonRobot 9 | 10 | BSD 11 | 12 | TODO 13 | TODO 14 | TODO 15 | 16 | catkin 17 | scout_msgs 18 | roscpp 19 | roslaunch 20 | sensor_msgs 21 | ugv_sdk 22 | controller_manager 23 | geometry_msgs 24 | scout_msgs 25 | roscpp 26 | sensor_msgs 27 | topic_tools 28 | ugv_sdk 29 | 30 | 31 | -------------------------------------------------------------------------------- /scout_base/rviz/model_display.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | - /RobotModel1 10 | Splitter Ratio: 0.5 11 | Tree Height: 732 12 | - Class: rviz/Selection 13 | Name: Selection 14 | - Class: rviz/Tool Properties 15 | Expanded: 16 | - /2D Pose Estimate1 17 | - /2D Nav Goal1 18 | - /Publish Point1 19 | Name: Tool Properties 20 | Splitter Ratio: 0.5886790156364441 21 | - Class: rviz/Views 22 | Expanded: 23 | - /Current View1 24 | Name: Views 25 | Splitter Ratio: 0.5 26 | - Class: rviz/Time 27 | Experimental: false 28 | Name: Time 29 | SyncMode: 0 30 | SyncSource: "" 31 | Preferences: 32 | PromptSaveOnExit: true 33 | Toolbars: 34 | toolButtonStyle: 2 35 | Visualization Manager: 36 | Class: "" 37 | Displays: 38 | - Alpha: 0.5 39 | Cell Size: 1 40 | Class: rviz/Grid 41 | Color: 160; 160; 164 42 | Enabled: true 43 | Line Style: 44 | Line Width: 0.029999999329447746 45 | Value: Lines 46 | Name: Grid 47 | Normal Cell Count: 0 48 | Offset: 49 | X: 0 50 | Y: 0 51 | Z: 0 52 | Plane: XY 53 | Plane Cell Count: 10 54 | Reference Frame: 55 | Value: true 56 | - Alpha: 1 57 | Class: rviz/RobotModel 58 | Collision Enabled: false 59 | Enabled: true 60 | Links: 61 | All Links Enabled: true 62 | Expand Joint Details: false 63 | Expand Link Details: false 64 | Expand Tree: false 65 | Link Tree Style: Links in Alphabetic Order 66 | base_link: 67 | Alpha: 1 68 | Show Axes: false 69 | Show Trail: false 70 | chassis_link: 71 | Alpha: 1 72 | Show Axes: false 73 | Show Trail: false 74 | Value: true 75 | front_left_wheel_link: 76 | Alpha: 1 77 | Show Axes: false 78 | Show Trail: false 79 | Value: true 80 | front_right_wheel_link: 81 | Alpha: 1 82 | Show Axes: false 83 | Show Trail: false 84 | Value: true 85 | inertial_link: 86 | Alpha: 1 87 | Show Axes: false 88 | Show Trail: false 89 | rear_left_wheel_link: 90 | Alpha: 1 91 | Show Axes: false 92 | Show Trail: false 93 | Value: true 94 | rear_right_wheel_link: 95 | Alpha: 1 96 | Show Axes: false 97 | Show Trail: false 98 | Value: true 99 | Name: RobotModel 100 | Robot Description: robot_description 101 | TF Prefix: "" 102 | Update Interval: 0 103 | Value: true 104 | Visual Enabled: true 105 | - Class: rviz/TF 106 | Enabled: true 107 | Frame Timeout: 15 108 | Frames: 109 | All Enabled: true 110 | base_link: 111 | Value: true 112 | chassis_link: 113 | Value: true 114 | front_left_wheel_link: 115 | Value: true 116 | front_right_wheel_link: 117 | Value: true 118 | inertial_link: 119 | Value: true 120 | rear_left_wheel_link: 121 | Value: true 122 | rear_right_wheel_link: 123 | Value: true 124 | Marker Scale: 1 125 | Name: TF 126 | Show Arrows: true 127 | Show Axes: true 128 | Show Names: true 129 | Tree: 130 | base_link: 131 | chassis_link: 132 | front_left_wheel_link: 133 | {} 134 | front_right_wheel_link: 135 | {} 136 | rear_left_wheel_link: 137 | {} 138 | rear_right_wheel_link: 139 | {} 140 | inertial_link: 141 | {} 142 | Update Interval: 0 143 | Value: true 144 | Enabled: true 145 | Global Options: 146 | Background Color: 48; 48; 48 147 | Default Light: true 148 | Fixed Frame: base_link 149 | Frame Rate: 30 150 | Name: root 151 | Tools: 152 | - Class: rviz/Interact 153 | Hide Inactive Objects: true 154 | - Class: rviz/MoveCamera 155 | - Class: rviz/Select 156 | - Class: rviz/FocusCamera 157 | - Class: rviz/Measure 158 | - Class: rviz/SetInitialPose 159 | Theta std deviation: 0.2617993950843811 160 | Topic: /initialpose 161 | X std deviation: 0.5 162 | Y std deviation: 0.5 163 | - Class: rviz/SetGoal 164 | Topic: /move_base_simple/goal 165 | - Class: rviz/PublishPoint 166 | Single click: true 167 | Topic: /clicked_point 168 | Value: true 169 | Views: 170 | Current: 171 | Class: rviz/Orbit 172 | Distance: 2.9432930946350098 173 | Enable Stereo Rendering: 174 | Stereo Eye Separation: 0.05999999865889549 175 | Stereo Focal Distance: 1 176 | Swap Stereo Eyes: false 177 | Value: false 178 | Focal Point: 179 | X: 0.027046792209148407 180 | Y: -0.03490818291902542 181 | Z: -0.09952529519796371 182 | Focal Shape Fixed Size: true 183 | Focal Shape Size: 0.05000000074505806 184 | Invert Z Axis: false 185 | Name: Current View 186 | Near Clip Distance: 0.009999999776482582 187 | Pitch: 0.5447957515716553 188 | Target Frame: 189 | Value: Orbit (rviz) 190 | Yaw: 4.27542781829834 191 | Saved: ~ 192 | Window Geometry: 193 | Displays: 194 | collapsed: false 195 | Height: 1029 196 | Hide Left Dock: false 197 | Hide Right Dock: true 198 | QMainWindow State: 000000ff00000000fd00000004000000000000015600000367fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d00000367000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002b0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000002b0000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000074d0000003efc0100000002fb0000000800540069006d006501000000000000074d000002eb00fffffffb0000000800540069006d00650100000000000004500000000000000000000005f10000036700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 199 | Selection: 200 | collapsed: false 201 | Time: 202 | collapsed: false 203 | Tool Properties: 204 | collapsed: false 205 | Views: 206 | collapsed: true 207 | Width: 1869 208 | X: 632 209 | Y: 291 210 | -------------------------------------------------------------------------------- /scout_base/src/scout_base_node.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | #include "ugv_sdk/mobile_robot/scout_robot.hpp" 9 | #include "ugv_sdk/utilities/protocol_detector.hpp" 10 | #include "scout_base/scout_messenger.hpp" 11 | 12 | using namespace westonrobot; 13 | 14 | std::unique_ptr robot; 15 | 16 | int main(int argc, char **argv) { 17 | // setup ROS node 18 | ros::init(argc, argv, "scout_odom"); 19 | ros::NodeHandle node(""), private_node("~"); 20 | 21 | // check wether controlling scout mini 22 | bool is_scout_mini = false; 23 | static bool is_scout_omni = false; 24 | //private_node.param("is_scout_mini", is_scout_mini, false); 25 | private_node.getParam("is_scout_mini",is_scout_mini); 26 | ROS_INFO("Working as scout mini: %d",is_scout_mini); 27 | 28 | private_node.getParam("is_scout_omni",is_scout_omni); 29 | ROS_INFO("Working as scout omni: %d",is_scout_omni); 30 | 31 | // check protocol version 32 | ProtocolDetector detector; 33 | try 34 | { 35 | detector.Connect("can0"); 36 | auto proto = detector.DetectProtocolVersion(5); 37 | if(is_scout_mini && is_scout_omni) 38 | { 39 | if (proto == ProtocolVersion::AGX_V1) { 40 | std::cout << "Detected protocol: AGX_V1 omni" << std::endl; 41 | robot = std::unique_ptr( 42 | new ScoutMiniOmniRobot(ProtocolVersion::AGX_V1)); 43 | } else if (proto == ProtocolVersion::AGX_V2) { 44 | std::cout << "Detected protocol: AGX_V2 omni" << std::endl; 45 | robot = std::unique_ptr( 46 | new ScoutMiniOmniRobot(ProtocolVersion::AGX_V2)); 47 | } else { 48 | ROS_ERROR("Detected protocol: UNKONWN"); 49 | //return -1; 50 | } 51 | } 52 | else 53 | { 54 | if (proto == ProtocolVersion::AGX_V1) { 55 | std::cout << "Detected protocol: AGX_V1" << std::endl; 56 | robot = std::unique_ptr( 57 | new ScoutRobot(ProtocolVersion::AGX_V1, is_scout_mini)); 58 | } else if (proto == ProtocolVersion::AGX_V2) { 59 | std::cout << "Detected protocol: AGX_V2" << std::endl; 60 | robot = std::unique_ptr( 61 | new ScoutRobot(ProtocolVersion::AGX_V2, is_scout_mini)); 62 | } else { 63 | ROS_ERROR("Detected protocol: UNKONWN"); 64 | //return -1; 65 | } 66 | } 67 | if (robot == nullptr) 68 | ROS_ERROR("Failed to create robot object"); 69 | } 70 | catch (const std::exception error) 71 | { 72 | ROS_ERROR("please bringup up can or make sure can port exist"); 73 | ros::shutdown(); 74 | } 75 | ScoutROSMessenger messenger(robot.get(),&node,is_scout_omni); 76 | 77 | // fetch parameters before connecting to rt 78 | std::string port_name; 79 | private_node.param("port_name", port_name, std::string("can0")); 80 | private_node.param("odom_frame", messenger.odom_frame_, 81 | std::string("odom")); 82 | private_node.param("base_frame", messenger.base_frame_, 83 | std::string("base_link")); 84 | private_node.param("simulated_robot", messenger.simulated_robot_, 85 | false); 86 | private_node.param("control_rate", messenger.sim_control_rate_, 50); 87 | private_node.param("odom_topic_name", messenger.odom_topic_name_, 88 | std::string("odom")); 89 | private_node.param("pub_tf", messenger.pub_tf,true); 90 | if (!messenger.simulated_robot_) { 91 | // connect to robot and setup ROS subscription 92 | if (port_name.find("can") != std::string::npos) { 93 | robot->Connect(port_name); 94 | robot->EnableCommandedMode(); 95 | ROS_INFO("Using CAN bus to talk with the robot"); 96 | } else { 97 | // robot->Connect(port_name, 115200); 98 | ROS_INFO("Only CAN bus interface is supported for now"); 99 | } 100 | } 101 | 102 | messenger.SetupSubscription(); 103 | 104 | // publish robot state at 50Hz while listening to twist commands 105 | ros::Rate rate(50); 106 | while (ros::ok()) { 107 | if (!messenger.simulated_robot_) { 108 | 109 | messenger.PublishStateToROS(); 110 | 111 | } else { 112 | double linear, angular; 113 | 114 | messenger.GetCurrentMotionCmdForSim(linear, angular); 115 | 116 | messenger.PublishSimStateToROS(linear, angular); 117 | 118 | } 119 | ros::spinOnce(); 120 | rate.sleep(); 121 | } 122 | 123 | return 0; 124 | } 125 | -------------------------------------------------------------------------------- /scout_base/src/scout_messenger.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * scout_messenger.cpp 3 | * 4 | * Created on: Apr 26, 2019 22:14 5 | * Description: 6 | * 7 | * Copyright (c) 2019 Ruixiang Du (rdu) 8 | */ 9 | 10 | #include "scout_base/scout_messenger.hpp" 11 | 12 | #include 13 | 14 | #include "scout_msgs/ScoutStatus.h" 15 | #include "scout_msgs/ScoutBmsStatus.h" 16 | #include "scout_msgs/ScoutLightCmd.h" 17 | #include "scout_msgs/ScoutRsStatus.h" 18 | 19 | namespace westonrobot 20 | { 21 | ScoutROSMessenger::ScoutROSMessenger(ros::NodeHandle *nh) 22 | : scout_(nullptr), nh_(nh) {} 23 | 24 | ScoutROSMessenger::ScoutROSMessenger(ScoutRobot *scout, ros::NodeHandle *nh, bool is_scout_omni) 25 | : scout_(scout), nh_(nh) ,is_scout_omni(is_scout_omni){} 26 | 27 | void ScoutROSMessenger::SetupSubscription() 28 | { 29 | // odometry publisher 30 | odom_publisher_ = nh_->advertise(odom_topic_name_, 50); 31 | status_publisher_ = nh_->advertise("/scout_status", 10); 32 | BMS_status_publisher_ = nh_->advertise("/BMS_status", 10); 33 | rs_status_publisher_ = nh_->advertise("/rs_status",10); 34 | 35 | // cmd subscriber 36 | motion_cmd_subscriber_ = nh_->subscribe( 37 | "/cmd_vel", 5, &ScoutROSMessenger::TwistCmdCallback, this); 38 | light_cmd_subscriber_ = nh_->subscribe( 39 | "/scout_light_control", 5, &ScoutROSMessenger::LightCmdCallback, this); 40 | } 41 | 42 | void ScoutROSMessenger::TwistCmdCallback( 43 | const geometry_msgs::Twist::ConstPtr &msg) 44 | { 45 | if (!simulated_robot_) 46 | { 47 | if(is_scout_omni) 48 | dynamic_cast(scout_)->SetMotionCommand(msg->linear.x, msg->angular.z, msg->linear.y); 49 | else 50 | scout_->SetMotionCommand(msg->linear.x, msg->angular.z); 51 | } 52 | else 53 | { 54 | std::lock_guard guard(twist_mutex_); 55 | current_twist_ = *msg.get(); 56 | } 57 | // ROS_INFO("cmd received:%f, %f", msg->linear.x, msg->angular.z); 58 | } 59 | 60 | void ScoutROSMessenger::GetCurrentMotionCmdForSim(double &linear, 61 | double &angular) 62 | { 63 | std::lock_guard guard(twist_mutex_); 64 | linear = current_twist_.linear.x; 65 | angular = current_twist_.angular.z; 66 | } 67 | 68 | void ScoutROSMessenger::LightCmdCallback( 69 | const scout_msgs::ScoutLightCmd::ConstPtr &msg) 70 | { 71 | if (!simulated_robot_) 72 | { 73 | if (msg->enable_cmd_light_control) 74 | { 75 | LightCommandMessage cmd; 76 | 77 | switch (msg->front_mode) 78 | { 79 | case scout_msgs::ScoutLightCmd::LIGHT_CONST_OFF: 80 | { 81 | cmd.front_light.mode = CONST_OFF; 82 | break; 83 | } 84 | case scout_msgs::ScoutLightCmd::LIGHT_CONST_ON: 85 | { 86 | cmd.front_light.mode = CONST_ON; 87 | break; 88 | } 89 | case scout_msgs::ScoutLightCmd::LIGHT_BREATH: 90 | { 91 | cmd.front_light.mode = BREATH; 92 | break; 93 | } 94 | case scout_msgs::ScoutLightCmd::LIGHT_CUSTOM: 95 | { 96 | cmd.front_light.mode = CUSTOM; 97 | cmd.front_light.custom_value = msg->front_custom_value; 98 | break; 99 | } 100 | } 101 | 102 | switch (msg->rear_mode) 103 | { 104 | case scout_msgs::ScoutLightCmd::LIGHT_CONST_OFF: 105 | { 106 | cmd.rear_light.mode = CONST_OFF; 107 | break; 108 | } 109 | case scout_msgs::ScoutLightCmd::LIGHT_CONST_ON: 110 | { 111 | cmd.rear_light.mode = CONST_ON; 112 | break; 113 | } 114 | case scout_msgs::ScoutLightCmd::LIGHT_BREATH: 115 | { 116 | cmd.rear_light.mode = BREATH; 117 | break; 118 | } 119 | case scout_msgs::ScoutLightCmd::LIGHT_CUSTOM: 120 | { 121 | cmd.rear_light.mode = CUSTOM; 122 | cmd.rear_light.custom_value = msg->rear_custom_value; 123 | break; 124 | } 125 | } 126 | 127 | scout_->SetLightCommand(cmd.front_light.mode,cmd.front_light.custom_value,cmd.rear_light.mode,cmd.rear_light.custom_value); 128 | } 129 | else 130 | { 131 | scout_->DisableLightControl(); 132 | } 133 | } 134 | else 135 | { 136 | std::cout << "simulated robot received light control cmd" << std::endl; 137 | } 138 | } 139 | 140 | void ScoutROSMessenger::PublishStateToROS() 141 | { 142 | current_time_ = ros::Time::now(); 143 | double dt = (current_time_ - last_time_).toSec(); 144 | 145 | static bool init_run = true; 146 | if (init_run) 147 | { 148 | last_time_ = current_time_; 149 | init_run = false; 150 | return; 151 | } 152 | 153 | auto robot_state = scout_->GetRobotState(); 154 | auto actuator_state = scout_->GetActuatorState(); 155 | 156 | // publish scout state message 157 | scout_msgs::ScoutStatus status_msg; 158 | scout_msgs::ScoutBmsStatus bms_status; 159 | scout_msgs::ScoutRsStatus rs_status_msgs; 160 | 161 | status_msg.header.stamp = current_time_; 162 | status_msg.linear_velocity = robot_state.motion_state.linear_velocity; 163 | status_msg.angular_velocity = robot_state.motion_state.angular_velocity; 164 | if(is_scout_omni) 165 | status_msg.lateral_velocity = robot_state.motion_state.lateral_velocity; 166 | status_msg.base_state = robot_state.system_state.vehicle_state; 167 | status_msg.control_mode = robot_state.system_state.control_mode; 168 | status_msg.fault_code = robot_state.system_state.error_code; 169 | status_msg.battery_voltage = robot_state.system_state.battery_voltage; 170 | status_msg.light_control_enabled = robot_state.light_state.enable_cmd_ctrl; 171 | status_msg.front_light_state.mode = robot_state.light_state.front_light.mode; 172 | status_msg.front_light_state.custom_value = robot_state.light_state.front_light.custom_value; 173 | status_msg.rear_light_state.mode = robot_state.light_state.rear_light.mode; 174 | status_msg.rear_light_state.custom_value = robot_state.light_state.rear_light.custom_value; 175 | 176 | rs_status_msgs.header.stamp = current_time_; 177 | rs_status_msgs.stick_left_h = robot_state.rc_state.stick_left_h; 178 | rs_status_msgs.stick_left_v = robot_state.rc_state.stick_left_v; 179 | rs_status_msgs.stick_right_h = robot_state.rc_state.stick_right_h; 180 | rs_status_msgs.stick_right_v = robot_state.rc_state.stick_right_v; 181 | 182 | rs_status_msgs.swa = robot_state.rc_state.swa; 183 | rs_status_msgs.swb = robot_state.rc_state.swb; 184 | rs_status_msgs.swc = robot_state.rc_state.swc; 185 | rs_status_msgs.swd = robot_state.rc_state.swd; 186 | 187 | rs_status_msgs.var_a = robot_state.rc_state.var_a; 188 | 189 | 190 | if(scout_->GetParserProtocolVersion() == ProtocolVersion::AGX_V1) 191 | { 192 | for (int i = 0; i < 4; ++i) 193 | { 194 | status_msg.motor_states[i].current = actuator_state.actuator_state[i].current; 195 | status_msg.motor_states[i].rpm = actuator_state.actuator_state[i].rpm; 196 | status_msg.motor_states[i].temperature = actuator_state.actuator_state[i].motor_temp; 197 | status_msg.driver_states[i].driver_temperature = actuator_state.actuator_state[i].driver_temp; 198 | } 199 | } 200 | else 201 | { 202 | for (int i = 0; i < 4; ++i) 203 | { 204 | status_msg.motor_states[i].current = actuator_state.actuator_hs_state[i].current; 205 | status_msg.motor_states[i].rpm = actuator_state.actuator_hs_state[i].rpm; 206 | status_msg.motor_states[i].temperature = actuator_state.actuator_ls_state[i].motor_temp; 207 | status_msg.motor_states[i].motor_pose = actuator_state.actuator_hs_state[i].pulse_count; 208 | status_msg.driver_states[i].driver_state = actuator_state.actuator_ls_state[i].driver_state; 209 | status_msg.driver_states[i].driver_voltage = actuator_state.actuator_ls_state[i].driver_voltage; 210 | status_msg.driver_states[i].driver_temperature = actuator_state.actuator_ls_state[i].driver_temp; 211 | } 212 | 213 | 214 | } 215 | 216 | // bms_status.SOC = state.SOC; 217 | // bms_status.SOH = state.SOH; 218 | // bms_status.battery_voltage = state.bms_battery_voltage; 219 | // bms_status.battery_current = state.battery_current; 220 | // bms_status.battery_temperature = state.battery_temperature; 221 | // bms_status.Alarm_Status_1 = state.Alarm_Status_1; 222 | // bms_status.Alarm_Status_2 = state.Alarm_Status_2; 223 | // bms_status.Warning_Status_1 = state.Warning_Status_1; 224 | // bms_status.Warning_Status_2 = state.Warning_Status_2; 225 | BMS_status_publisher_.publish(bms_status); 226 | 227 | rs_status_publisher_.publish(rs_status_msgs); 228 | status_publisher_.publish(status_msg); 229 | 230 | 231 | // publish odometry and tf 232 | if(is_scout_omni) 233 | PublishOdometryToROSOmni(robot_state.motion_state.linear_velocity, 234 | robot_state.motion_state.angular_velocity, 235 | robot_state.motion_state.lateral_velocity,dt); 236 | else 237 | PublishOdometryToROS(robot_state.motion_state.linear_velocity, robot_state.motion_state.angular_velocity, dt); 238 | 239 | 240 | // record time for next integration 241 | last_time_ = current_time_; 242 | } 243 | 244 | void ScoutROSMessenger::PublishSimStateToROS(double linear, double angular) 245 | { 246 | current_time_ = ros::Time::now(); 247 | 248 | double dt = (current_time_ - last_time_).toSec(); 249 | 250 | static bool init_run = true; 251 | if (init_run) 252 | { 253 | last_time_ = current_time_; 254 | init_run = false; 255 | return; 256 | } 257 | 258 | // publish scout state message 259 | scout_msgs::ScoutStatus status_msg; 260 | 261 | status_msg.header.stamp = current_time_; 262 | 263 | status_msg.linear_velocity = linear; 264 | status_msg.angular_velocity = angular; 265 | 266 | status_msg.base_state = 0x00; 267 | status_msg.control_mode = 0x01; 268 | status_msg.fault_code = 0x00; 269 | status_msg.battery_voltage = 29.5; 270 | status_msg.light_control_enabled = false; 271 | 272 | status_publisher_.publish(status_msg); 273 | 274 | // publish odometry and tf 275 | PublishOdometryToROS(linear, angular, dt); 276 | 277 | // record time for next integration 278 | last_time_ = current_time_; 279 | } 280 | 281 | void ScoutROSMessenger::PublishOdometryToROS(double linear, double angular, 282 | double dt) 283 | { 284 | // perform numerical integration to get an estimation of pose 285 | linear_speed_ = linear; 286 | angular_speed_ = angular; 287 | 288 | double d_x = linear_speed_ * std::cos(theta_) * dt; 289 | double d_y = linear_speed_ * std::sin(theta_) * dt; 290 | double d_theta = angular_speed_ * dt; 291 | 292 | position_x_ += d_x; 293 | position_y_ += d_y; 294 | theta_ += d_theta; 295 | 296 | geometry_msgs::Quaternion odom_quat = tf::createQuaternionMsgFromYaw(theta_); 297 | 298 | // publish tf transformation 299 | geometry_msgs::TransformStamped tf_msg; 300 | tf_msg.header.stamp = current_time_; 301 | tf_msg.header.frame_id = odom_frame_; 302 | tf_msg.child_frame_id = base_frame_; 303 | 304 | tf_msg.transform.translation.x = position_x_; 305 | tf_msg.transform.translation.y = position_y_; 306 | tf_msg.transform.translation.z = 0.0; 307 | tf_msg.transform.rotation = odom_quat; 308 | 309 | if(pub_tf)tf_broadcaster_.sendTransform(tf_msg); 310 | 311 | // publish odometry and tf messages 312 | nav_msgs::Odometry odom_msg; 313 | odom_msg.header.stamp = current_time_; 314 | odom_msg.header.frame_id = odom_frame_; 315 | odom_msg.child_frame_id = base_frame_; 316 | 317 | odom_msg.pose.pose.position.x = position_x_; 318 | odom_msg.pose.pose.position.y = position_y_; 319 | odom_msg.pose.pose.position.z = 0.0; 320 | odom_msg.pose.pose.orientation = odom_quat; 321 | 322 | odom_msg.twist.twist.linear.x = linear_speed_; 323 | odom_msg.twist.twist.linear.y = 0.0; 324 | odom_msg.twist.twist.angular.z = angular_speed_; 325 | 326 | odom_publisher_.publish(odom_msg); 327 | } 328 | 329 | //TODO if the omni mode is stable, merge this function into PublishOdometryToROS 330 | void ScoutROSMessenger::PublishOdometryToROSOmni(double linear, double angular, double lateral_velocity, double dt) 331 | { 332 | // perform numerical integration to get an estimation of pose 333 | linear_speed_ = linear; 334 | angular_speed_ = angular; 335 | lateral_speed_ = lateral_velocity; 336 | 337 | double d_x = (linear_speed_ * std::cos(theta_) - lateral_speed_ * std::sin(theta_)) * dt; 338 | double d_y = (linear_speed_ * std::sin(theta_) + lateral_speed_ * std::cos(theta_)) * dt; 339 | double d_theta = angular_speed_ * dt; 340 | 341 | position_x_ += d_x; 342 | position_y_ += d_y; 343 | theta_ += d_theta; 344 | 345 | geometry_msgs::Quaternion odom_quat = tf::createQuaternionMsgFromYaw(theta_); 346 | 347 | // publish tf transformation 348 | geometry_msgs::TransformStamped tf_msg; 349 | tf_msg.header.stamp = current_time_; 350 | tf_msg.header.frame_id = odom_frame_; 351 | tf_msg.child_frame_id = base_frame_; 352 | 353 | tf_msg.transform.translation.x = position_x_; 354 | tf_msg.transform.translation.y = position_y_; 355 | tf_msg.transform.translation.z = 0.0; 356 | tf_msg.transform.rotation = odom_quat; 357 | 358 | if(pub_tf)tf_broadcaster_.sendTransform(tf_msg); 359 | 360 | // publish odometry and tf messages 361 | nav_msgs::Odometry odom_msg; 362 | odom_msg.header.stamp = current_time_; 363 | odom_msg.header.frame_id = odom_frame_; 364 | odom_msg.child_frame_id = base_frame_; 365 | 366 | odom_msg.pose.pose.position.x = position_x_; 367 | odom_msg.pose.pose.position.y = position_y_; 368 | odom_msg.pose.pose.position.z = 0.0; 369 | odom_msg.pose.pose.orientation = odom_quat; 370 | 371 | odom_msg.twist.twist.linear.x = linear_speed_; 372 | odom_msg.twist.twist.linear.y = 0.0; 373 | odom_msg.twist.twist.angular.z = angular_speed_; 374 | 375 | odom_publisher_.publish(odom_msg); 376 | } 377 | 378 | } // namespace westonrobot 379 | -------------------------------------------------------------------------------- /scout_bringup/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(scout_bringup) 3 | 4 | ## Compile as C++11, supported in ROS Kinetic and newer 5 | # add_compile_options(-std=c++11) 6 | 7 | ## Find catkin macros and libraries 8 | ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) 9 | ## is used, also find other catkin packages 10 | find_package(catkin REQUIRED COMPONENTS 11 | roscpp 12 | rospy 13 | std_msgs 14 | ) 15 | 16 | ## System dependencies are found with CMake's conventions 17 | # find_package(Boost REQUIRED COMPONENTS system) 18 | 19 | 20 | ## Uncomment this if the package has a setup.py. This macro ensures 21 | ## modules and global scripts declared therein get installed 22 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 23 | # catkin_python_setup() 24 | 25 | ################################################ 26 | ## Declare ROS messages, services and actions ## 27 | ################################################ 28 | 29 | ## To declare and build messages, services or actions from within this 30 | ## package, follow these steps: 31 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 32 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 33 | ## * In the file package.xml: 34 | ## * add a build_depend tag for "message_generation" 35 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 36 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 37 | ## but can be declared for certainty nonetheless: 38 | ## * add a exec_depend tag for "message_runtime" 39 | ## * In this file (CMakeLists.txt): 40 | ## * add "message_generation" and every package in MSG_DEP_SET to 41 | ## find_package(catkin REQUIRED COMPONENTS ...) 42 | ## * add "message_runtime" and every package in MSG_DEP_SET to 43 | ## catkin_package(CATKIN_DEPENDS ...) 44 | ## * uncomment the add_*_files sections below as needed 45 | ## and list every .msg/.srv/.action file to be processed 46 | ## * uncomment the generate_messages entry below 47 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 48 | 49 | ## Generate messages in the 'msg' folder 50 | # add_message_files( 51 | # FILES 52 | # Message1.msg 53 | # Message2.msg 54 | # ) 55 | 56 | ## Generate services in the 'srv' folder 57 | # add_service_files( 58 | # FILES 59 | # Service1.srv 60 | # Service2.srv 61 | # ) 62 | 63 | ## Generate actions in the 'action' folder 64 | # add_action_files( 65 | # FILES 66 | # Action1.action 67 | # Action2.action 68 | # ) 69 | 70 | ## Generate added messages and services with any dependencies listed here 71 | # generate_messages( 72 | # DEPENDENCIES 73 | # std_msgs 74 | # ) 75 | 76 | ################################################ 77 | ## Declare ROS dynamic reconfigure parameters ## 78 | ################################################ 79 | 80 | ## To declare and build dynamic reconfigure parameters within this 81 | ## package, follow these steps: 82 | ## * In the file package.xml: 83 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 84 | ## * In this file (CMakeLists.txt): 85 | ## * add "dynamic_reconfigure" to 86 | ## find_package(catkin REQUIRED COMPONENTS ...) 87 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 88 | ## and list every .cfg file to be processed 89 | 90 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 91 | # generate_dynamic_reconfigure_options( 92 | # cfg/DynReconf1.cfg 93 | # cfg/DynReconf2.cfg 94 | # ) 95 | 96 | ################################### 97 | ## catkin specific configuration ## 98 | ################################### 99 | ## The catkin_package macro generates cmake config files for your package 100 | ## Declare things to be passed to dependent projects 101 | ## INCLUDE_DIRS: uncomment this if your package contains header files 102 | ## LIBRARIES: libraries you create in this project that dependent projects also need 103 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 104 | ## DEPENDS: system dependencies of this project that dependent projects also need 105 | catkin_package( 106 | # INCLUDE_DIRS include 107 | # LIBRARIES scout_bringup 108 | # CATKIN_DEPENDS roscpp rospy std_msgs 109 | # DEPENDS system_lib 110 | ) 111 | 112 | ########### 113 | ## Build ## 114 | ########### 115 | 116 | ## Specify additional locations of header files 117 | ## Your package locations should be listed before other locations 118 | include_directories( 119 | # include 120 | ${catkin_INCLUDE_DIRS} 121 | ) 122 | 123 | ## Declare a C++ library 124 | # add_library(${PROJECT_NAME} 125 | # src/${PROJECT_NAME}/scout_bringup.cpp 126 | # ) 127 | 128 | ## Add cmake target dependencies of the library 129 | ## as an example, code may need to be generated before libraries 130 | ## either from message generation or dynamic reconfigure 131 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 132 | 133 | ## Declare a C++ executable 134 | ## With catkin_make all packages are built within a single CMake context 135 | ## The recommended prefix ensures that target names across packages don't collide 136 | # add_executable(${PROJECT_NAME}_node src/scout_bringup_node.cpp) 137 | 138 | ## Rename C++ executable without prefix 139 | ## The above recommended prefix causes long target names, the following renames the 140 | ## target back to the shorter version for ease of user use 141 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 142 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 143 | 144 | ## Add cmake target dependencies of the executable 145 | ## same as for the library above 146 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 147 | 148 | ## Specify libraries to link a library or executable target against 149 | # target_link_libraries(${PROJECT_NAME}_node 150 | # ${catkin_LIBRARIES} 151 | # ) 152 | 153 | ############# 154 | ## Install ## 155 | ############# 156 | 157 | install(DIRECTORY launch scripts 158 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}) 159 | 160 | 161 | # all install targets should use catkin DESTINATION variables 162 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 163 | 164 | ## Mark executable scripts (Python etc.) for installation 165 | ## in contrast to setup.py, you can choose the destination 166 | # install(PROGRAMS 167 | # scripts/my_python_script 168 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 169 | # ) 170 | 171 | ## Mark executables and/or libraries for installation 172 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node 173 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 174 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 175 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 176 | # ) 177 | 178 | ## Mark cpp header files for installation 179 | # install(DIRECTORY include/${PROJECT_NAME}/ 180 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 181 | # FILES_MATCHING PATTERN "*.h" 182 | # PATTERN ".svn" EXCLUDE 183 | # ) 184 | 185 | ## Mark other files for installation (e.g. launch and bag files, etc.) 186 | # install(FILES 187 | # # myfile1 188 | # # myfile2 189 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 190 | # ) 191 | 192 | ############# 193 | ## Testing ## 194 | ############# 195 | 196 | ## Add gtest based cpp test target and link libraries 197 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_scout_bringup.cpp) 198 | # if(TARGET ${PROJECT_NAME}-test) 199 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 200 | # endif() 201 | 202 | ## Add folders to be run by python nosetests 203 | # catkin_add_nosetests(test) 204 | -------------------------------------------------------------------------------- /scout_bringup/launch/scout_mini_robot_base.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /scout_bringup/launch/scout_miniomni_robot_base.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /scout_bringup/launch/scout_robot_base.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /scout_bringup/launch/scout_simulated_robot.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /scout_bringup/launch/scout_teleop_keyboard.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /scout_bringup/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | scout_bringup 4 | 0.0.0 5 | The scout_bringup package 6 | 7 | rdu 8 | 9 | 10 | 11 | 12 | 13 | TODO 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | catkin 42 | roscpp 43 | rospy 44 | std_msgs 45 | roscpp 46 | rospy 47 | std_msgs 48 | roscpp 49 | rospy 50 | std_msgs 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /scout_bringup/scripts/bringup_can2usb.bash: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # bring up can interface 4 | sudo ip link set can0 up type can bitrate 500000 -------------------------------------------------------------------------------- /scout_bringup/scripts/setup_can2usb.bash: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # enable kernel module: gs_usb 4 | sudo modprobe gs_usb 5 | 6 | # bring up can interface 7 | sudo ip link set can0 up type can bitrate 500000 8 | 9 | # install can utils 10 | sudo apt install -y can-utils -------------------------------------------------------------------------------- /scout_description/CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2 | Changelog for package husky_description 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | 5 | 0.4.2 (2019-12-11) 6 | ------------------ 7 | 8 | 0.4.1 (2019-09-30) 9 | ------------------ 10 | 11 | 0.4.0 (2019-08-01) 12 | ------------------ 13 | 14 | 0.3.4 (2019-08-01) 15 | ------------------ 16 | 17 | 0.3.3 (2019-04-18) 18 | ------------------ 19 | * Fixed bumper extensions, cleaned up collision meshes 20 | * Contributors: Dave Niewinski 21 | 22 | 0.3.2 (2019-03-25) 23 | ------------------ 24 | * Added some additional frames on the top plates and an environment variable for diabling the user rails 25 | * Added env var to allow a 7cm forward bumper extension (`#92 `_) 26 | * Added env var to allow for extendable front bumper 27 | * Fix weird spacing 28 | * Uploaded bumper extension meshes 29 | * Allowed for different lengths of bumper extensions 30 | * Contributors: Dave Niewinski, Guy Stoppi 31 | 32 | 0.3.1 (2018-08-02) 33 | ------------------ 34 | * Removed unnecessary dae objects and duplicate vertices 35 | * Contributors: Dave Niewinski 36 | 37 | 0.3.0 (2018-04-11) 38 | ------------------ 39 | * Updated all package versions to 0.2.6. 40 | * Added a large top plate (used for waterproofing upgrade and UR5 upgrade) and an environment variable for controlling it HUSKY_LARGE_TOP_PLATE 41 | * changed Husky wheel radius, a Husky outdoor tire is 13 inchs (0.3302m) 42 | * [husky_description] Updated inertial parameters. 43 | * [husky_description] Fixed depreciated syntax. 44 | * Remove defunct email address 45 | * Updated maintainers. 46 | * Changes for xacro updates in kinetic. 47 | * Add interface definitions 48 | * Purge more UR; Implement urdf_extras 49 | * Update URDF for multirobot 50 | * Move packages into monorepo for kinetic; strip out ur packages 51 | * wheel.urdf.xacro: swap iyy, izz inertias 52 | Fixes `#34 `_. 53 | * Contributors: Dave Niewinski, Martin Cote, Paul Bovbel, Steven Peters, Tony Baltovski 54 | 55 | 0.2.7 (2015-12-31) 56 | ------------------ 57 | * Fixed indent. 58 | * Added Sick LMS1XX URDF. 59 | * Contributors: Tony Baltovski 60 | 61 | 0.2.6 (2015-07-08) 62 | ------------------ 63 | * Adjust Kinect angle so it doesn't hit top plate 64 | * Contributors: Paul Bovbel 65 | 66 | 0.2.5 (2015-04-16) 67 | ------------------ 68 | * Add standard mount for lms1xx 69 | * Contributors: Paul Bovbel 70 | 71 | 0.2.4 (2015-04-13) 72 | ------------------ 73 | * Add argument to enable/disable top plate 74 | * Fix sensor arch name 75 | * Fix conflict with underlay 76 | When using -z check, underlayed instances of husky_gazebo would override overlays. 77 | * Update top plate model 78 | * Contributors: Paul Bovbel 79 | 80 | 0.2.3 (2015-04-08) 81 | ------------------ 82 | * Integrate husky_customization workflow 83 | * Disable all accessories by default 84 | * Contributors: Paul Bovbel 85 | 86 | 0.2.2 (2015-03-23) 87 | ------------------ 88 | * Fix package urls 89 | * Contributors: Paul Bovbel 90 | 91 | 0.2.1 (2015-03-23) 92 | ------------------ 93 | * Port stl to dae format, removing material/gazebo colours 94 | * Make base_footprint a child of base_link 95 | * Contributors: Paul Bovbel 96 | 97 | 0.2.0 (2015-03-23) 98 | ------------------ 99 | * Add Kinect, UR5 peripherals 100 | * Contributors: Paul Bovbel, Devon Ash 101 | 102 | 0.1.2 (2015-01-30) 103 | ------------------ 104 | * Update maintainers and description 105 | * Get rid of chassis_link, switch to base_footprint and base_link 106 | * Switch to NED orientation for UM6 standard package 107 | * Contributors: Paul Bovbel 108 | 109 | 0.1.1 (2015-01-14) 110 | ------------------ 111 | * Remove multirobot changes, experiment later 112 | * Contributors: Paul Bovbel 113 | 114 | 0.1.0 (2015-01-13) 115 | ------------------ 116 | * Major refactor for indigo release: 117 | * base_link is now located on the ground plane, while chassis_link 118 | * refactored joint names for consistency with Jackal and Grizzly for ros_control 119 | * moved plugins requiring gazebo dependencies to husky_gazebo (imu, gps, lidar, ros_control) 120 | * initial prefixing for multirobot 121 | * Contributors: Alex Bencz, James Servos, Mike Purvis, Paul Bovbel, Prasenjit Mukherjee, y22ma 122 | 123 | 0.0.2 (2013-09-30) 124 | ------------------ 125 | * Renamed /models folder to /meshes to follow the convention of other gazebo simulation packages. 126 | * Changed the base.urdf.xacro to use base_footprint as the parent frame. For some reason, the new Gazebo paints all parts the same color as base_link when base_link is the parent. 127 | 128 | 0.0.1 (2013-09-11) 129 | ------------------ 130 | * Move to model-only launchfile. 131 | * Catkinize package, add install targets. 132 | * husky_description moved up to repository root. 133 | -------------------------------------------------------------------------------- /scout_description/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(scout_description) 3 | 4 | find_package(catkin REQUIRED COMPONENTS roslaunch) 5 | 6 | catkin_package() 7 | 8 | roslaunch_add_file_check(launch) 9 | 10 | install( 11 | DIRECTORY launch meshes urdf 12 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 13 | ) 14 | -------------------------------------------------------------------------------- /scout_description/launch/display_scout_mini.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /scout_description/launch/display_scout_v2.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /scout_description/launch/gazebo.launch: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 15 | 20 | 21 | -------------------------------------------------------------------------------- /scout_description/launch/scout_mini_stock.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /scout_description/launch/scout_v2_stock.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /scout_description/meshes/1_Link.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agilexrobotics/scout_ros/01e07881cdc566c3a657e288c59a75577992d13e/scout_description/meshes/1_Link.STL -------------------------------------------------------------------------------- /scout_description/meshes/2_Link.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agilexrobotics/scout_ros/01e07881cdc566c3a657e288c59a75577992d13e/scout_description/meshes/2_Link.STL -------------------------------------------------------------------------------- /scout_description/meshes/3_Link.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agilexrobotics/scout_ros/01e07881cdc566c3a657e288c59a75577992d13e/scout_description/meshes/3_Link.STL -------------------------------------------------------------------------------- /scout_description/meshes/4_Link.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agilexrobotics/scout_ros/01e07881cdc566c3a657e288c59a75577992d13e/scout_description/meshes/4_Link.STL -------------------------------------------------------------------------------- /scout_description/meshes/scout_mini_base_link.STL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/agilexrobotics/scout_ros/01e07881cdc566c3a657e288c59a75577992d13e/scout_description/meshes/scout_mini_base_link.STL -------------------------------------------------------------------------------- /scout_description/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | scout_description 4 | 0.4.2 5 | AgileX Scout URDF description 6 | 7 | 8 | BSD 9 | 10 | catkin 11 | roslaunch 12 | urdf 13 | xacro 14 | lms1xx 15 | robot_state_publisher 16 | joint_state_publisher_gui 17 | joint_state_publisher 18 | rviz 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /scout_description/rviz/model_display.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | Splitter Ratio: 0.42352941632270813 10 | Tree Height: 719 11 | - Class: rviz/Selection 12 | Name: Selection 13 | - Class: rviz/Tool Properties 14 | Expanded: 15 | - /2D Pose Estimate1 16 | - /2D Nav Goal1 17 | - /Publish Point1 18 | Name: Tool Properties 19 | Splitter Ratio: 0.5886790156364441 20 | - Class: rviz/Views 21 | Expanded: 22 | - /Current View1 23 | Name: Views 24 | Splitter Ratio: 0.5 25 | - Class: rviz/Time 26 | Name: Time 27 | SyncMode: 0 28 | SyncSource: "" 29 | Preferences: 30 | PromptSaveOnExit: true 31 | Toolbars: 32 | toolButtonStyle: 2 33 | Visualization Manager: 34 | Class: "" 35 | Displays: 36 | - Alpha: 0.5 37 | Cell Size: 1 38 | Class: rviz/Grid 39 | Color: 160; 160; 164 40 | Enabled: true 41 | Line Style: 42 | Line Width: 0.029999999329447746 43 | Value: Lines 44 | Name: Grid 45 | Normal Cell Count: 0 46 | Offset: 47 | X: 0 48 | Y: 0 49 | Z: 0 50 | Plane: XY 51 | Plane Cell Count: 10 52 | Reference Frame: 53 | Value: true 54 | - Alpha: 1 55 | Class: rviz/RobotModel 56 | Collision Enabled: false 57 | Enabled: true 58 | Links: 59 | All Links Enabled: true 60 | Expand Joint Details: false 61 | Expand Link Details: false 62 | Expand Tree: false 63 | Link Tree Style: Links in Alphabetic Order 64 | base_link: 65 | Alpha: 1 66 | Show Axes: false 67 | Show Trail: false 68 | Value: true 69 | front_left_wheel_link: 70 | Alpha: 1 71 | Show Axes: false 72 | Show Trail: false 73 | Value: true 74 | front_right_wheel_link: 75 | Alpha: 1 76 | Show Axes: false 77 | Show Trail: false 78 | Value: true 79 | inertial_link: 80 | Alpha: 1 81 | Show Axes: false 82 | Show Trail: false 83 | rear_left_wheel_link: 84 | Alpha: 1 85 | Show Axes: false 86 | Show Trail: false 87 | Value: true 88 | rear_right_wheel_link: 89 | Alpha: 1 90 | Show Axes: false 91 | Show Trail: false 92 | Value: true 93 | Name: RobotModel 94 | Robot Description: robot_description 95 | TF Prefix: "" 96 | Update Interval: 0 97 | Value: true 98 | Visual Enabled: true 99 | - Class: rviz/TF 100 | Enabled: true 101 | Frame Timeout: 15 102 | Frames: 103 | All Enabled: true 104 | base_link: 105 | Value: true 106 | front_left_wheel_link: 107 | Value: true 108 | front_right_wheel_link: 109 | Value: true 110 | inertial_link: 111 | Value: true 112 | rear_left_wheel_link: 113 | Value: true 114 | rear_right_wheel_link: 115 | Value: true 116 | Marker Alpha: 1 117 | Marker Scale: 1 118 | Name: TF 119 | Show Arrows: false 120 | Show Axes: true 121 | Show Names: true 122 | Tree: 123 | base_link: 124 | front_left_wheel_link: 125 | {} 126 | front_right_wheel_link: 127 | {} 128 | inertial_link: 129 | {} 130 | rear_left_wheel_link: 131 | {} 132 | rear_right_wheel_link: 133 | {} 134 | Update Interval: 0 135 | Value: true 136 | Enabled: true 137 | Global Options: 138 | Background Color: 48; 48; 48 139 | Default Light: true 140 | Fixed Frame: base_link 141 | Frame Rate: 30 142 | Name: root 143 | Tools: 144 | - Class: rviz/Interact 145 | Hide Inactive Objects: true 146 | - Class: rviz/MoveCamera 147 | - Class: rviz/Select 148 | - Class: rviz/FocusCamera 149 | - Class: rviz/Measure 150 | - Class: rviz/SetInitialPose 151 | Theta std deviation: 0.2617993950843811 152 | Topic: /initialpose 153 | X std deviation: 0.5 154 | Y std deviation: 0.5 155 | - Class: rviz/SetGoal 156 | Topic: /move_base_simple/goal 157 | - Class: rviz/PublishPoint 158 | Single click: true 159 | Topic: /clicked_point 160 | Value: true 161 | Views: 162 | Current: 163 | Class: rviz/Orbit 164 | Distance: 2.1784212589263916 165 | Enable Stereo Rendering: 166 | Stereo Eye Separation: 0.05999999865889549 167 | Stereo Focal Distance: 1 168 | Swap Stereo Eyes: false 169 | Value: false 170 | Field of View: 0.7853981852531433 171 | Focal Point: 172 | X: 0.07928819954395294 173 | Y: -0.07183374464511871 174 | Z: -0.08324597030878067 175 | Focal Shape Fixed Size: true 176 | Focal Shape Size: 0.05000000074505806 177 | Invert Z Axis: false 178 | Name: Current View 179 | Near Clip Distance: 0.009999999776482582 180 | Pitch: 0.8697980642318726 181 | Target Frame: 182 | Yaw: 3.790827751159668 183 | Saved: ~ 184 | Window Geometry: 185 | Displays: 186 | collapsed: false 187 | Height: 1016 188 | Hide Left Dock: false 189 | Hide Right Dock: true 190 | QMainWindow State: 000000ff00000000fd0000000400000000000001560000035afc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000035a000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002b0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000002b0000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007380000003efc0100000002fb0000000800540069006d0065010000000000000738000003bc00fffffffb0000000800540069006d00650100000000000004500000000000000000000005dc0000035a00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 191 | Selection: 192 | collapsed: false 193 | Time: 194 | collapsed: false 195 | Tool Properties: 196 | collapsed: false 197 | Views: 198 | collapsed: true 199 | Width: 1848 200 | X: 72 201 | Y: 27 202 | -------------------------------------------------------------------------------- /scout_description/rviz/navigation.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | - /RobotModel1 10 | Splitter Ratio: 0.5 11 | Tree Height: 746 12 | - Class: rviz/Selection 13 | Name: Selection 14 | - Class: rviz/Tool Properties 15 | Expanded: 16 | - /2D Pose Estimate1 17 | - /2D Nav Goal1 18 | - /Publish Point1 19 | Name: Tool Properties 20 | Splitter Ratio: 0.5886790156364441 21 | - Class: rviz/Views 22 | Expanded: 23 | - /Current View1 24 | Name: Views 25 | Splitter Ratio: 0.5 26 | - Class: rviz/Time 27 | Name: Time 28 | SyncMode: 0 29 | SyncSource: "" 30 | Preferences: 31 | PromptSaveOnExit: true 32 | Toolbars: 33 | toolButtonStyle: 2 34 | Visualization Manager: 35 | Class: "" 36 | Displays: 37 | - Alpha: 0.5 38 | Cell Size: 1 39 | Class: rviz/Grid 40 | Color: 160; 160; 164 41 | Enabled: true 42 | Line Style: 43 | Line Width: 0.029999999329447746 44 | Value: Lines 45 | Name: Grid 46 | Normal Cell Count: 0 47 | Offset: 48 | X: 0 49 | Y: 0 50 | Z: 0 51 | Plane: XY 52 | Plane Cell Count: 10 53 | Reference Frame: 54 | Value: true 55 | - Alpha: 1 56 | Class: rviz/RobotModel 57 | Collision Enabled: false 58 | Enabled: true 59 | Links: 60 | All Links Enabled: true 61 | Expand Joint Details: false 62 | Expand Link Details: false 63 | Expand Tree: false 64 | Link Tree Style: Links in Alphabetic Order 65 | base_link: 66 | Alpha: 1 67 | Show Axes: false 68 | Show Trail: false 69 | Value: true 70 | front_left_wheel_link: 71 | Alpha: 1 72 | Show Axes: false 73 | Show Trail: false 74 | Value: true 75 | front_right_wheel_link: 76 | Alpha: 1 77 | Show Axes: false 78 | Show Trail: false 79 | Value: true 80 | inertial_link: 81 | Alpha: 1 82 | Show Axes: false 83 | Show Trail: false 84 | rear_left_wheel_link: 85 | Alpha: 1 86 | Show Axes: false 87 | Show Trail: false 88 | Value: true 89 | rear_right_wheel_link: 90 | Alpha: 1 91 | Show Axes: false 92 | Show Trail: false 93 | Value: true 94 | Name: RobotModel 95 | Robot Description: robot_description 96 | TF Prefix: "" 97 | Update Interval: 0 98 | Value: true 99 | Visual Enabled: true 100 | - Class: rviz/TF 101 | Enabled: true 102 | Frame Timeout: 15 103 | Frames: 104 | All Enabled: true 105 | base_link: 106 | Value: true 107 | front_left_wheel_link: 108 | Value: true 109 | front_right_wheel_link: 110 | Value: true 111 | inertial_link: 112 | Value: true 113 | rear_left_wheel_link: 114 | Value: true 115 | rear_right_wheel_link: 116 | Value: true 117 | Marker Alpha: 1 118 | Marker Scale: 1 119 | Name: TF 120 | Show Arrows: true 121 | Show Axes: true 122 | Show Names: true 123 | Tree: 124 | base_link: 125 | front_left_wheel_link: 126 | {} 127 | front_right_wheel_link: 128 | {} 129 | inertial_link: 130 | {} 131 | rear_left_wheel_link: 132 | {} 133 | rear_right_wheel_link: 134 | {} 135 | Update Interval: 0 136 | Value: true 137 | Enabled: true 138 | Global Options: 139 | Background Color: 48; 48; 48 140 | Default Light: true 141 | Fixed Frame: base_link 142 | Frame Rate: 30 143 | Name: root 144 | Tools: 145 | - Class: rviz/Interact 146 | Hide Inactive Objects: true 147 | - Class: rviz/MoveCamera 148 | - Class: rviz/Select 149 | - Class: rviz/FocusCamera 150 | - Class: rviz/Measure 151 | - Class: rviz/SetInitialPose 152 | Theta std deviation: 0.2617993950843811 153 | Topic: /initialpose 154 | X std deviation: 0.5 155 | Y std deviation: 0.5 156 | - Class: rviz/SetGoal 157 | Topic: /move_base_simple/goal 158 | - Class: rviz/PublishPoint 159 | Single click: true 160 | Topic: /clicked_point 161 | Value: true 162 | Views: 163 | Current: 164 | Class: rviz/Orbit 165 | Distance: 2.9432930946350098 166 | Enable Stereo Rendering: 167 | Stereo Eye Separation: 0.05999999865889549 168 | Stereo Focal Distance: 1 169 | Swap Stereo Eyes: false 170 | Value: false 171 | Field of View: 0.7853981852531433 172 | Focal Point: 173 | X: 0.027046792209148407 174 | Y: -0.03490818291902542 175 | Z: -0.09952529519796371 176 | Focal Shape Fixed Size: true 177 | Focal Shape Size: 0.05000000074505806 178 | Invert Z Axis: false 179 | Name: Current View 180 | Near Clip Distance: 0.009999999776482582 181 | Pitch: 0.5447957515716553 182 | Target Frame: 183 | Yaw: 4.27542781829834 184 | Saved: ~ 185 | Window Geometry: 186 | Displays: 187 | collapsed: false 188 | Height: 1043 189 | Hide Left Dock: false 190 | Hide Right Dock: true 191 | QMainWindow State: 000000ff00000000fd00000004000000000000015600000375fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d00000375000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002b0fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d000002b0000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007800000003efc0100000002fb0000000800540069006d0065010000000000000780000003bc00fffffffb0000000800540069006d00650100000000000004500000000000000000000006240000037500000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 192 | Selection: 193 | collapsed: false 194 | Time: 195 | collapsed: false 196 | Tool Properties: 197 | collapsed: false 198 | Views: 199 | collapsed: true 200 | Width: 1920 201 | X: 0 202 | Y: 0 203 | -------------------------------------------------------------------------------- /scout_description/rviz/scout_mini_model_display.rviz: -------------------------------------------------------------------------------- 1 | Panels: 2 | - Class: rviz/Displays 3 | Help Height: 78 4 | Name: Displays 5 | Property Tree Widget: 6 | Expanded: 7 | - /Global Options1 8 | - /Status1 9 | Splitter Ratio: 0.5 10 | Tree Height: 719 11 | - Class: rviz/Selection 12 | Name: Selection 13 | - Class: rviz/Tool Properties 14 | Expanded: 15 | - /2D Pose Estimate1 16 | - /2D Nav Goal1 17 | - /Publish Point1 18 | Name: Tool Properties 19 | Splitter Ratio: 0.5886790156364441 20 | - Class: rviz/Views 21 | Expanded: 22 | - /Current View1 23 | Name: Views 24 | Splitter Ratio: 0.5 25 | - Class: rviz/Time 26 | Name: Time 27 | SyncMode: 0 28 | SyncSource: "" 29 | Preferences: 30 | PromptSaveOnExit: true 31 | Toolbars: 32 | toolButtonStyle: 2 33 | Visualization Manager: 34 | Class: "" 35 | Displays: 36 | - Alpha: 0.5 37 | Cell Size: 1 38 | Class: rviz/Grid 39 | Color: 160; 160; 164 40 | Enabled: true 41 | Line Style: 42 | Line Width: 0.029999999329447746 43 | Value: Lines 44 | Name: Grid 45 | Normal Cell Count: 0 46 | Offset: 47 | X: 0 48 | Y: 0 49 | Z: 0 50 | Plane: XY 51 | Plane Cell Count: 10 52 | Reference Frame: 53 | Value: true 54 | - Alpha: 1 55 | Class: rviz/RobotModel 56 | Collision Enabled: false 57 | Enabled: true 58 | Links: 59 | All Links Enabled: true 60 | Expand Joint Details: false 61 | Expand Link Details: false 62 | Expand Tree: false 63 | Link Tree Style: "" 64 | base_link: 65 | Alpha: 1 66 | Show Axes: false 67 | Show Trail: false 68 | Value: true 69 | front_left_wheel_link: 70 | Alpha: 1 71 | Show Axes: false 72 | Show Trail: false 73 | Value: true 74 | front_mount: 75 | Alpha: 1 76 | Show Axes: false 77 | Show Trail: false 78 | front_right_wheel_link: 79 | Alpha: 1 80 | Show Axes: false 81 | Show Trail: false 82 | Value: true 83 | inertial_link: 84 | Alpha: 1 85 | Show Axes: false 86 | Show Trail: false 87 | rear_left_wheel_link: 88 | Alpha: 1 89 | Show Axes: false 90 | Show Trail: false 91 | Value: true 92 | rear_mount: 93 | Alpha: 1 94 | Show Axes: false 95 | Show Trail: false 96 | rear_right_wheel_link: 97 | Alpha: 1 98 | Show Axes: false 99 | Show Trail: false 100 | Value: true 101 | Name: RobotModel 102 | Robot Description: robot_description 103 | TF Prefix: "" 104 | Update Interval: 0 105 | Value: true 106 | Visual Enabled: true 107 | - Class: rviz/TF 108 | Enabled: false 109 | Frame Timeout: 15 110 | Frames: 111 | All Enabled: true 112 | Marker Alpha: 1 113 | Marker Scale: 1 114 | Name: TF 115 | Show Arrows: true 116 | Show Axes: true 117 | Show Names: true 118 | Tree: 119 | {} 120 | Update Interval: 0 121 | Value: false 122 | Enabled: true 123 | Global Options: 124 | Background Color: 48; 48; 48 125 | Default Light: true 126 | Fixed Frame: base_link 127 | Frame Rate: 30 128 | Name: root 129 | Tools: 130 | - Class: rviz/Interact 131 | Hide Inactive Objects: true 132 | - Class: rviz/MoveCamera 133 | - Class: rviz/Select 134 | - Class: rviz/FocusCamera 135 | - Class: rviz/Measure 136 | - Class: rviz/SetInitialPose 137 | Theta std deviation: 0.2617993950843811 138 | Topic: /initialpose 139 | X std deviation: 0.5 140 | Y std deviation: 0.5 141 | - Class: rviz/SetGoal 142 | Topic: /move_base_simple/goal 143 | - Class: rviz/PublishPoint 144 | Single click: true 145 | Topic: /clicked_point 146 | Value: true 147 | Views: 148 | Current: 149 | Class: rviz/Orbit 150 | Distance: 1.1361777782440186 151 | Enable Stereo Rendering: 152 | Stereo Eye Separation: 0.05999999865889549 153 | Stereo Focal Distance: 1 154 | Swap Stereo Eyes: false 155 | Value: false 156 | Field of View: 0.7853981852531433 157 | Focal Point: 158 | X: 0.11484470963478088 159 | Y: 0.043633561581373215 160 | Z: -0.06415828317403793 161 | Focal Shape Fixed Size: true 162 | Focal Shape Size: 0.05000000074505806 163 | Invert Z Axis: false 164 | Name: Current View 165 | Near Clip Distance: 0.009999999776482582 166 | Pitch: 0.7802029848098755 167 | Target Frame: 168 | Yaw: 5.441723823547363 169 | Saved: ~ 170 | Window Geometry: 171 | Displays: 172 | collapsed: false 173 | Height: 1016 174 | Hide Left Dock: false 175 | Hide Right Dock: false 176 | QMainWindow State: 000000ff00000000fd0000000400000000000001560000035afc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d0000035a000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000035afc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073010000003d0000035a000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000007380000003efc0100000002fb0000000800540069006d0065010000000000000738000003bc00fffffffb0000000800540069006d00650100000000000004500000000000000000000004c70000035a00000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 177 | Selection: 178 | collapsed: false 179 | Time: 180 | collapsed: false 181 | Tool Properties: 182 | collapsed: false 183 | Views: 184 | collapsed: false 185 | Width: 1848 186 | X: 72 187 | Y: 27 188 | -------------------------------------------------------------------------------- /scout_description/urdf/empty.urdf: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_mini.gazebo: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | $(arg robot_namespace) 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 64 | 65 | 74 | 75 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_mini.urdf.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 40 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_mini_wheel.gazebo: -------------------------------------------------------------------------------- 1 | 2 | 28 | 29 | 30 | 31 | 32 | transmission_interface/SimpleTransmission 33 | 34 | 1 35 | 36 | 37 | hardware_interface/VelocityJointInterface 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_mini_wheel.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_v2.gazebo: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | $(arg robot_namespace) 29 | 30 | 31 | 32 | 33 | 34 | 0.9 35 | 0.7 36 | 1000000000.0 37 | 0.0 38 | 0.001 39 | 1 0 0 40 | 41 | 42 | 43 | 0.9 44 | 0.7 45 | 1000000000.0 46 | 0.0 47 | 0.001 48 | 1 0 0 49 | 50 | 51 | 52 | 0.9 53 | 0.7 54 | 1000000000.0 55 | 0.0 56 | 0.001 57 | 1 0 0 58 | 59 | 60 | 61 | 0.9 62 | 0.7 63 | 1000000000.0 64 | 0.0 65 | 0.001 66 | 1 0 0 67 | 68 | 69 | 70 | 91 | 92 | 101 | 102 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_v2.xacro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 54 | 55 | 56 | 57 | 58 | 59 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_wheel.gazebo: -------------------------------------------------------------------------------- 1 | 2 | 28 | 29 | 30 | 31 | 32 | transmission_interface/SimpleTransmission 33 | 34 | 1 35 | 36 | 37 | hardware_interface/VelocityJointInterface 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_wheel_type1.xacro: -------------------------------------------------------------------------------- 1 | 2 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 0.001 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /scout_description/urdf/scout_wheel_type2.xacro: -------------------------------------------------------------------------------- 1 | 2 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 0.001 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /scout_msgs/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog for package scout_msgs 2 | 3 | ## 0.0.1 (2019-06-14) 4 | ------------------ 5 | * Initial development of scout_msgs for Scout 6 | * Contributors: Ruixiang Du 7 | -------------------------------------------------------------------------------- /scout_msgs/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | 3 | cmake_minimum_required(VERSION 2.8.3) 4 | project(scout_msgs) 5 | 6 | ## Compile as C++11, supported in ROS Kinetic and newer 7 | # add_compile_options(-std=c++11) 8 | 9 | ## Find catkin macros and libraries 10 | find_package(catkin REQUIRED COMPONENTS 11 | std_msgs 12 | message_generation 13 | ) 14 | 15 | ## System dependencies are found with CMake's conventions 16 | # find_package(Boost REQUIRED COMPONENTS system) 17 | 18 | ## Uncomment this if the package has a setup.py. This macro ensures 19 | ## modules and global scripts declared therein get installed 20 | ## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html 21 | # catkin_python_setup() 22 | 23 | ################################################ 24 | ## Declare ROS messages, services and actions ## 25 | ################################################ 26 | 27 | ## To declare and build messages, services or actions from within this 28 | ## package, follow these steps: 29 | ## * Let MSG_DEP_SET be the set of packages whose message types you use in 30 | ## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). 31 | ## * In the file package.xml: 32 | ## * add a build_depend tag for "message_generation" 33 | ## * add a build_depend and a exec_depend tag for each package in MSG_DEP_SET 34 | ## * If MSG_DEP_SET isn't empty the following dependency has been pulled in 35 | ## but can be declared for certainty nonetheless: 36 | ## * add a exec_depend tag for "message_runtime" 37 | ## * In this file (CMakeLists.txt): 38 | ## * add "message_generation" and every package in MSG_DEP_SET to 39 | ## find_package(catkin REQUIRED COMPONENTS ...) 40 | ## * add "message_runtime" and every package in MSG_DEP_SET to 41 | ## catkin_package(CATKIN_DEPENDS ...) 42 | ## * uncomment the add_*_files sections below as needed 43 | ## and list every .msg/.srv/.action file to be processed 44 | ## * uncomment the generate_messages entry below 45 | ## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) 46 | 47 | ## Generate messages in the 'msg' folder 48 | add_message_files( 49 | FILES 50 | ScoutStatus.msg 51 | ScoutMotorState.msg 52 | ScoutLightState.msg 53 | ScoutLightCmd.msg 54 | ScoutBmsStatus.msg 55 | ScoutDriverState.msg 56 | ScoutRsStatus.msg 57 | ) 58 | 59 | 60 | ## Generate services in the 'srv' folder 61 | # add_service_files( 62 | # FILES 63 | # Service1.srv 64 | # Service2.srv 65 | # ) 66 | 67 | ## Generate actions in the 'action' folder 68 | # add_action_files( 69 | # FILES 70 | # Action1.action 71 | # Action2.action 72 | # ) 73 | 74 | ## Generate added messages and services with any dependencies listed here 75 | generate_messages( 76 | DEPENDENCIES 77 | std_msgs 78 | ) 79 | 80 | catkin_package(CATKIN_DEPENDS std_msgs message_runtime) 81 | 82 | ################################################ 83 | ## Declare ROS dynamic reconfigure parameters ## 84 | ################################################ 85 | 86 | ## To declare and build dynamic reconfigure parameters within this 87 | ## package, follow these steps: 88 | ## * In the file package.xml: 89 | ## * add a build_depend and a exec_depend tag for "dynamic_reconfigure" 90 | ## * In this file (CMakeLists.txt): 91 | ## * add "dynamic_reconfigure" to 92 | ## find_package(catkin REQUIRED COMPONENTS ...) 93 | ## * uncomment the "generate_dynamic_reconfigure_options" section below 94 | ## and list every .cfg file to be processed 95 | 96 | ## Generate dynamic reconfigure parameters in the 'cfg' folder 97 | # generate_dynamic_reconfigure_options( 98 | # cfg/DynReconf1.cfg 99 | # cfg/DynReconf2.cfg 100 | # ) 101 | 102 | ################################### 103 | ## catkin specific configuration ## 104 | ################################### 105 | ## The catkin_package macro generates cmake config files for your package 106 | ## Declare things to be passed to dependent projects 107 | ## INCLUDE_DIRS: uncomment this if your package contains header files 108 | ## LIBRARIES: libraries you create in this project that dependent projects also need 109 | ## CATKIN_DEPENDS: catkin_packages dependent projects also need 110 | ## DEPENDS: system dependencies of this project that dependent projects also need 111 | catkin_package( 112 | # INCLUDE_DIRS include 113 | # LIBRARIES scout_python 114 | # CATKIN_DEPENDS rospy scout_msgs std_msgs 115 | # DEPENDS system_lib 116 | ) 117 | 118 | ########### 119 | ## Build ## 120 | ########### 121 | 122 | ## Specify additional locations of header files 123 | ## Your package locations should be listed before other locations 124 | include_directories( 125 | # include 126 | ${catkin_INCLUDE_DIRS} 127 | ) 128 | 129 | ## Declare a C++ library 130 | # add_library(${PROJECT_NAME} 131 | # src/${PROJECT_NAME}/scout_python.cpp 132 | # ) 133 | 134 | ## Add cmake target dependencies of the library 135 | ## as an example, code may need to be generated before libraries 136 | ## either from message generation or dynamic reconfigure 137 | # add_dependencies(${PROJECT_NAME} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 138 | 139 | ## Declare a C++ executable 140 | ## With catkin_make all packages are built within a single CMake context 141 | ## The recommended prefix ensures that target names across packages don't collide 142 | # add_executable(${PROJECT_NAME}_node src/scout_python_node.cpp) 143 | 144 | ## Rename C++ executable without prefix 145 | ## The above recommended prefix causes long target names, the following renames the 146 | ## target back to the shorter version for ease of user use 147 | ## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node" 148 | # set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "") 149 | 150 | ## Add cmake target dependencies of the executable 151 | ## same as for the library above 152 | # add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) 153 | 154 | ## Specify libraries to link a library or executable target against 155 | # target_link_libraries(${PROJECT_NAME}_node 156 | # ${catkin_LIBRARIES} 157 | # ) 158 | 159 | ############# 160 | ## Install ## 161 | ############# 162 | 163 | # all install targets should use catkin DESTINATION variables 164 | # See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html 165 | 166 | ## Mark executable scripts (Python etc.) for installation 167 | ## in contrast to setup.py, you can choose the destination 168 | # install(PROGRAMS 169 | # scripts/my_python_script 170 | # DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 171 | # ) 172 | 173 | ## Mark executables and/or libraries for installation 174 | # install(TARGETS ${PROJECT_NAME} ${PROJECT_NAME}_node 175 | # ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 176 | # LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 177 | # RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 178 | # ) 179 | 180 | ## Mark cpp header files for installation 181 | # install(DIRECTORY include/${PROJECT_NAME}/ 182 | # DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} 183 | # FILES_MATCHING PATTERN "*.h" 184 | # PATTERN ".svn" EXCLUDE 185 | # ) 186 | 187 | ## Mark other files for installation (e.g. launch and bag files, etc.) 188 | # install(FILES 189 | # # myfile1 190 | # # myfile2 191 | # DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} 192 | # ) 193 | 194 | ############# 195 | ## Testing ## 196 | ############# 197 | 198 | ## Add gtest based cpp test target and link libraries 199 | # catkin_add_gtest(${PROJECT_NAME}-test test/test_scout_python.cpp) 200 | # if(TARGET ${PROJECT_NAME}-test) 201 | # target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) 202 | # endif() 203 | 204 | ## Add folders to be run by python nosetests 205 | # catkin_add_nosetests(test) 206 | -------------------------------------------------------------------------------- /scout_msgs/msg/ScoutBmsStatus.msg: -------------------------------------------------------------------------------- 1 | #BMS date 2 | float64 SOC 3 | float64 SOH 4 | float64 battery_voltage 5 | float64 battery_current 6 | float64 battery_temperature 7 | 8 | #BMS status 9 | uint8 Alarm_Status_1 10 | uint8 Alarm_Status_2 11 | uint8 Warning_Status_1 12 | uint8 Warning_Status_2 13 | -------------------------------------------------------------------------------- /scout_msgs/msg/ScoutDriverState.msg: -------------------------------------------------------------------------------- 1 | float64 driver_voltage 2 | float64 driver_temperature 3 | uint8 driver_state 4 | -------------------------------------------------------------------------------- /scout_msgs/msg/ScoutLightCmd.msg: -------------------------------------------------------------------------------- 1 | uint8 LIGHT_CONST_OFF = 0 2 | uint8 LIGHT_CONST_ON = 1 3 | uint8 LIGHT_BREATH = 2 4 | uint8 LIGHT_CUSTOM = 3 5 | 6 | bool enable_cmd_light_control 7 | uint8 front_mode 8 | uint8 front_custom_value 9 | uint8 rear_mode 10 | uint8 rear_custom_value 11 | -------------------------------------------------------------------------------- /scout_msgs/msg/ScoutLightState.msg: -------------------------------------------------------------------------------- 1 | uint8 mode 2 | uint8 custom_value -------------------------------------------------------------------------------- /scout_msgs/msg/ScoutMotorState.msg: -------------------------------------------------------------------------------- 1 | float64 current 2 | float64 rpm 3 | float64 temperature 4 | float64 motor_pose 5 | -------------------------------------------------------------------------------- /scout_msgs/msg/ScoutRsStatus.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | 3 | int8 stick_left_h 4 | int8 stick_left_v 5 | int8 stick_right_h 6 | int8 stick_right_v 7 | 8 | uint8 swa 9 | uint8 swb 10 | uint8 swc 11 | uint8 swd 12 | 13 | uint8 var_a 14 | -------------------------------------------------------------------------------- /scout_msgs/msg/ScoutStatus.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | 3 | int8 MOTOR_ID_FRONT_RIGHT = 0 4 | int8 MOTOR_ID_FRONT_LEFT = 1 5 | int8 MOTOR_ID_REAR_RIGHT = 2 6 | int8 MOTOR_ID_REAR_LEFT = 3 7 | 8 | int8 LIGHT_ID_FRONT = 0 9 | int8 LIGHT_ID_REAR = 1 10 | 11 | # motion state 12 | float64 linear_velocity 13 | float64 angular_velocity 14 | float64 lateral_velocity 15 | 16 | # base state 17 | uint8 base_state 18 | uint8 control_mode 19 | uint16 fault_code 20 | float64 battery_voltage 21 | 22 | # motor state 23 | ScoutMotorState[4] motor_states 24 | # driver state 25 | ScoutDriverState[4] driver_states 26 | 27 | # light state 28 | bool light_control_enabled 29 | ScoutLightState front_light_state 30 | ScoutLightState rear_light_state 31 | -------------------------------------------------------------------------------- /scout_msgs/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | scout_msgs 4 | 0.3.3 5 | Messages for AgileX Scout 6 | 7 | TODO 8 | 9 | TODO 10 | TODO 11 | 12 | BSD 13 | 14 | TODO 15 | TODO 16 | TODO 17 | 18 | catkin 19 | message_generation 20 | std_msgs 21 | message_runtime 22 | std_msgs 23 | 24 | 25 | 26 | 27 | --------------------------------------------------------------------------------