ãªãããŒãå¶åŸ¡ã®äŸïŒ
ç§ã¯ããããããšãã§ããŸããããããŒã³ã¯ããªãããŒãæå¹ãã®ã«ãŒãã«å
¥ããŸãããè»äž¡æŠè£
ã«å
¥ãããšã¯ãªãããŸã£ããåããŸããã
ããã¯ç§ã䜿çšããŠããã³ãŒãã§ãïŒ
#include <ros/ros.h>
#include <geometry_msgs/PoseStamped.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/State.h>
#include <mavros_msgs/GlobalPositionTarget.h>
mavros_msgs::State current_state;
void state_cb(const mavros_msgs::State::ConstPtr& msg){
current_state = *msg;
}
int main(int argc, char **argv)
{
ros::init(argc, argv, "offb_node");
ros::NodeHandle nh;
ros::Subscriber state_sub = nh.subscribe<mavros_msgs::State>
("mavros/state", 10, state_cb);
//ros::Publisher local_pos_pub = nh.advertise<geometry_msgs::PoseStamped>
// ("mavros/setpoint_position/local", 10);
ros::Publisher global_pos_pub = nh.advertise<mavros_msgs::GlobalPositionTarget>
("mavros/setpoint_position/global", 10);
ros::ServiceClient arming_client = nh.serviceClient<mavros_msgs::CommandBool>
("mavros/cmd/arming");
ros::ServiceClient set_mode_client = nh.serviceClient<mavros_msgs::SetMode>
("mavros/set_mode");
//the setpoint publishing rate MUST be faster than 2Hz
ros::Rate rate(20.0);
// wait for FCU connection
while(ros::ok() && current_state.connected){
ros::spinOnce();
rate.sleep();
}
geometry_msgs::PoseStamped pose;
pose.pose.position.x = 0;
pose.pose.position.y = 0;
pose.pose.position.z = 2;
mavros_msgs::GlobalPositionTarget target;
target.latitude = 42.3005867;
target.longitude = -6.73246288;
target.altitude = 288;
//send a few setpoints before starting
for(int i = 100; ros::ok() && i > 0; --i){
//local_pos_pub.publish(pose);
global_pos_pub.publish(target);
ros::spinOnce();
rate.sleep();
}
mavros_msgs::SetMode offb_set_mode;
offb_set_mode.request.custom_mode = "OFFBOARD";
mavros_msgs::CommandBool arm_cmd;
arm_cmd.request.value = true;
ros::Time last_request = ros::Time::now();
while(ros::ok()){
if( current_state.mode != "OFFBOARD" &&
(ros::Time::now() - last_request > ros::Duration(5.0))){
if( set_mode_client.call(offb_set_mode) &&
offb_set_mode.response.mode_sent){
ROS_INFO("Offboard enabled");
}
last_request = ros::Time::now();
} else {
if( !current_state.armed &&
(ros::Time::now() - last_request > ros::Duration(5.0))){
if( arming_client.call(arm_cmd) &&
arm_cmd.response.success){
ROS_INFO("Vehicle armed");
}
last_request = ros::Time::now();
}
}
//local_pos_pub.publish(pose);
global_pos_pub.publish(target);
ros::spinOnce();
rate.sleep();
}
return 0;
}
ãããã¹ïŒ0.22
ROSïŒãããã£ãã¯
UbuntuïŒ16.04
[] ArduPilot
[X] PX4
ããŒãžã§ã³ïŒ1.72
[ INFO] [1513871636.932979892, 18.704000000]: Offboard enabled
[ INFO] [1513871642.007625263, 23.756000000]: Offboard enabled
[ INFO] [1513871647.086730559, 28.802000000]: Offboard enabled
[ INFO] [1513871652.230028795, 33.854000000]: Offboard enabled
[ INFO] [1513871657.324560463, 38.904000000]: Offboard enabled
[ INFO] [1513871662.405701045, 43.952000000]: Offboard enabled
[ INFO] [1513871667.482897607, 49.002000000]: Offboard enabled
[ INFO] [1513871672.582290375, 54.054000000]: Offboard enabled
[ INFO] [1513871677.688265367, 59.104000000]: Offboard enabled
[ INFO] [1513871682.756627458, 64.152000000]: Offboard enabled
[ INFO] [1513871687.861573086, 69.204000000]: Offboard enabled
[ INFO] [1513871692.928765643, 74.252000000]: Offboard enabled
[ INFO] [1513871698.006964586, 79.304000000]: Offboard enabled
[ INFO] [1513871703.113995111, 84.354000000]: Offboard enabled
[ INFO] [1513871708.205142370, 89.404000000]: Offboard enabled
[ INFO] [1513871713.332829113, 94.454000000]: Offboard enabled
[ INFO] [1513871718.443985089, 99.504000000]: Offboard enabled
header:
seq: 58
stamp:
secs: 53
nsecs: 0
frame_id: ''
status:
-
level: 0
name: "mavros: FCU connection"
message: "connected"
hardware_id: "udp://:14540<strong i="17">@localhost</strong>:14557"
values:
-
key: "Received packets:"
value: "19548"
-
key: "Dropped packets:"
value: "0"
-
key: "Buffer overruns:"
value: "0"
-
key: "Parse errors:"
value: "0"
-
key: "Rx sequence number:"
value: "94"
-
key: "Tx sequence number:"
value: "108"
-
key: "Rx total bytes:"
value: "808043"
-
key: "Tx total bytes:"
value: "26524"
-
key: "Rx speed:"
value: "15016.000000"
-
key: "Tx speed:"
value: "510.000000"
-
level: 0
name: "mavros: GPS"
message: "3D fix"
hardware_id: "udp://:14540<strong i="18">@localhost</strong>:14557"
values:
-
key: "Satellites visible"
value: "10"
-
key: "Fix type"
value: "3"
-
key: "EPH (m)"
value: "0.00"
-
key: "EPV (m)"
value: "0.00"
-
level: 0
name: "mavros: Heartbeat"
message: "Normal"
hardware_id: "udp://:14540<strong i="19">@localhost</strong>:14557"
values:
-
key: "Heartbeats since startup"
value: "48"
-
key: "Frequency (Hz)"
value: "0.900000"
-
key: "Vehicle type"
value: "Quadrotor"
-
key: "Autopilot type"
value: "PX4 Autopilot"
-
key: "Mode"
value: "AUTO.LOITER"
-
key: "System status"
value: "Standby"
-
level: 0
name: "mavros: System"
message: "Normal"
hardware_id: "udp://:14540<strong i="20">@localhost</strong>:14557"
values:
-
key: "Sensor present"
value: "0x00000000"
-
key: "Sensor enabled"
value: "0x00000000"
-
key: "Sensor helth"
value: "0x00000000"
-
key: "CPU Load (%)"
value: "0.0"
-
key: "Drop rate (%)"
value: "0.0"
-
key: "Errors comm"
value: "0"
-
key: "Errors count #1"
value: "0"
-
key: "Errors count #2"
value: "0"
-
key: "Errors count #3"
value: "0"
-
key: "Errors count #4"
value: "0"
-
level: 0
name: "mavros: Battery"
message: "Normal"
hardware_id: "udp://:14540<strong i="21">@localhost</strong>:14557"
values:
-
key: "Voltage"
value: "12.15"
-
key: "Current"
value: "-1.0"
-
key: "Remaining"
value: "100.0"
-
level: 2
name: "mavros: Time Sync"
message: "No events recorded."
hardware_id: "udp://:14540<strong i="22">@localhost</strong>:14557"
values:
-
key: "Timesyncs since startup"
value: "0"
-
key: "Frequency (Hz)"
value: "0.000000"
-
key: "Last dt (ms)"
value: "-9.905652"
-
key: "Mean dt (ms)"
value: "0.000000"
-
key: "Last system time (s)"
value: "48.740659000"
-
key: "Time offset (s)"
value: "4.147428739"
OK. I got messages from 1:1.
---
Received 5370 messages, from 1 addresses
sys:comp list of messages
1:1 0, 1, 2, 140, 141, 147, 24, 30, 31, 32, 33, 74, 76, 77, 85, 87, 102, 230, 105, 111, 241, 242, 245
ãŸãã while(ros::ok() && current_state.connected){
ã¯while(ros::ok() && !current_state.connected){
å¿
èŠããããŸãã
ãŸãã -httpsïŒ//github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69-$ïŒ$ global_position/global
ãããã¯ããããŒã¿ãååŸããŠããããšã確èªããŠãã ããã
whileã«ãŒããïŒã§ä¿®æ£ããŸããã
rostopic echo global_position / globalã¯æ£ããåºåãè¿ããŸãã
header:
seq: 283
stamp:
secs: 193
nsecs: 832815640
frame_id: "base_link"
status:
status: 0
service: 1
latitude: 42.3005867
longitude: -6.7324631
altitude: 2120.89452234
position_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
position_covariance_type: 1
ãã ãããŸã æ©èœããŠããŸããã ã³ãŒããå®è¡ãããšãæŠè£
ããããªãããŒããæå¹ã«ãããããã«ã³ãŒããçµäºããŸãã
ãããçæããå¯äžã®èŠåã¯æ¬¡ã®ãšããã§ãã
[ WARN] [1514991840.139563807, 7583.766000000]: SPG: sp not sent.
INFO [tone_alarm] negative
[ WARN] [1514991840.303175629, 7583.928000000]: CMD: Unexpected command 176, result 1
ã°ããŒãã«ããããŒã«ã«ã«å€æããŠãããmavros / setpoint_position / localãéä¿¡ããå¿
èŠããããŸããããããªããšãæ©èœããŸããã
ç§ã¯èå³ããããŸããããã¯ç§ã ãããã®åé¡ãæ±ããŠããã®ã§ããïŒ mavros / setpoint_position / globalã§å
¬éããã ãã§ãèªç©ºæ©ã®æ©å€ã®äŸãåçŸã§ãã人ã¯ããŸããïŒ
@mzahanaäžèšã®åé¡ã«ã€ããŠ@danividaniviãã¬ã€ãããŠ
ç§ããã®åé¡ã«ééããããšãè¿°ã¹ãããšæããŸãã æ£ãããããã¯ã«å ¬éããŠããããšã確èªã§ããŸããããMAVROSã¯ãããPX4ã®æ£ããMAVLINKã»ãããã€ã³ãã¡ãã»ãŒãžã«å€æã§ããªãããã§ãã QGroundcontrolã䜿çšããŠç¢ºèªãããšãããããŒã«ã«ã䜿çšããŠããå Žåã«ã®ã¿ãPX4ã§å ¬éãããŠããã»ãããã€ã³ãã¡ãã»ãŒãžã確èªã§ããŸããã
@mzahanaå®è£ ãäŒãŸããŠããããæ©èœããããšã確èªã§ããŸããïŒ ããããšã
@ eric1221bdayç°¡åãªè³ªåïŒ
ããããMAVROSã¯ãããPX4ã®æ£ããMAVLINKã»ãããã€ã³ãã¡ãã»ãŒãžã«å€æã§ããªãããã§ãã
ããã¯å°ãææ§ã«èãããŸããããã®ãããªæ å ±ã§åé¡ããããã°ããããšã¯ã§ããŸããã
ç§ã¯SITLã䜿çšããŠããŸããããã¯ããGPSã·ãã¥ã¬ãŒã·ã§ã³ãæå¹ã«ãªã£ãŠããŠãROSã§ãããã¯ã衚瀺ã§ããŸããã mavlinkã®äºãã ã€ãŸããMavlink Inspectorã䜿çšããŠã°ããŒãã«èšå®å€ã衚瀺ã§ããªãã£ããããã°ããŒãã«èšå®å€ãpx4ã«æ£ããéä¿¡ãããŠããªãããã«èŠãããšããããšã§ãã
ããã¯ãã°ããŒãã«äœçœ®èšå®å€ãå ¬éããããšã¯æ³å®ãããŠããŸããããã°ããŒãã«ããããŒã«ã«ã«å€æããããŒã«ã«äœçœ®èšå®å€ãšããŠå ¬éããããšã«ãªã£ãŠããŸãã ãããã£ãŠãå®éã«ã¯ã°ããŒãã«ã»ãããã€ã³ãã¯è¡šç€ºãããŸããã
ã¯ããšæšæž¬ã§ããŸãããåæ§ã«ãPX4ãããããŒã«ã«èšå®å€ã確èªã§ããŸããã§ããã
ããã¯ãããŒããã©ã®ããã«èšå®ãããŠããããMAVROSã«äœãå ¬éãããã©ããã«ãã£ãŠç°ãªããŸãã ããã¯ã詳现æ å ±ãªãã§ã¯ãããã°ã§ããŸããã
@ eric1221bdayä»ã«è¿œå ãããã®ã¯ãããŸããããããšããããéããããšãã§ããŸããïŒ
ç§ã¯ãããç§ã®åŽã§åãã¹ãããããªãã«æ»ããŸãã
äœãé²å±ã¯ãããŸããïŒ ç§ã¯åãåé¡ãæ±ããŠããã解決çãèŠã€ããããšãã§ããªãããã§ãã
å¿ ãheader.stampãã£ãŒã«ããèšå®ããŠãã ããã ããããŠåããŠããã¯æ©èœããŸãïŒ
ããã«ã¡ã¯ïŒ ãããã¯/ mavros / setpoint_position / globalã«å ¬éããããšã§ããããŒã³ã®äœçœ®ãããŸãå¶åŸ¡ã§ããããšã誰ãã確èªã§ããŸããïŒ header.stampãã£ãŒã«ããèšå®ããŠããåãåé¡ãçºçããŸãïŒå¿çãåŸããããpx4ã¯ã¡ãã»ãŒãžãåä¿¡ããŠââããªãããã§ãïŒã
ã¯ããããã¯ç§ã®ããã«åããŸãïŒ
ããã§ãåãã§ã...ïŒç§ã«ã¯æ©èœããŸããïŒ
@tropapparãµã³ãã«ã³ãŒããå ±æããŠã
ã©ããïŒ
#include <ros/ros.h>
#include <mavros_msgs/CommandBool.h>
#include <mavros_msgs/SetMode.h>
#include <mavros_msgs/State.h>
#include <mavros_msgs/GlobalPositionTarget.h>
#include <sensor_msgs/NavSatFix.h>
// global variables
mavros_msgs::State current_state;
sensor_msgs::NavSatFix global_position;
bool global_position_received = false;
// callback functions
void globalPosition_cb(const sensor_msgs::NavSatFix::ConstPtr& msg) {
global_position = *msg;
global_position_received = true;
ROS_INFO_ONCE("Got global position: [%.2f, %.2f, %.2f]", msg->latitude, msg->longitude, msg->altitude);
}
void state_cb(const mavros_msgs::State::ConstPtr& msg) {
current_state = *msg;
}
// main function
int main(int argc, char **argv) {
ros::init(argc, argv, "test");
ros::NodeHandle nh;
ros::ServiceClient arming_client = nh.serviceClient < mavros_msgs::CommandBool > ("mavros/cmd/arming");
ros::ServiceClient set_mode_client = nh.serviceClient < mavros_msgs::SetMode > ("mavros/set_mode");
ros::Subscriber state_sub = nh.subscribe < mavros_msgs::State > ("mavros/state", 10, state_cb);
ros::Subscriber global_pos_sub = nh.subscribe < sensor_msgs::NavSatFix > ("mavros/global_position/global", 1, globalPosition_cb);
ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("mavros/setpoint_position/global", 10);
ros::Rate rate(10);
// wait for fcu connection
while (ros::ok() && !current_state.connected) {
ROS_INFO_ONCE("Waiting for FCU connection...");
ros::spinOnce();
rate.sleep();
}
ROS_INFO("FCU connected");
// wait for position information
while (ros::ok() && !global_position_received) {
ROS_INFO_ONCE("Waiting for GPS signal...");
ros::spinOnce();
rate.sleep();
}
ROS_INFO("GPS position received");
// set target position
mavros_msgs::GlobalPositionTarget goal_position;
goal_position.latitude = global_position.latitude;
goal_position.longitude = global_position.longitude;
goal_position.altitude = global_position.altitude;
// send a few setpoints before starting
for (int i=0; i<20; ++i) {
goal_position.header.stamp = ros::Time::now();
goal_pos_pub.publish(goal_position);
ros::spinOnce();
rate.sleep();
}
// set mode
mavros_msgs::SetMode offb_set_mode;
offb_set_mode.request.base_mode = 0;
offb_set_mode.request.custom_mode = "OFFBOARD";
if (set_mode_client.call(offb_set_mode) && offb_set_mode.response.mode_sent) {
ROS_INFO("OFFBOARD enabled");
} else {
ROS_ERROR("Failed to set OFFBOARD");
}
// arm
mavros_msgs::CommandBool arm_cmd;
arm_cmd.request.value = true;
if (arming_client.call(arm_cmd) && arm_cmd.response.success) {
ROS_INFO("Vehicle armed");
} else {
ROS_ERROR("Arming failed");
}
// take off to 5m above ground
goal_position.altitude = goal_position.altitude + 5.0;
while (ros::ok()) {
goal_position.header.stamp = ros::Time::now();
goal_pos_pub.publish(goal_position);
ros::spinOnce();
ROS_INFO_THROTTLE(1, "At altitude %.2f", global_position.altitude);
rate.sleep();
}
return 0;
}
ããã«ã¡ã¯ïŒ ãããã¯/ mavros / setpoint_position / globalã«å ¬éããããšã§ããããŒã³ã®äœçœ®ãããŸãå¶åŸ¡ã§ããããšã誰ãã確èªã§ããŸããïŒ header.stampãã£ãŒã«ããèšå®ããŠããåãåé¡ãçºçããŸãïŒå¿çãåŸããããpx4ã¯ã¡ãã»ãŒãžãåä¿¡ããŠââããªãããã§ãïŒã
ç§ãã§ããããããã¯/ mavros / setpoint_raw / globalã¯æ£åžžã«æ©èœããŠããŸãã
ããã«ã¡ã¯zxz0622ã
/ mavros / setpoint_raw / globalã§çŽ4æ¥éäœæ¥ããŠããŸããã緯床çµåºŠã®é«åºŠå€ãæå®ããŠã¯ã¯ããã³ãã¿ãŒã移åã§ããŸããã§ããã ã©ããã£ãŠããã®ãæããŠããã ããŸããïŒ
/ mavros / setpoint_raw / globalã®ãã©ã¡ãŒã¿ãå
±æã§ããŸããïŒ ïŒcoordinate_frame ...ïŒ
å€ãã¹ã¬ãããæãèµ·ãããŠç³ãèš³ãããŸããããç§ã¯åãããšãããããšããŠããŸãã _mavros / setpoint_position / global_ã§äœçœ®èšå®å€ãéä¿¡ããŠè»äž¡ãå¶åŸ¡ã§ããŸããã è»äž¡ã®ã¢ãŒã ã¯ãå転ããããŒã¿ãŒãå°é¢ã«çœ®ããã¿ã€ã ã¢ãŠãåŸã«æŠè£
解é€ããŸãã rostopic echo /mavros/setpoint_position/global
ã¯ãã³ãŒãã®èšå®å€ãå
¬éãããŠããããšã瀺ããŠããããšã確èªã§ããŸãã ãŸãã_mavros / setpoint_position / global_ã§ããŒã«ã«åº§æšèšå®å€ãéä¿¡ããããšãå®å
šã«æ©èœããããšã確èªã§ããŸãã
緯床ãçµåºŠã緯床以å€ã®ãã£ãŒã«ããèšå®ããå¿
èŠããããŸããïŒ
MAVROSã®ããŒãžã§ã³ãšãã©ãããã©ãŒã
ãããã¹ïŒãã¹ã¿ãŒ
ROSïŒã¡ããã£ãã¯
UbuntuïŒ18.04
ãªãŒããã€ãããã®ã¿ã€ããšããŒãžã§ã³
[] ArduPilot
[X] PX4
ããŒãžã§ã³ïŒãã¹ã¿ãŒ
蚺æ
rostopicãšã³ãŒã®ãµã³ãã«ïŒ
header:
seq: 10
stamp:
secs: 1861
nsecs: 652000000
frame_id: "base_footprint"
pose:
position:
latitude: 19.1345485
longitude: 72.9122298
altitude: -48.3160189477
orientation:
x: 0.0
y: 0.0
z: 0.0
w: 0.0
äžæè°ãªããšã«ãframe_idãã£ãŒã«ãã¯äœããã®åœ¹å²ãæãããŸããïŒ _local_origin_ãè©ŠããŠã¿ãŸããããå¹æã¯ãããŸããã§ããã
ããããšãã
ãããŒã³ã®é«åºŠããäžã«ãããã€ã³ããå ¬éããããã«ããŠãã ããã ã°ãããææ¡ã«æãããããããŸããããGPSã®é«åºŠãããŒã«ã«ã®é«åºŠããã¯ããã«é«ãå¯èœæ§ãããããšãå¿ããŠããŸãå¯èœæ§ããããŸãã
@swaroophangaläžèšã®@tropapparã§æå®ãããã³ãŒãã䜿çšããŠãåæ§ã®åé¡ã解決ããã®ã«ãèŠåŽããŠããŸãã
ã€ãŸãããmavros / setpoint_position / globalããä»ããŠäœçœ®ã«èšå®å€ãéä¿¡ããããšã«ãããè»äž¡ã¯ãªãããŒããããã«ã¯è
ã«æ£åžžã«å
¥ãããšãã§ããŸãããå°é¢ã«åº§ã£ãŠããŸãã
äœçœ®èšå®å€ãmavros / setpoint_raw / globalããéä¿¡ããããšããŸããããåãçŸè±¡ã§å€±æããŸããïŒã€ãŸããè»äž¡ã¯ãªãããŒããè
ã«ããå
¥ãããšãã§ããŸããããå°é¢ã«åº§ã£ãŠããŸãïŒã
@ burak-yildizozãŸããå ¬éããããã€ã³ãããããŒã³ã®GPSé«åºŠããäžã«ããããšãå確èªããŸããïŒäžèšã®
誰ãå©ããŠããããŸããïŒ
ããããšãããããŸããïŒ
-
MAVROSã®ããŒãžã§ã³ãšãã©ãããã©ãŒã
ãããã¹ïŒãã¹ã¿ãŒ
ROSïŒãããã£ãã¯
UbuntuïŒ16.04
ãªãŒããã€ãããã®ã¿ã€ããšããŒãžã§ã³
[] ArduPilot
[X] PX4
ããŒãžã§ã³ïŒãã¹ã¿ãŒ
蚺æ
rostopic echo / mavros / global_position / globalã®ãµã³ãã«ïŒ
ãããïŒ
seqïŒ206
åæïŒ
ç§ïŒ1286
nsecsïŒ28000000
frame_idïŒ "base_link"
ç¶æ
ïŒ
ã¹ããŒã¿ã¹ïŒ0
ãµãŒãã¹ïŒ1
緯床ïŒ47.3977421
çµåºŠïŒ8.5455932
é«åºŠïŒ535.327916774
position_covarianceïŒ[1.0ã0.0ã0.0ã0.0ã1.0ã0.0ã0.0ã0.0ã1.0]
position_covariance_typeïŒ2
rqt_graph
@ jungx148éä¿¡ããŠããmavlinkã»ãããã€ã³ããfmuãåä¿¡ããŠãããã©ããã確èªããå¿ èŠããããŸãã
@ Jaeyoung-Limããã«ã¡ã¯ãPixhawkã³ãã¥ããã£ãžã®ãã¹ãŠã®åªåãšè¿ éãªå¯Ÿå¿ã«æè¬ããŸãã
ããŒã«ã«ãªãããŒãå¶åŸ¡çšã«æ§ç¯ããã以åã«å ¬éããããmodudculab_rosããããžã§ã¯ãïŒãªã³ã¯ïŒãã°ããŒãã«ãªãããŒãå¶åŸ¡ã®ãããžã§ã¯ãã«å€æããäœæ¥äžã«ã以åã«åé¡ãè¿°ã¹ãŸããã
ãéä¿¡ããŠããmavlinkã»ãããã€ã³ããfmuãåä¿¡ããŠãããã©ããã確èªããå¿ èŠããããŸãããšããã³ã¡ã³ãã«ã€ããŠãQGCã§ãã©ã¡ãŒã¿ãPOSITION_TARGET_GLOBAL_INT ïŒãªã³ã¯ïŒ ãã確èªãããšãããfmuãå®éã«åä¿¡ããmavlinkã»ãããã€ã³ãããªãããšã«æ°ä»ããŸããã以äžã®QGCç»é¢ãããã£ããã£ããç»åã«ç€ºãããã«ã
ãŸãã以äžã«roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch
ã®åºåãæ·»ä»ããŸããã
` sunghunjung2 @ gcs ïŒã$ roslaunch modudculab_ros ctrl_pos_gazebo_offb.launch
... / home / sunghunjung2 / .ros / log / c7421548-ea08-11ea-8a18-b052161d0343 / roslaunch-gcs-16794.logã«ãã°ãèšé²ããŸã
ãã°ãã£ã¬ã¯ããªã§ãã£ã¹ã¯äœ¿çšéã確èªããŠããŸãã ããã¯æéããããå ŽåããããŸãã
Ctrl-CãæŒããŠäžæããŸã
ãã°ãã¡ã€ã«ã®ãã£ã¹ã¯äœ¿çšéã®ãã§ãã¯ãå®äºããŸããã 䜿çšéã¯1GBæªæºã§ãã
roslaunchãµãŒããŒãéå§ããŸããhttpïŒ// gcs ïŒ35869 /
ãã©ã¡ãŒã¿ãŒ
ããŒã
/
mavrosïŒmavros / mavros_nodeïŒ
offb_nodeïŒmodudculab_ros / pub_setpoints_trajïŒ
ROS_MASTER_URI = httpïŒ// localhost ïŒ11311
process [mavros-1]ïŒpid [16811]ã§éå§
process [offb_node-2]ïŒpid [16812]ã§éå§
`
-
ãã®åé¡ã«é¢ããŠãç§ã¯æ¬¡ã®2ã€ã®éšåãçã£ãŠããŸãã
容çè
1 ïŒ
ãã®åé¡ã¯ããã¹ã¯ãããã«ã€ã³ã¹ããŒã«ãããŠããMAVROSã®ããŒãžã§ã³ã«é¢é£ããŠãããšæãããŸãã
aptã³ãã³ãã䜿çšããŠros-kinetic-mavros *ãã€ã³ã¹ããŒã«ããææ°ã®mavrosgitããã±ãŒãžãcatkin_ws / srcãã©ã«ããŒã«ä¿åããŸããã
容çè
2 ïŒ
䜿ã£ãæ
ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("mavros/setpoint_position/global", 10);
ã
次ã®ãšã©ãŒã¡ãã»ãŒãžã衚瀺ãããŸãã
[ERROR] [1598713832.833795288, 426.168000000]: Client [/mavros] wants topic /mavros/setpoint_position/global to have datatype/md5sum [geographic_msgs/GeoPoseStamped/cc409c8ed6064d8a846fa207bf3fba6b], but our version has [mavros_msgs/GlobalPositionTarget/076ded0190b9e045f9c55264659ef102]. Dropping connection.
ãããŠãç§ã¯ãããã«çœ®ãæããŸãã
ros::Publisher goal_pos_pub = nh.advertise < mavros_msgs::GlobalPositionTarget > ("geographic_msgs/GeoPoseStamped", 10);
ãšã©ãŒã¡ãã»ãŒãžã¯è¡šç€ºãããŸããã§ããã ãã ãããããã®å Žåãããã©ã¡ãŒã¿ãŒãPOSITION_TARGET_GLOBAL_INTãã¯QGCmavlinkã€ã³ã¹ãã¯ã¿ãŒã«è¡šç€ºãããŸããã
ç¹°ãè¿ãã«ãªããŸããããã®åé¡ã確èªããããã«è²Žéãªæéãå²ããŠããã ããããããšãããããŸãã
äžèšã®åé¡ã解決ã§ããªãã£ããããmavros_msgsã䜿çšããŠQGCãããŠã§ã€ãã€ã³ãããã«ããå€éšã§èšç®ããããšãŒè§ãæ¿å ¥ããçµåããããŠã§ã€ãã€ã³ãïŒå€éšã§èšç®ããããšãŒè§ã§QGCãããã«ããããŠã§ã€ãã€ã³ãïŒãããã·ã¥ããããã«å€æŽããŸããã
ãã®ããã«ããŠãç§ã¯æãéãã«MAVãããŸãå¶åŸ¡ããããšãã§ããŸããã ã©ããããããšãããããŸããã
@ jungx148ããã¯è§£æ±ºçã§ã¯ãªããåãªãåé¿çã§ãã
éä¿¡ããŠããèšå®å€ãfmuã«éããŠãããã©ããã確èªããŸãããïŒ
@ jungx148ããªãã®åé¡ãïŒ1414ã«é¢é£ããŠããå¯èœæ§ã¯ãããŸããïŒ
誰ãããŸã çµè«ã«éããŸãããïŒ
ç§ã¯ãããã®3ã€ã®ãããã¯ã«ã€ããŠå ¬éããããšããŸããããéããããŸããã§ãã
"/ mavros / setpoint_raw / global"
"/ mavros / setpoint_raw / target_global"
"/ mavros / setpoint_position / global"
泚æïŒã¬ãŒãã·ãã¥ã¬ãŒã·ã§ã³ã®ã¿ãè¡ã£ãŠããŸã
ããŠç§ã¯æè¿ãã®ãšã©ãŒãèŠã€ããŸããïŒ
ãããã¯/ mavros / setpoint_position / globalãã€ãã«æ©èœããŸããïŒãã ããé«åºŠãªãã»ããã¯ãããŸããïŒïŒã rostopic info /mavros/setpoint_position/global
ããã䜿çšããå¿
èŠã®ããã¡ãã»ãŒãžã¿ã€ããgeographic_msgs / GeoPoseStampedã§ããã mavros_msgs / GlobalPositionTargetã§ã¯ãªãããšãããããŸãããããã¥ã¡ã³ããæŽæ°ãããªãçç±ãããããŸããã
ç§ãåãæäœãè¡ãããšããŠããŸããã€ãŸããmavros / setpoint_raw / globalãããã¯ã§mavros_msgs :: GlobalPositionTargetã¡ãã»ãŒãžãå
¬éããŸãããæ£åžžã«æ©èœããŸãã ãããŒã³ã¯é¢éžããç®çã®ãŠã§ã€ãã€ã³ãã«ç§»åããŸãã 誰ãããããŒã³ãè€æ°ã®ãŠã§ã€ãã€ã³ãã«ããŸãããã²ãŒããããã©ããããããŠãŠã§ã€ãã€ã³ãã«å°éãããã©ããããã§ãã¯ããããžãã¯ãå¿
èŠãã©ãããå°ãããã£ãã®ã§ããïŒ
ç§ããããå°ããçç±ã¯ãæ楌ãã©ã®ããã«ããŒã ããžã·ã§ã³ãèšå®ããã®ãããããªãããã§ãããã®ããããããŒã³ãæäŸãããã©ã³ãã ãªç·¯åºŠã«ç§»åãããšãç¡æéã«ãã®ãŠã§ã€ãã€ã³ãã«ç§»åããŸãã ãã®ãŠã§ã€ãã€ã³ãã«å°éãããã©ããã確èªããŠãããå¥ã®ãŠã§ã€ãã€ã³ããæäŸããæ¹æ³ã¯ãããŸããïŒ
ä»»æã®ææ¡ãããã ããã°å¹žãã§ãã
åãã£ãŠæè¬ããŸãã
ç§ãåãæäœãè¡ãããšããŠããŸããã€ãŸããmavros / setpoint_raw / globalãããã¯ã§mavros_msgs :: GlobalPositionTargetã¡ãã»ãŒãžãå ¬éããŸãããæ£åžžã«æ©èœããŸãã ãããŒã³ã¯é¢éžããç®çã®ãŠã§ã€ãã€ã³ãã«ç§»åããŸãã 誰ãããããŒã³ãè€æ°ã®ãŠã§ã€ãã€ã³ãã«ããŸãããã²ãŒããããã©ããããããŠãŠã§ã€ãã€ã³ãã«å°éãããã©ããããã§ãã¯ããããžãã¯ãå¿ èŠãã©ãããå°ãããã£ãã®ã§ããïŒ
ç§ããããå°ããçç±ã¯ãæ楌ãã©ã®ããã«ããŒã ããžã·ã§ã³ãèšå®ããã®ãããããªãããã§ãããã®ããããããŒã³ãæäŸãããã©ã³ãã ãªç·¯åºŠã«ç§»åãããšãç¡æéã«ãã®ãŠã§ã€ãã€ã³ãã«ç§»åããŸãã ãã®ãŠã§ã€ãã€ã³ãã«å°éãããã©ããã確èªããŠãããå¥ã®ãŠã§ã€ãã€ã³ããæäŸããæ¹æ³ã¯ãããŸããïŒ
ä»»æã®ææ¡ãããã ããã°å¹žãã§ãã
åãã£ãŠæè¬ããŸãã
ãããŒã³ã蚱容ç¯å²å ã«å ¥ããŸã§ãã°ããŒãã«äœçœ®èšå®å€ãå ¬éãç¶ããŸããããšãã°ãxyå¹³é¢ã§çŽ50 cmãz軞ã§10cmã§ãã 次ã«ãå¥ã®ãã€ã³ããå ¬éããŸãã
å®å
šã«ãã©ããŒããŠããŸããã§ããã ã¢ã€ãã¢ãåŸãããã«ãç°¡åãªãµã³ãã«ã³ãŒããéã£ãŠããã ããŸãããã ç§ã¯ããã€ãã®ããšãè©ŠããŸãããããããã¯ããŸããããŸããã§ããã Z軞10cmãŸãã¯mïŒ
ããããšãã
å®å šã«ãã©ããŒããŠããŸããã§ããã ã¢ã€ãã¢ãåŸãããã«ãç°¡åãªãµã³ãã«ã³ãŒããéã£ãŠããã ããŸãããã ç§ã¯ããã€ãã®ããšãè©ŠããŸãããããããã¯ããŸããããŸããã§ããã Z軞10cmãŸãã¯mïŒ
ããããšãã
ç§ã¯ããªãã«ã¢ã€ãã¢ãäžããããã ãã«ãããæžããŸããã ã°ããŒãã«äœçœ®ããµãã¹ã¯ã©ã€ãããŸãããã«ã«ã座æšã«å€æãããããããŒã³ãšç®çã®ãã€ã³ãã®å·®ããããå€ãããäœããªãããã«ã1e-6ä»è¿ã«ç·¯åºŠ/çµåºŠã®ãããå€ãèšå®ããŸãã é«åºŠã®å€ã¯åºŠã§ã¯ãªãã¡ãŒãã«ã§ãããããé«åºŠãå¥ã®æ¹æ³ã§åŠçããå¿ èŠããããŸãã ãããŒã³ãç®±ã®äžã«ããå ŽåããŠã§ã€ãã€ã³ãã«å°éããŸããã
çŸåšãsensor_msgs :: NavSatFixã䜿çšããŠãããŒã³ã®äœçœ®ãååŸããŠããŸãã ããªããèšããšããã°ããŒãã«ããžã·ã§ã³ã«ãµãã¹ã¯ã©ã€ãããŸããããªãã¯ãã®ãµãã¹ã¯ã©ã€ããŒã«ã€ããŠè©±ããŠããã®ã§ããïŒ
ãŸãã0.000001ä»è¿ã®ç·¯åºŠ/çµåºŠã§ãããå€ãäœæããæ¹æ³ãšããããŒã³ãããã¯ã¹å
ã«ãããã©ããã確èªããæ¹æ³ã«ã€ããŠå°ã詳ãã説æã§ããã°ãéåžžã«åœ¹ç«ã¡ãŸããïŒ
ãã§ã«å®è£
ããŠããå Žåã¯ãèšåããŠããããžãã¯ã®å°ããªã¹ãããããå
±æããŠããã ããŸããïŒ ããã¯ç©äºãã¯ããã«ç°¡åã«ããã§ãããã
ã©ããããããšãã
ã¿ãªãããããã«ã¡ã¯ã
ã°ããŒãã«ãã¬ãŒã ã«è€æ°ã®ãŠã§ã€ãã€ã³ãããããããŒã³ã®ããã²ãŒã·ã§ã³ã誰ãã解決ããå Žåã¯ã[ https://github.com/mavlink/mavros/issues/1553 }ãèŠãŠãåé¡ã解決ããŠãã ããã ç§ã¯ãããæ°é±éå®è£
ããããšããŸãããã解決çãåŸãããšãã§ããŸããã§ããã lat lonaltã䜿çšããŠãããŒã³ãè€æ°ã®ãŠã§ã€ãã€ã³ãã«ããã²ãŒããããã ãã§ãã
åãã£ãŠæè¬ããŸãã
æãåèã«ãªãã³ã¡ã³ã
ãŸãã
while(ros::ok() && current_state.connected){
ã¯while(ros::ok() && !current_state.connected){
å¿ èŠããããŸãããŸãã -httpsïŒ//github.com/mavlink/mavros/blob/master/mavros/src/plugins/setpoint_position.cpp#L69-$ïŒ$
global_position/global
ãããã¯ããããŒã¿ãååŸããŠããããšã確èªããŠãã ããã