Okapi V4 logger not working?

When I tried to enable the logger it crashes the pros terminal when pointed to use it. And it doesn’t even make a file on my sdcard when pointed there.

  Motor leftMotor(5, false, AbstractMotor::gearset::green, AbstractMotor::encoderUnits::degrees);
  Motor rightMotor(4, true, AbstractMotor::gearset::green, AbstractMotor::encoderUnits::degrees);
  Motor middleMotor(3, false, AbstractMotor::gearset::red, AbstractMotor::encoderUnits::degrees);

  // chassis declaration
  std::shared_ptr<ChassisController> chassis = ChassisControllerBuilder()
    .withMotors(leftMotor, rightMotor, middleMotor)
    .withSensors(leftEncoder, rightEncoder)
    .withDimensions({{4_in, 10_in}, imev5GreenTPR})
    .withLogger(
        std::make_shared<Logger>(
            TimeUtilFactory::createDefault().getTimer(), // It needs a Timer
            "/usd/Chassis_Diagnostics", // Output to the PROS terminal
            Logger::LogLevel::info // Most verbose log level
        )
    )
    .build();

Are you on the latest version (RC8)?

Yes, I’m using the h-drive one from your push request last week that was based off of RC8 I believe. https://github.com/OkapiLib/OkapiLib/pull/394

Instead of guessing, please just check the version.

It’s from a pull request. Besides that the date is later than the RC8 build. I don’t know how to check the release I’m on.

You check it with prosv5 c inf, run inside a project. Please upgrade to the latest release.

This is what I got and I believe it to be up to date.

Name      Version    Origin
--------  ---------  -------------
kernel    3.2.0      pros-mainline
okapilib  4.0.0-RC8  local

I don’t trust your build, given that it is not from an official release. Otherwise, can you try to collect a stacktrace?

I can do that. How do you do that on the V5?

in case of a segfault or data abort exception, the first step is to make sure you run your program with the PROS terminal connected. When the exception occurs, you should see a section that starts with “BEGIN STACK TRACE” and contains a list of numbers. These numbers are the addresses of the instructions on the call stack at the time of the exception. Make a note of them. Now we can translate the addresses into filenames and even line numbers. Close the PROS terminal connection if you haven’t already, and run the following command: (For windows:)

"%PROS_TOOLCHAIN%\bin\arm-none-eabi-addr2line" -faps -e .\bin\hot.package.elf

(For linux/macos:)

arm-none-eabi-addr2line -faps -e ./bin/hot.package.elf

then you can paste in the addresses from earlier. Note: You may also need to change hot.package.elf to cold.package.elf if you get a bunch of question marks. Also if you don’t have the hot or cold packages, run with monolith.elf instead. This should give you the location of the line that triggered the exception.

2 Likes

This is all that I get from the terminal. The warning is from my h-drive I’m using a mixture of red and green motor cartridges.

         _+=+_
      .-`  .  `-.          8888888b.  8888888b.   .d88888b.   .d8888b.
   _+`     "     `+_       888   Y88b 888   Y88b d88P" "Y88b d88P  Y88b
  \\\sssssssssssss///      888    888 888    888 888     888 Y88b.
     .ss\  *  /ss.         888   d88P 888   d88P 888     888  "Y888b.
 .+bm  .s  *  s.  md+.     8888888P"  8888888P"  888     888     "Y88b.
.hMMMMs .  *  . sMMMMh.    888        888 T88b   888     888       "888
 `\hMMMb \ | / dMMMh:      888        888  T88b  Y88b. .d88P Y88b  d88P
   -SNMNo  -  oNMNs-       888        888   T88b  "Y88888P"   "Y8888P"
     `+dMh\./dMd/
        `:yNy:`                      Powered by PROS for VEX V5
           "                Copyright (c) Purdue University ACM SIGBots
Version:        3.2.0     Platform:  V1.0.8 (b124)     Uptime:    0.001 s
Compiled:   Nov 14 2019 15:24:08     Directory:  00/Documents/Pacman V2


2210 (My Task) WARN: ChassisControllerBuilder: The default gearset is selected. This could be a bug.

And when I run this arm-none-eabi-addr2line -faps -e ./bin/cold.package.elf and give it the memory address of the my task warning I get 0x00002210: ?? ??:0

2210 is not the memory address of your task. You see a memory permission error on the brain’s screen, but there is no stacktrace?

1 Like

That’s all I got back both from the brain screen and the pros terminal.

Is there a data abort message printed to the brain’s screen?

No all that is on the screen is a custom lvgl screen

That does not sound like a crash, then. Can you reproduce it in a new project?

That’s something I was thinking of trying, I’ll let you know. Do you want me to try the okapi RC8 build or the other one that I’ve been using?

Please try to only use official builds.

I created a new project with prosv5 conductor new-project test-project and put this in the main.cpp file.

#include "okapi/api.hpp"
using namespace okapi;

void opcontrol() {
auto drive = ChassisControllerBuilder()
                .withMotors(1, -2) // Left motor is 1, right motor is 2 (reversed)
                .withLogger(
                    std::make_shared<Logger>(
                        TimeUtilFactory::createDefault().getTimer(), // It needs a Timer
                        "/ser/sout", // Output to the PROS terminal
                        Logger::LogLevel::debug // Most verbose log level
                    )
                )
                .build();
}

When I run it on hardware with the terminal attached I get.

Version:        3.2.0     Platform:  V1.0.8 (b124)     Uptime:    0.001 s
Compiled:   Nov 14 2019 22:38:15     Directory:  Documents/test-project


2 (User Operator Control (PROS)) WARN: ChassisControllerBuilder: The default gearset is selected. This could be a bug.
2 (User Operator Control (PROS)) WARN: ChassisControllerBuilder: The calculated TPR from the given gearset and ratio (300) does not equal the TPR given in the ChassisScales (900). This is probably a bug.

Looks normal to me. What is the problem?