├── 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 |
--------------------------------------------------------------------------------