39 #include <boost/foreach.hpp> 40 #include <can_msgs/Frame.h> 41 #include <dataspeed_can_msgs/Frame.h> 46 printf(
"Usage: dbc_bag <bag_file> <topic> <dbc_file> [dbc_files]... [-O output_file]\n");
47 printf(
" [--unknown / -u] [--expand / -e]\n");
48 printf(
" [--lz4] [--bz2]\n");
49 printf(
" [--help / -h]\n");
52 int main(
int argc,
char** argv)
55 std::string bag_file_in;
56 std::string bag_file_out;
58 std::vector<std::string> dbc_files;
60 bool _unknown =
false;
65 unsigned int count = 0;
66 for (
int i = 1; i < argc; i++) {
67 std::string str = argv[i];
68 if (str ==
"--help" || str ==
"-h") {
71 }
else if (str ==
"--unknown" || str ==
"-u") {
73 }
else if (str ==
"--expand" || str ==
"-e") {
75 }
else if (str ==
"--lz4") {
77 }
else if (str ==
"--bz2") {
79 }
else if (str ==
"-O") {
82 bag_file_out = argv[i];
87 }
else if (count == 1) {
90 dbc_files.push_back(str);
99 if (bag_file_out.empty()) {
100 bag_file_out = bag_file_in +
".dbc.bag";
103 printf(
"Opening input bag file: '%s'\n", bag_file_in.c_str());
107 printf(
"Processing can_msgs/Frame on topic: '%s'\n", topic.c_str());
110 printf(
"Opening dbc files: \n");
111 for (
size_t i = 0; i < dbc_files.size(); i++) {
112 printf(
" - %s\n", dbc_files[i].c_str());
116 printf(
"Opening output bag file: '%s'\n", bag_file_out.c_str());
123 extractor.
openBag(bag_file_out, compression);
125 const ros::Time stamp_end = view.getEndTime();
126 const ros::Time stamp_begin = view.getBeginTime();
127 if (stamp_end > stamp_begin) {
128 int last_percent = 0;
131 if (m.
isType<can_msgs::Frame>()) {
132 can_msgs::Frame::ConstPtr msg = m.
instantiate<can_msgs::Frame>();
134 can_msg.
id = msg->id | (msg->is_extended ? 0x80000000 : 0x00000000);
137 stamp = msg->header.stamp;
138 }
else if (m.
isType<dataspeed_can_msgs::Frame>()) {
139 dataspeed_can_msgs::Frame::ConstPtr msg = m.
instantiate<dataspeed_can_msgs::Frame>();
141 can_msg.
id = msg->id | (msg->extended ? 0x80000000 : 0x00000000);
144 stamp = msg->header.stamp;
146 static bool warned =
false;
153 int percent = 100 * (stamp - stamp_begin).toSec() / (stamp_end - stamp_begin).toSec();
154 if (percent >= last_percent) {
155 printf(
"Processing: %d%% complete\n", last_percent);
161 printf(
"Warning: no messages\n");
165 printf(
"Successfully wrote parsed CAN data to bag\n");
void open(std::string const &filename, uint32_t mode=bagmode::Read)
ros::Time const & getTime() const
std::string const & getMD5Sum() const
ROSTIME_DECL const Time TIME_MAX
boost::shared_ptr< T > instantiate() const
std::string const & getDataType() const
int main(int argc, char **argv)