Я работаю с ROS Melodic и Gazebo 9.9.0 на Ubuntu 18.04.2 LTS.
Я хочу отправить роботу сообщение об остановке (твист со всеми нулями), когда пользователь убивает узел.
Чтобы обработать событие Ctrl. + C, я использую это:
/**
* Override the default ros sigint handler to stop the robot when user press
* Ctrl.+C.
*/
void sigintHandler(int sig)
{
// All the default sigint handler does is call shutdown()
ros::shutdown();
}
Но эта функция не позволяет передавать больше параметров (мне нужно передать cmd_vel_pub
).
Я объявил этого издателя в основной функции:
int main(int argc, char **argv)
{
ros::init(argc, argv, "astar_controller");
ros::NodeHandle n;
// Override the default ros sigint handler.
// This must be set after the first NodeHandle is created.
std::signal(SIGINT, sigintHandler);
/**
* Topic where we are going to publish speed commands.
*/
ros::Publisher cmd_vel_pub = n.advertise<geometry_msgs::Twist>(cmdTopic, 1000);
// More code...
}
Может быть, я могу объявить cmd_vel_pub
глобальным.
Есть ли способ передать больше параметров в sigintHandler
или мне нужно объявить его как глобальный?