-
Notifications
You must be signed in to change notification settings - Fork 22
Open
Description
Following the beginner tutorial Creating a ROS msg and srv, we define a custom message type Num
:
gsh@starfish:~/catkin_ws$ rosmsg show Num
[beginner_tutorials/Num]:
int64 num
uint8 age
string name
Then, the Python module for this message was generated with catkin_make
. Next, we import the Num
message into Julia as follows:
julia> using RobotOS
julia> @rosimport beginner_tutorials.msg.Num
julia> rostypegen()
julia> using .beginner_tutorials.msg: Num
julia> a = Num(-234, 12, "hello");
julia> a.name
"hello"
As observed above, RobotOS supports custom messages well. However, if we want to print the above variable a
, we usually simply type a
(or print(a)
) in REPL. However, an error will be caused
julia> a # or print(a)
Error information
Error showing value of type ERROR: MethodError: no method matching show_type_name(::IOContext{REPL.Terminals.TTYTerminal}, ::PyCall.PyObject)
Closest candidates are:
show_type_name(::IO, ::Core.TypeName) at show.jl:555
Stacktrace:
[1] show_datatype(::IOContext{REPL.Terminals.TTYTerminal}, ::DataType) at ./show.jl:618
[2] show(::IOContext{REPL.Terminals.TTYTerminal}, ::Type) at ./show.jl:497
[3] print(::IOContext{REPL.Terminals.TTYTerminal}, ::Type{T} where T) at ./strings/io.jl:35
[4] print(::IOContext{REPL.Terminals.TTYTerminal}, ::String, ::Type{T} where T, ::Vararg{Any,N} where N) at ./strings/io.jl:46
[5] println(::IOContext{REPL.Terminals.TTYTerminal}, ::String, ::Vararg{Any,N} where N) at ./strings/io.jl:73
[6] print_response(::IO, ::Any, ::Bool, ::Bool, ::Any) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:243
[7] print_response(::REPL.AbstractREPL, ::Any, ::Bool, ::Bool) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:223
[8] (::REPL.var"#do_respond#54"{Bool,Bool,REPL.var"#64#73"{REPL.LineEditREPL,REPL.REPLHistoryProvider},REPL.LineEditREPL,REPL.LineEdit.Prompt})(::Any, ::Any, ::Any) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:822
[9] #invokelatest#1 at ./essentials.jl:710 [inlined]
[10] invokelatest at ./essentials.jl:709 [inlined]
[11] run_interface(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2355
[12] run_frontend(::REPL.LineEditREPL, ::REPL.REPLBackendRef) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:1143
[13] (::REPL.var"#38#42"{REPL.LineEditREPL,REPL.REPLBackendRef})() at ./task.jl:356
caused by [exception 1]
MethodError: no method matching show_type_name(::IOContext{REPL.Terminals.TTYTerminal}, ::PyCall.PyObject)
Closest candidates are:
show_type_name(::IO, ::Core.TypeName) at show.jl:555
Stacktrace:
[1] show_datatype(::IOContext{REPL.Terminals.TTYTerminal}, ::DataType) at ./show.jl:618
[2] show(::IOContext{REPL.Terminals.TTYTerminal}, ::Type) at ./show.jl:497
[3] _show_default(::IOContext{REPL.Terminals.TTYTerminal}, ::Any) at ./show.jl:393
[4] show_default at ./show.jl:389 [inlined]
[5] show at ./show.jl:384 [inlined]
[6] show(::IOContext{REPL.Terminals.TTYTerminal}, ::MIME{Symbol("text/plain")}, ::
SYSTEM (REPL): showing an error caused an error
ERROR: MethodError: no method matching show_type_name(::IOContext{REPL.Terminals.TTYTerminal}, ::PyCall.PyObject)
Closest candidates are:
show_type_name(::IO, ::Core.TypeName) at show.jl:555
Stacktrace:
[1] show_datatype(::IOContext{REPL.Terminals.TTYTerminal}, ::DataType) at ./show.jl:618
[2] show(::IOContext{REPL.Terminals.TTYTerminal}, ::Type) at ./show.jl:497
[3] print(::IOContext{REPL.Terminals.TTYTerminal}, ::Type{T} where T) at ./strings/io.jl:35
[4] print(::IOContext{REPL.Terminals.TTYTerminal}, ::String, ::Type{T} where T, ::Vararg{Any,N} where N) at ./strings/io.jl:46
[5] show_tuple_as_call(::IOContext{REPL.Terminals.TTYTerminal}, ::Symbol, ::Type{T} where T, ::Bool, ::Nothing) at ./show.jl:1788
[6] show_tuple_as_call(::IOContext{REPL.Terminals.TTYTerminal}, ::Symbol, ::Type{T} where T, ::Bool) at ./show.jl:1755
[7] show_spec_linfo(::IOContext{REPL.Terminals.TTYTerminal}, ::Base.StackTraces.StackFrame) at ./stacktraces.jl:242
[8] show(::IOContext{REPL.Terminals.TTYTerminal}, ::Base.StackTraces.StackFrame; full_path::Bool) at ./stacktraces.jl:253
[9] show_trace_entry(::IOContext{REPL.Terminals.TTYTerminal}, ::Base.StackTraces.StackFrame, ::Int64; prefix::String) at ./errorshow.jl:555
[10] show_backtrace(::IOContext{REPL.Terminals.TTYTerminal}, ::Array{Base.StackTraces.StackFrame,1}) at ./errorshow.jl:659
[11] showerror(::IOContext{REPL.Terminals.TTYTerminal}, ::MethodError, ::Array{Base.StackTraces.StackFrame,1}; backtrace::Bool) at ./errorshow.jl:93
[12] show_exception_stack(::IOContext{REPL.Terminals.TTYTerminal}, ::Array{Any,1}) at ./errorshow.jl:737
[13] display_error(::IOContext{REPL.Terminals.TTYTerminal}, ::Array{Any,1}) at ./client.jl:104
[14] #invokelatest#1 at ./essentials.jl:710 [inlined]
[15] invokelatest at ./essentials.jl:709 [inlined]
[16] print_response(::IO, ::Any, ::Bool, ::Bool, ::Any) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:233
[17] print_response(::REPL.AbstractREPL, ::Any, ::Bool, ::Bool) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:223
[18] (::REPL.var"#do_respond#54"{Bool,Bool,REPL.var"#64#73"{REPL.LineEditREPL,REPL.REPLHistoryProvider},REPL.LineEditREPL,REPL.LineEdit.Prompt})(::Any, ::Any, ::Any) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:822
[19] #invokelatest#1 at ./essentials.jl:710 [inlined]
[20] invokelatest at ./essentials.jl:709 [inlined]
[21] run_interface(::REPL.Terminals.TextTerminal, ::REPL.LineEdit.ModalInterface, ::REPL.LineEdit.MIState) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/LineEdit.jl:2355
[22] run_frontend(::REPL.LineEditREPL, ::REPL.REPLBackendRef) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/REPL.jl:1143
[23] (::REPL.var"#38#42"{REPL.LineEditREPL,REPL.REPLBackendRef})() at ./task.jl:356
Additionally, we cannot help
such a type either.
help?> Num
search: Number numerator Enum enumerate @enum isnumeric VersionNumber minimum
ERROR: KeyError: key "module" not found
Stacktrace:
[1] getproperty(::PyCall.PyObject, ::String) at /home/gsh/.julia/packages/PyCall/zqDXB/src/PyCall.jl:301
[2] getproperty(::PyCall.PyObject, ::Symbol) at /home/gsh/.julia/packages/PyCall/zqDXB/src/PyCall.jl:306
[3] aliasof(::DataType, ::Any) at ./docs/bindings.jl:44
[4] aliasof(::Base.Docs.Binding) at ./docs/bindings.jl:43
[5] doc(::Base.Docs.Binding, ::Type{T} where T) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/docview.jl:174
[6] doc(::Base.Docs.Binding) at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/docview.jl:153
[7] top-level scope at /buildworker/worker/package_linux64/build/usr/share/julia/stdlib/v1.5/REPL/src/docview.jl:368
In the contrary, it is totally OK to print
or help
a built-in message like std_msgs.msg.String
.
Version info
- ROS: noetic
- RobotOS v0.7.2
- Python 3.7.1
- Julia 1.5.0
Metadata
Metadata
Assignees
Labels
No labels