Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 37dd316

Browse files
taikitanaka3mitsudome-rrej55kenji-miyakennmm
authoredDec 7, 2021
feat: add autoware joy controller (autowarefoundation#72)
* release v0.4.0 * Support G29 controller in autoware_joy_controller (autowarefoundation#699) * Add map for G29 controller * Add new line at end of file * Change structure of JoyConverterBase class * Rename PS4 -> DS4 * Rename controler_type -> joy_type * Set joy_type by console input * Change doc * Remap g29 controller * Remap AccelPedal -> accel, BrakePedal -> brake * Remove [autoware_joy_controller] from ROS_INFO Co-authored-by: Fumiya Watanabe <fumiya.watanabe@tier4.jp> * Change key map for G29 controller and set deadzone parameter (autowarefoundation#740) * Add missing dependencies of autoware_joy_controller (autowarefoundation#755) Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * remove ROS1 packages temporarily Signed-off-by: mitsudome-r <ryohsuke.mitsudome@tier4.jp> * add sample ros2 packages Signed-off-by: mitsudome-r <ryohsuke.mitsudome@tier4.jp> * remove ROS1 packages Signed-off-by: mitsudome-r <ryohsuke.mitsudome@tier4.jp> * Revert "remove ROS1 packages temporarily" This reverts commit c98294b0b159fb98cd3091d34a626d06f29fdece. Signed-off-by: mitsudome-r <ryohsuke.mitsudome@tier4.jp> * add COLCON_IGNORE to ros1 packages Signed-off-by: mitsudome-r <ryohsuke.mitsudome@tier4.jp> * Rename launch files to launch.xml (autowarefoundation#28) * Rename h files to hpp (autowarefoundation#142) * Change includes * Rename files * Adjustments to make things compile * Other packages * Adjust copyright notice on 532 out of 699 source files (autowarefoundation#143) * Use quotes for includes where appropriate (autowarefoundation#144) * Use quotes for includes where appropriate * Fix lint tests * Make tests pass hopefully * Port autoware joy controller (autowarefoundation#124) * Port Signed-off-by: Servando German Serrano <servando.german.serrano@linaro.org> * Fixed package.xml * now() to use node clock Signed-off-by: Servando German Serrano <servando.german.serrano@linaro.org> * Fix include Signed-off-by: Servando German Serrano <servando.german.serrano@linaro.org> * Clear compilation warnings Signed-off-by: Servando German Serrano <servando.german.serrano@linaro.org> * Run uncrustify on the entire Pilot.Auto codebase (autowarefoundation#151) * Run uncrustify on the entire Pilot.Auto codebase * Exclude open PRs * [update to v0.8.0] autoware joy controller (autowarefoundation#251) * restore filename to original for version update Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * Enable to change sensitivity (autowarefoundation#868) * Improve remote emergency stop (autowarefoundation#900) * Apply format Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename emergency to system_emergency in vehicle_cmd_gate Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add emergency stop feature to vehicle_cmd_gate Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix frame_id of vehicle_cmd_gate output Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename /remote/emergency to /remote/emergency_stop in autoware_joy_controller Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename /remote/emergency to /remote/emergency_stop in remote_cmd_converter Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename /remote/emergency to /remote/emergency_stop in autoware_api Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Check emergency_stop timeout in remote_cmd_converter Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Ignore timeout = 0.0 Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add config_file to arg Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename emergency_stop to external_emergency_stop Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Remove unnecessary lines Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Wait for first heartbeat Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add clear_emergency_stop service Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Call clear_external_emegency_stop service from autoware_joy_controller Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename function Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Revert: Wait for first heartbeat Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix console messages Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Move emergency_stop diag to vehicle_cmd_gate Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add heartbeat to vehicle_cmd_gate Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Revert: Move emergency_stop diag to vehicle_cmd_gate Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * patch in real-vehicle * Apply format Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Change default parameter Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> Co-authored-by: jpntaxi4943-autoware <proj-jpntaxi@tier4.jp> * restore file name Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * [tmp] fix build error Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * fix service Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * fix format Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * fix service usage Signed-off-by: Takamasa Horibe <horibe.takamasa@gmail.com> * fix launch var Co-authored-by: Fumiya Watanabe <rej55.g@gmail.com> Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> Co-authored-by: jpntaxi4943-autoware <proj-jpntaxi@tier4.jp> * Rename ROS-related .yaml to .param.yaml (autowarefoundation#352) * Rename ROS-related .yaml to .param.yaml Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Remove prefix 'default_' of yaml files Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename vehicle_info.yaml to vehicle_info.param.yaml Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename diagnostic_aggregator's param files Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix overlooked parameters Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * remove using in global namespace (autowarefoundation#379) * remove using in global namespace (autowarefoundation#1166) * remove using in global namespace * Revert "remove using in global namespace" This reverts commit 7f120509c9e3a036a38e84883868f6036bca23ad. * Add package namespace Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> Co-authored-by: Kenji Miyake <kenji.miyake@tier4.jp> * [autoware_joy_controller] add lint tests Signed-off-by: mitsudome-r <ryohsuke.mitsudome@tier4.jp> Co-authored-by: Kenji Miyake <kenji.miyake@tier4.jp> * fix namespace (autowarefoundation#414) * add use_sim-time option (autowarefoundation#454) * Fix for rolling (autowarefoundation#1226) * Replace doc by description Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Replace ns by push-ros-namespace Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Make control modules components (autowarefoundation#1262) Signed-off-by: wep21 <border_goldenmarket@yahoo.co.jp> * Remove use_sim_time for set_parameter (autowarefoundation#1260) Signed-off-by: wep21 <border_goldenmarket@yahoo.co.jp> * Remove autoware_debug_msgs from autoware_joy_controller (autowarefoundation#1303) Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Porting remote cmd selector (autowarefoundation#1286) * Feature/add remote cmd selector (autowarefoundation#1179) * Add in/out args of remote_cmd_converter.launch Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Change remote input topic of vehicle_cmd_gate Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add msgs for remote_cmd_selector Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add remote_cmd_selector Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Rename remote_cmd_selector to external_cmd_selector Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Remove VehicleCommand support in autoware_joy_controller Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Support external_cmd_source in autoware_joy_controller.launch (autowarefoundation#1194) Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix porting miss Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * fix missing function * modify xml format * fix include guard * add callback group * modify remap name * Revert "modify remap name" This reverts commit 169cc8d28442825b1d61b0439b9892c913304527. * change topic name * use rclcpp_component * Remove autoware_debug_msgs from autoware_joy_controller Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Change default mode of autoware_joy_controller Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> Co-authored-by: Kenji Miyake <kenji.miyake@tier4.jp> * Ros2/create/external commands (autowarefoundation#1299) * add remote message * add remote commands * fix topic * remove unnecessary topic * remove unused topic * add external cmd instead * ToExternalComd * fix topic in joy con * Fix -Wunused-parameter (autowarefoundation#1836) * Fix -Wunused-parameter Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix mistake Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * fix spell * Fix lint issues Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Ignore flake8 warnings Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> Co-authored-by: Hiroki OTA <hiroki.ota@tier4.jp> * Add autoware api (autowarefoundation#1979) * Use EmergencyState instead of deprecated EmergencyMode (autowarefoundation#2030) * Use EmergencyState instead of deprecated EmergencyMode Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Use stamped type Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * add sort-package-xml hook in pre-commit (autowarefoundation#1881) * add sort xml hook in pre-commit * change retval to exit_status * rename * add prettier plugin-xml * use early return * add license note * add tier4 license * restore prettier * change license order * move local hooks to public repo * move prettier-xml to pre-commit-hooks-ros * update version for bug-fix * apply pre-commit * Add selected external command API (autowarefoundation#2053) * submit engage with api service from joy controller (autowarefoundation#2320) * fix engagew with api * delete unused * fix for uncrustify * revive vehicle_engage * some fix * revive autoware name * fix service name * Change formatter to clang-format and black (autowarefoundation#2332) * Revert "Temporarily comment out pre-commit hooks" This reverts commit 748e9cdb145ce12f8b520bcbd97f5ff899fc28a3. * Replace ament_lint_common with autoware_lint_common Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Remove ament_cmake_uncrustify and ament_clang_format Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Apply Black Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Apply clang-format Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix build errors Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix for cpplint * Fix include double quotes to angle brackets Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Apply clang-format Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Fix build errors Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * Add COLCON_IGNORE (autowarefoundation#500) Signed-off-by: Kenji Miyake <kenji.miyake@tier4.jp> * port autoware joy controller (autowarefoundation#588) * port autoware joy controller * fix compile error * use odometry instead of twist * update launch Co-authored-by: Takayuki Murooka <takayuki.murooka@tier4.jp> * update README.md in autoware_joy_controller (autowarefoundation#593) * update README.md * update README.md * fix typo * Update control/autoware_joy_controller/README.md Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> * update README.md Co-authored-by: Takayuki Murooka <takayuki.murooka@tier4.jp> Co-authored-by: taikitanaka3 <65527974+taikitanaka3@users.noreply.github.com> * fix format * ci(pre-commit): autofix Co-authored-by: mitsudome-r <ryohsuke.mitsudome@tier4.jp> Co-authored-by: Fumiya Watanabe <rej55.g@gmail.com> Co-authored-by: Fumiya Watanabe <fumiya.watanabe@tier4.jp> Co-authored-by: Kenji Miyake <31987104+kenji-miyake@users.noreply.github.com> Co-authored-by: Nikolai Morin <nnmmgit@gmail.com> Co-authored-by: Servando <43142004+sgermanserrano@users.noreply.github.com> Co-authored-by: Takamasa Horibe <horibe.takamasa@gmail.com> Co-authored-by: jpntaxi4943-autoware <proj-jpntaxi@tier4.jp> Co-authored-by: Ryohsuke Mitsudome <43976834+mitsudome-r@users.noreply.github.com> Co-authored-by: Kenji Miyake <kenji.miyake@tier4.jp> Co-authored-by: tkimura4 <tomoya.kimura@tier4.jp> Co-authored-by: Daisuke Nishimatsu <42202095+wep21@users.noreply.github.com> Co-authored-by: Keisuke Shima <keisuke.shima@tier4.jp> Co-authored-by: Hiroki OTA <hiroki.ota@tier4.jp> Co-authored-by: Takagi, Isamu <43976882+isamu-takagi@users.noreply.github.com> Co-authored-by: Keisuke Shima <19993104+KeisukeShima@users.noreply.github.com> Co-authored-by: Takayuki Murooka <takayuki5168@gmail.com> Co-authored-by: Takayuki Murooka <takayuki.murooka@tier4.jp> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Takeshi Miura <57553950+1222-takeshi@users.noreply.github.com>
1 parent ebe771f commit 37dd316

File tree

10 files changed

+1050
-0
lines changed

10 files changed

+1050
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
cmake_minimum_required(VERSION 3.5)
2+
project(autoware_joy_controller)
3+
4+
if(NOT CMAKE_CXX_STANDARD)
5+
set(CMAKE_CXX_STANDARD 14)
6+
endif()
7+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
8+
add_compile_options(-Wall -Wextra -Wpedantic -Werror)
9+
endif()
10+
11+
find_package(ament_cmake_auto REQUIRED)
12+
ament_auto_find_build_dependencies()
13+
14+
ament_auto_add_library(autoware_joy_controller_node SHARED
15+
src/autoware_joy_controller/autoware_joy_controller_node.cpp
16+
)
17+
18+
rclcpp_components_register_node(autoware_joy_controller_node
19+
PLUGIN "autoware_joy_controller::AutowareJoyControllerNode"
20+
EXECUTABLE autoware_joy_controller
21+
)
22+
23+
if(BUILD_TESTING)
24+
find_package(ament_lint_auto REQUIRED)
25+
ament_lint_auto_find_test_dependencies()
26+
endif()
27+
28+
ament_auto_package(
29+
INSTALL_TO_SHARE
30+
launch
31+
config
32+
)
+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# autoware_joy_controller
2+
3+
## Role
4+
5+
`autoware_joy_controller` is the package to convert a joy msg to autoware commands (e.g. steering wheel, shift, turn signal, engage) for a vehicle.
6+
7+
## Input / Output
8+
9+
### Input topics
10+
11+
| Name | Type | Description |
12+
| ------------------ | ----------------------- | --------------------------------- |
13+
| `~/input/joy` | sensor_msgs::msg::Joy | joy controller command |
14+
| `~/input/odometry` | nav_msgs::msg::Odometry | ego vehicle odometry to get twist |
15+
16+
### Output topics
17+
18+
| Name | Type | Description |
19+
| ----------------------------------- | -------------------------------------------------------- | ---------------------------------------- |
20+
| `~/output/control_command` | autoware_auto_control_msgs::msg::AckermannControlCommand | lateral and longitudinal control command |
21+
| `~/output/external_control_command` | autoware_external_api_msgs::msg::ControlCommandStamped | lateral and longitudinal control command |
22+
| `~/output/shift` | autoware_external_api_msgs::msg::GearShiftStamped | gear command |
23+
| `~/output/turn_signal` | autoware_external_api_msgs::msg::TurnSignalStamped | turn signal command |
24+
| `~/output/gate_mode` | autoware_control_msgs::msg::GateMode | gate mode (Auto or External) |
25+
| `~/output/heartbeat` | autoware_external_api_msgs::msg::Heartbeat | heartbeat |
26+
| `~/output/vehicle_engage` | autoware_auto_vehicle_msgs::msg::Engage | vehicle engage |
27+
28+
## Parameters
29+
30+
| Parameter | Type | Description |
31+
| ------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------ |
32+
| `joy_type` | string | joy controller type (default: DS4) |
33+
| `update_rate` | double | update rate to publish control commands |
34+
| `accel_ratio` | double | ratio to calculate acceleration (commanded acceleration is ratio \* operation) |
35+
| `brake_ratio` | double | ratio to calculate deceleration (commanded acceleration is -ratio \* operation) |
36+
| `steer_ratio` | double | ratio to calculate deceleration (commanded steer is ratio \* operation) |
37+
| `steering_angle_velocity` | double | steering angle velocity for operation |
38+
| `accel_sensitivity` | double | sensitivity to calculate acceleration for external API (commanded acceleration is pow(operation, 1 / sensitivity)) |
39+
| `brake_sensitivity` | double | sensitivity to calculate deceleration for external API (commanded acceleration is pow(operation, 1 / sensitivity)) |
40+
| `velocity_gain` | double | ratio to calculate velocity by acceleration |
41+
| `max_forward_velocity` | double | absolute max velocity to go forward |
42+
| `max_backward_velocity` | double | absolute max velocity to go backward |
43+
| `backward_accel_ratio` | double | ratio to calculate deceleration (commanded acceleration is -ratio \* operation) |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**:
2+
ros__parameters:
3+
update_rate: 10.0
4+
accel_ratio: 3.0
5+
brake_ratio: 5.0
6+
steer_ratio: 0.5
7+
steering_angle_velocity: 0.1
8+
accel_sensitivity: 1.0
9+
brake_sensitivity: 1.0
10+
control_command:
11+
velocity_gain: 3.0
12+
max_forward_velocity: 20.0
13+
max_backward_velocity: 3.0
14+
backward_accel_ratio: 1.0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Copyright 2020 Tier IV, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#ifndef AUTOWARE_JOY_CONTROLLER__AUTOWARE_JOY_CONTROLLER_HPP_
16+
#define AUTOWARE_JOY_CONTROLLER__AUTOWARE_JOY_CONTROLLER_HPP_
17+
18+
#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp"
19+
20+
#include <rclcpp/rclcpp.hpp>
21+
22+
#include <autoware_auto_control_msgs/msg/ackermann_control_command.hpp>
23+
#include <autoware_auto_vehicle_msgs/msg/engage.hpp>
24+
#include <autoware_control_msgs/msg/gate_mode.hpp>
25+
#include <autoware_external_api_msgs/msg/control_command_stamped.hpp>
26+
#include <autoware_external_api_msgs/msg/gear_shift_stamped.hpp>
27+
#include <autoware_external_api_msgs/msg/heartbeat.hpp>
28+
#include <autoware_external_api_msgs/msg/turn_signal_stamped.hpp>
29+
#include <autoware_external_api_msgs/srv/engage.hpp>
30+
#include <autoware_external_api_msgs/srv/set_emergency.hpp>
31+
#include <geometry_msgs/msg/twist_stamped.hpp>
32+
#include <nav_msgs/msg/odometry.hpp>
33+
#include <sensor_msgs/msg/joy.hpp>
34+
35+
#include <algorithm>
36+
#include <memory>
37+
#include <string>
38+
39+
namespace autoware_joy_controller
40+
{
41+
using GearShiftType = autoware_external_api_msgs::msg::GearShift::_data_type;
42+
using TurnSignalType = autoware_external_api_msgs::msg::TurnSignal::_data_type;
43+
using GateModeType = autoware_control_msgs::msg::GateMode::_data_type;
44+
45+
class AutowareJoyControllerNode : public rclcpp::Node
46+
{
47+
public:
48+
explicit AutowareJoyControllerNode(const rclcpp::NodeOptions & node_options);
49+
50+
private:
51+
// Parameter
52+
std::string joy_type_;
53+
double update_rate_;
54+
double accel_ratio_;
55+
double brake_ratio_;
56+
double steer_ratio_;
57+
double steering_angle_velocity_;
58+
double accel_sensitivity_;
59+
double brake_sensitivity_;
60+
61+
// ControlCommand Parameter
62+
double velocity_gain_;
63+
double max_forward_velocity_;
64+
double max_backward_velocity_;
65+
double backward_accel_ratio_;
66+
67+
// CallbackGroups
68+
rclcpp::CallbackGroup::SharedPtr callback_group_subscribers_;
69+
rclcpp::CallbackGroup::SharedPtr callback_group_services_;
70+
71+
// Subscriber
72+
rclcpp::Subscription<sensor_msgs::msg::Joy>::SharedPtr sub_joy_;
73+
rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr sub_odom_;
74+
75+
rclcpp::Time last_joy_received_time_;
76+
std::shared_ptr<const JoyConverterBase> joy_;
77+
geometry_msgs::msg::TwistStamped::ConstSharedPtr twist_;
78+
79+
void onJoy(const sensor_msgs::msg::Joy::ConstSharedPtr msg);
80+
void onOdometry(const nav_msgs::msg::Odometry::ConstSharedPtr msg);
81+
82+
// Publisher
83+
rclcpp::Publisher<autoware_auto_control_msgs::msg::AckermannControlCommand>::SharedPtr
84+
pub_control_command_;
85+
rclcpp::Publisher<autoware_external_api_msgs::msg::ControlCommandStamped>::SharedPtr
86+
pub_external_control_command_;
87+
rclcpp::Publisher<autoware_external_api_msgs::msg::GearShiftStamped>::SharedPtr pub_shift_;
88+
rclcpp::Publisher<autoware_external_api_msgs::msg::TurnSignalStamped>::SharedPtr pub_turn_signal_;
89+
rclcpp::Publisher<autoware_external_api_msgs::msg::Heartbeat>::SharedPtr pub_heartbeat_;
90+
rclcpp::Publisher<autoware_control_msgs::msg::GateMode>::SharedPtr pub_gate_mode_;
91+
rclcpp::Publisher<autoware_auto_vehicle_msgs::msg::Engage>::SharedPtr pub_vehicle_engage_;
92+
93+
void publishControlCommand();
94+
void publishExternalControlCommand();
95+
void publishShift();
96+
void publishTurnSignal();
97+
void publishGateMode();
98+
void publishHeartbeat();
99+
void publishAutowareEngage();
100+
void publishVehicleEngage();
101+
void sendEmergencyRequest(bool emergency);
102+
103+
// Service Client
104+
rclcpp::Client<autoware_external_api_msgs::srv::SetEmergency>::SharedPtr client_emergency_stop_;
105+
rclcpp::Client<autoware_external_api_msgs::srv::Engage>::SharedPtr client_autoware_engage_;
106+
107+
// Previous State
108+
autoware_auto_control_msgs::msg::AckermannControlCommand prev_control_command_;
109+
autoware_external_api_msgs::msg::ControlCommand prev_external_control_command_;
110+
GearShiftType prev_shift_ = autoware_external_api_msgs::msg::GearShift::NONE;
111+
TurnSignalType prev_turn_signal_ = autoware_external_api_msgs::msg::TurnSignal::NONE;
112+
GateModeType prev_gate_mode_ = autoware_control_msgs::msg::GateMode::AUTO;
113+
114+
// Timer
115+
rclcpp::TimerBase::SharedPtr timer_;
116+
void initTimer(double period_s);
117+
118+
bool isDataReady();
119+
void onTimer();
120+
};
121+
} // namespace autoware_joy_controller
122+
123+
#endif // AUTOWARE_JOY_CONTROLLER__AUTOWARE_JOY_CONTROLLER_HPP_
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
// Copyright 2020 Tier IV, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_
16+
#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_
17+
18+
#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp"
19+
20+
#include <algorithm>
21+
22+
namespace autoware_joy_controller
23+
{
24+
class DS4JoyConverter : public JoyConverterBase
25+
{
26+
public:
27+
explicit DS4JoyConverter(const sensor_msgs::msg::Joy & j) : j_(j) {}
28+
29+
float accel() const
30+
{
31+
const auto button = static_cast<float>(Cross());
32+
const auto stick = std::max(0.0f, RStickUpDown());
33+
const auto trigger = std::max(0.0f, -RTrigger());
34+
return std::max({button, stick, trigger});
35+
}
36+
37+
float brake() const
38+
{
39+
const auto button = static_cast<float>(Square());
40+
const auto stick = std::max(0.0f, -RStickUpDown());
41+
const auto trigger = std::max(0.0f, -LTrigger());
42+
return std::max({button, stick, trigger});
43+
}
44+
45+
float steer() const { return LStickLeftRight(); }
46+
47+
bool shift_up() const { return CursorUpDown() == 1.0f; }
48+
bool shift_down() const { return CursorUpDown() == -1.0f; }
49+
bool shift_drive() const { return CursorLeftRight() == 1.0f; }
50+
bool shift_reverse() const { return CursorLeftRight() == -1.0f; }
51+
52+
bool turn_signal_left() const { return L1(); }
53+
bool turn_signal_right() const { return R1(); }
54+
bool clear_turn_signal() const { return Share(); }
55+
56+
bool gate_mode() const { return Options(); }
57+
58+
bool emergency_stop() const { return !reverse() && PS(); }
59+
bool clear_emergency_stop() const { return reverse() && PS(); }
60+
61+
bool autoware_engage() const { return !reverse() && Circle(); }
62+
bool autoware_disengage() const { return reverse() && Circle(); }
63+
64+
bool vehicle_engage() const { return !reverse() && Triangle(); }
65+
bool vehicle_disengage() const { return reverse() && Triangle(); }
66+
67+
private:
68+
float LStickLeftRight() const { return j_.axes.at(0); }
69+
float LStickUpDown() const { return j_.axes.at(1); }
70+
float LTrigger() const { return j_.axes.at(2); }
71+
float RStickLeftRight() const { return j_.axes.at(3); }
72+
float RStickUpDown() const { return j_.axes.at(4); }
73+
float RTrigger() const { return j_.axes.at(5); }
74+
float CursorLeftRight() const { return j_.axes.at(6); }
75+
float CursorUpDown() const { return j_.axes.at(7); }
76+
77+
bool Cross() const { return j_.buttons.at(0); }
78+
bool Circle() const { return j_.buttons.at(1); }
79+
bool Triangle() const { return j_.buttons.at(2); }
80+
bool Square() const { return j_.buttons.at(3); }
81+
bool L1() const { return j_.buttons.at(4); }
82+
bool R1() const { return j_.buttons.at(5); }
83+
bool L2() const { return j_.buttons.at(6); }
84+
bool R2() const { return j_.buttons.at(7); }
85+
bool Share() const { return j_.buttons.at(8); }
86+
bool Options() const { return j_.buttons.at(9); }
87+
bool PS() const { return j_.buttons.at(10); }
88+
89+
const sensor_msgs::msg::Joy j_;
90+
91+
bool reverse() const { return Share(); }
92+
};
93+
} // namespace autoware_joy_controller
94+
95+
#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__DS4_JOY_CONVERTER_HPP_
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
// Copyright 2020 Tier IV, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_
16+
#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_
17+
18+
#include "autoware_joy_controller/joy_converter/joy_converter_base.hpp"
19+
20+
namespace autoware_joy_controller
21+
{
22+
class G29JoyConverter : public JoyConverterBase
23+
{
24+
public:
25+
explicit G29JoyConverter(const sensor_msgs::msg::Joy & j) : j_(j) {}
26+
27+
float accel() const
28+
{
29+
constexpr float eps = 0.0000001;
30+
if (std::fabs(AccelPedal()) < eps) {
31+
return 0.0f;
32+
}
33+
return (AccelPedal() + 1.0f) / 2;
34+
}
35+
36+
float brake() const
37+
{
38+
constexpr float eps = 0.0000001;
39+
if (std::fabs(BrakePedal()) < eps) {
40+
return 0.0f;
41+
}
42+
return (BrakePedal() + 1.0f) / 2;
43+
}
44+
45+
float steer() const { return Steer(); }
46+
47+
bool shift_up() const { return CursorUpDown() == 1.0f; }
48+
bool shift_down() const { return CursorUpDown() == -1.0f; }
49+
bool shift_drive() const { return CursorLeftRight() == 1.0f; }
50+
bool shift_reverse() const { return CursorLeftRight() == -1.0f; }
51+
52+
bool turn_signal_left() const { return L1(); }
53+
bool turn_signal_right() const { return R1(); }
54+
bool clear_turn_signal() const { return Share(); }
55+
56+
bool gate_mode() const { return Options(); }
57+
58+
bool emergency_stop() const { return !reverse() && PS(); }
59+
bool clear_emergency_stop() const { return reverse() && PS(); }
60+
61+
bool autoware_engage() const { return !reverse() && Circle(); }
62+
bool autoware_disengage() const { return reverse() && Circle(); }
63+
64+
bool vehicle_engage() const { return !reverse() && Triangle(); }
65+
bool vehicle_disengage() const { return reverse() && Triangle(); }
66+
67+
private:
68+
float Steer() const { return j_.axes.at(0); }
69+
float AccelPedal() const { return j_.axes.at(2); }
70+
float BrakePedal() const { return j_.axes.at(3); }
71+
72+
float CursorLeftRight() const { return j_.axes.at(4); }
73+
float CursorUpDown() const { return j_.axes.at(5); }
74+
75+
bool Cross() const { return j_.buttons.at(0); }
76+
bool Circle() const { return j_.buttons.at(1); }
77+
bool Triangle() const { return j_.buttons.at(2); }
78+
bool Square() const { return j_.buttons.at(3); }
79+
bool L1() const { return j_.buttons.at(5); }
80+
bool R1() const { return j_.buttons.at(4); }
81+
bool L2() const { return j_.buttons.at(7); }
82+
bool R2() const { return j_.buttons.at(6); }
83+
bool Share() const { return j_.buttons.at(8); }
84+
bool Options() const { return j_.buttons.at(9); }
85+
bool PS() const { return j_.buttons.at(24); }
86+
87+
const sensor_msgs::msg::Joy j_;
88+
89+
bool reverse() const { return Share(); }
90+
};
91+
} // namespace autoware_joy_controller
92+
93+
#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__G29_JOY_CONVERTER_HPP_
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// Copyright 2020 Tier IV, Inc.
2+
//
3+
// Licensed under the Apache License, Version 2.0 (the "License");
4+
// you may not use this file except in compliance with the License.
5+
// You may obtain a copy of the License at
6+
//
7+
// http://www.apache.org/licenses/LICENSE-2.0
8+
//
9+
// Unless required by applicable law or agreed to in writing, software
10+
// distributed under the License is distributed on an "AS IS" BASIS,
11+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
// See the License for the specific language governing permissions and
13+
// limitations under the License.
14+
15+
#ifndef AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_
16+
#define AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_
17+
18+
#include <sensor_msgs/msg/joy.hpp>
19+
20+
#include <algorithm>
21+
22+
namespace autoware_joy_controller
23+
{
24+
class JoyConverterBase
25+
{
26+
public:
27+
virtual float accel() const = 0;
28+
29+
virtual float brake() const = 0;
30+
31+
virtual float steer() const = 0;
32+
33+
virtual bool shift_up() const = 0;
34+
virtual bool shift_down() const = 0;
35+
virtual bool shift_drive() const = 0;
36+
virtual bool shift_reverse() const = 0;
37+
38+
virtual bool turn_signal_left() const = 0;
39+
virtual bool turn_signal_right() const = 0;
40+
virtual bool clear_turn_signal() const = 0;
41+
42+
virtual bool gate_mode() const = 0;
43+
44+
virtual bool emergency_stop() const = 0;
45+
virtual bool clear_emergency_stop() const = 0;
46+
47+
virtual bool autoware_engage() const = 0;
48+
virtual bool autoware_disengage() const = 0;
49+
50+
virtual bool vehicle_engage() const = 0;
51+
virtual bool vehicle_disengage() const = 0;
52+
};
53+
} // namespace autoware_joy_controller
54+
55+
#endif // AUTOWARE_JOY_CONTROLLER__JOY_CONVERTER__JOY_CONVERTER_BASE_HPP_
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
<launch>
2+
<arg name="joy_type" default="DS4" description="options: DS4, G29"/>
3+
<arg name="external_cmd_source" default="remote" description="options: local, remote"/>
4+
5+
<arg name="input_joy" default="/joy" />
6+
<arg name="input_odometry" default="/localization/kinematic_state" />
7+
8+
<arg name="output_control_command" default="/external/$(var external_cmd_source)/joy/control_cmd" />
9+
<arg name="output_external_control_command" default="/api/external/set/command/$(var external_cmd_source)/control" />
10+
<arg name="output_shift" default="/api/external/set/command/$(var external_cmd_source)/shift" />
11+
<arg name="output_turn_signal" default="/api/external/set/command/$(var external_cmd_source)/turn_signal" />
12+
<arg name="output_heartbeat" default="/api/external/set/command/$(var external_cmd_source)/heartbeat" />
13+
<arg name="output_gate_mode" default="/control/gate_mode_cmd" />
14+
<arg name="output_vehicle_engage" default="/vehicle/engage" />
15+
16+
<arg name="config_file" default="$(find-pkg-share autoware_joy_controller)/config/autoware_joy_controller.param.yaml" />
17+
18+
<node pkg="autoware_joy_controller" exec="autoware_joy_controller" name="autoware_joy_controller" output="screen">
19+
<remap from="input/joy" to="$(var input_joy)"/>
20+
<remap from="input/odometry" to="$(var input_odometry)"/>
21+
22+
<remap from="output/control_command" to="$(var output_control_command)"/>
23+
<remap from="output/external_control_command" to="$(var output_external_control_command)"/>
24+
<remap from="output/shift" to="$(var output_shift)"/>
25+
<remap from="output/turn_signal" to="$(var output_turn_signal)"/>
26+
<remap from="output/gate_mode" to="$(var output_gate_mode)"/>
27+
<remap from="output/heartbeat" to="$(var output_heartbeat)"/>
28+
<remap from="output/vehicle_engage" to="$(var output_vehicle_engage)"/>
29+
30+
<remap from="service/emergency_stop" to="/api/autoware/set/emergency"/>
31+
<remap from="service/autoware_engage" to="/api/external/set/engage"/>
32+
33+
<param from="$(var config_file)" />
34+
<param name="joy_type" value="$(var joy_type)" />
35+
</node>
36+
37+
<node pkg="joy" exec="joy_node" name="joy_node" output="screen">
38+
<param name="autorepeat_rate" value="1.0" />
39+
<param name="deadzone" value="0.0" />
40+
</node>
41+
</launch>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?xml version="1.0"?>
2+
<package format="2">
3+
<name>autoware_joy_controller</name>
4+
<version>0.1.0</version>
5+
<description>The autoware_joy_controller package</description>
6+
<maintainer email="kenji.miyake@tier4.jp">Kenji Miyake</maintainer>
7+
<license>Apache License 2.0</license>
8+
9+
<buildtool_depend>ament_cmake_auto</buildtool_depend>
10+
11+
<depend>autoware_api_utils</depend>
12+
<depend>autoware_auto_control_msgs</depend>
13+
<depend>autoware_auto_vehicle_msgs</depend>
14+
<depend>autoware_control_msgs</depend>
15+
<depend>autoware_external_api_msgs</depend>
16+
<depend>geometry_msgs</depend>
17+
<depend>joy</depend>
18+
<depend>nav_msgs</depend>
19+
<depend>rclcpp</depend>
20+
<depend>rclcpp_components</depend>
21+
<depend>sensor_msgs</depend>
22+
<depend>std_srvs</depend>
23+
24+
<test_depend>ament_lint_auto</test_depend>
25+
<test_depend>autoware_lint_common</test_depend>
26+
27+
<export>
28+
<build_type>ament_cmake</build_type>
29+
</export>
30+
</package>

‎control/autoware_joy_controller/src/autoware_joy_controller/autoware_joy_controller_node.cpp

+524
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)
Please sign in to comment.