Multiple D435i cameras are synchronized in depth, can the master enable imu without damaging the synchronization function

Before opening a new issue, we wanted to provide you with some useful suggestions (Click "Preview" above for a better view):

Consider checking out SDK examples.
Have you looked in our documentations?
Is you question a frequently asked one?
Try searching our GitHub Issues (open and closed) for a similar issue.

All users are welcomed to report bugs, ask questions, suggest or request enhancements and generally feel free to open new issue, even if they haven't followed any of the suggestions above :)

Required Info

Camera Model
{D400 }

Firmware Version
(Open RealSense Viewer --><IP_ADDRESS>)

Operating System & Version
{ Linux (Ubuntu 20)

Kernel Version (Linux Only)
(5.15.0-46-generic)

Platform
PC

SDK Version
{ legacy / 2.51.1-0}

Language
{C/C++ }

Segment
{Robot }

Issue Description
<Describe your issue / question / feature request / etc..>
I have five D435I cameras and have achieved depth synchronization between them. The implementation mainly involves using one as the master and the other as the slave. But when I enable the IMU function on the master, the depth synchronization of the five cameras mentioned above cannot be synchronized, and the master's frametime will deviate from the other four cameras. My question is: Can you enable the IMU function of the master while synchronizing five depth cameras

@MartyG-RealSense

Hi @chenxiaocongAI  The IMU cannot be hardware-synced with a master trigger.  However, each individual camera's IMU data packet is timestamped using the depth sensor hardware clock to allow temporal synchronization between gyro, accel and depth frames.

Hi @chenxiaocongAI The IMU cannot be hardware-synced with a master trigger. However, each individual camera's IMU data packet is timestamped using the depth sensor hardware clock on that particular camera to allow temporal synchronization between gyro, accel and depth frames.

If it's just a single camera, I think your statement is fine, but what I need to do now is to enable the imu function when synchronizing the depth of 5 cameras. After successfully synchronizing the depth of 5 cameras, I enabled the Imu function on the slave camera, but this will affect the synchronization of the depth of 5 cameras. Have you tested the depth synchronization of 5 cameras and enabled the imu function of any camera at the same time? If tested, can I show you the demo

Depth should be the only stream that is being hardware-synced to the master.  However, a RealSense user at https://github.com/IntelRealSense/realsense-ros/issues/2648 found that the infrared stream was also apparently being affected.  So there is a precedent for a stream type that is not directly being synced to a master being affected by the sync process.
RealSense users usually do not use IMU in multiple camera hardware sync setups, so I do not recall a previous case where another user has experienced the same issue as you and I do not know of an official Intel test that has done so.

Depth should be the only stream that is being hardware-synced to the master. However, a RealSense user at IntelRealSense/realsense-ros#2648 found that the infrared stream was also apparently being affected. So there is a precedent for a stream type that is not directly being synced to a master being affected by the sync process.
RealSense users usually do not use IMU in multiple camera hardware sync setups, so I do not recall a previous case where another user has experienced the same issue as you and I do not know of an official Intel test that has done so. I do not have the equipment at my location to replicate your test myself.

There is a problem that I have never understood, since IMU also uses the timestamp of the depth sensor. Why am I unable to synchronize depth sensors with other cameras when I turn on IMU on one camera

The hardware sync system was designed for syncing depth between multiple cameras and has never supported use of IMU streams during sync, unfortunately.

Hi @chenxiaocongAI  Do you require further assistance with this case, please?  Thanks!

Which camera has depth and color sensors on the same motherboard
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Sun,Aug 13,2023 3:02 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
Hi @chenxiaocongAI  Do you require further assistance with this case, please?  Thanks!
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>

The D415 and D455 camera models have RGB and depth sensors on the same board.  The images below show the circuit boards of D415 and D455 with the RGB sensor integrated on them.
D415

D455

I successfully synchronized depth using 5 cameras (including d435i and d455), but when I turned on the color sensor on the master camera, I found that the arrival timestamp of the master camera sometimes differs by about 30ms from the depth data received by my program. May I ask if anyone has encountered a problem like mine and has addressed it
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Sun,Aug 13,2023 10:01 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
The D415 and D455 camera models have RGB and depth sensors on the same board.  The images below show the circuit boards of D415 and D455 with the RGB sensor integrated on them.
D415
D455
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>

When using a single camera and turning on the depth and color sensors, I found that the arrival time of the depth sensor sometimes lags behind the PC time when I received the callback by 30ms. When I receive data on the PC, I record the current time and then obtain the time of the depth sensor. When I compare the two, I sometimes find that it lags by 30ms. Why is this happening@MartyG-RealSense

When both depth and RGB are enabled, there will be a temporal offset of one frame, as advised by a RealSense team member at https://github.com/IntelRealSense/librealsense/issues/1548#issuecomment-389070550
If the wait_for_frames() instruction is used in a script then the RealSense SDK should automatically try to find the best match between depth and RGB.
The SDK should also attempt to automatically sync the two streams when they have the same FPS.  A way to help match the FPS is to disable an RGB option called Auto-Exposure Priority.   If Auto-Exposure is enabled and Auto-Exposure Priority is enabled then the SDK will attempt to enforce a constant FPS rate for both streams.

@MartyG-RealSense I'm not asking about the time difference between the depth sensor and the color sensor in the same frame. What I want to ask is, when a PC receives depth sensor data, it records the current PC time and subtracts the arrival time of the depth sensor from the PC time, resulting in a delay of over 30ms.

Timestamps are a complex subject, with different types of timestamp generating their time at different points (such as at the beginning of data transmission to USB, or at the beginning of exposure).  Some are generated by the camera hardware's firmware driver whilst others are derived from the computer's system clock.
At https://github.com/IntelRealSense/librealsense/issues/2188#issuecomment-409985803 a RealSense team member explains the differences in operation between timestamp types such as frame_timestamp and time_of_arrival.
I feel that if you want the depth data arrival time to match up with the system clock of the computer then retrieving the time_of_arrival timestamp is going to work best for you so that it can take account of the time required for a frame to be accessible by the user after it has been captured, processed and passed to the user interface.

https://github.com/IntelRealSense/librealsense/issues/8419
First, the RGB and depth are synced in one cameras.
Second, the depth can be synced among multi cameras.
Yes.  I will escalate this feature to dev team.
@RealSenseSupport
Has this feature been implemented? Can this function be used on multiple types of devices

Is there an example of multiple camera soft synchronization
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Tue,Aug 15,2023 3:17 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
Timestamps are a complex subject, with different types of timestamp generating their time at different points (such as at the beginning of data transmission to USB, or at the beginning of exposure).  Some are generated by the camera hardware's firmware driver whilst others are derived from the computer's system clock.
At #2188 (comment) a RealSense team member explains the differences in operation between timestamp types such as frame_timestamp and time_of_arrival.
I feel that if you want the depth data arrival time to match up with the system clock of the computer then retrieving the time_of_arrival timestamp is going to work best for you so that it can take account of the time required for a frame to be accessible by the user after it has been captured, processed and passed to the user interface.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>

This may be more complex than what you had in mind, but the CONIX Center at Carnegie Mellon created a system for networking up to 20 RealSense cameras simultaneously and combining their individual outputs into a single one.
https://github.com/conix-center/pointcloud_stitching
Intel's hardware sync white-paper guide also provides advice about software sync.

It is also possible to align frames in software using either their time-stamp or frame-number.  Both approaches are valid but you do need to be careful during the initial step of subtracting the offsets that the frames were not read across a frame boundary – for example one camera could have a frame belonging to a previous frame time.  The benefit of using the frame counters is that they will not walk off over time

More information can be found at https://github.com/IntelRealSense/librealsense/issues/2148

. D435 allows Depth to Color sync, and Depth to another Depth sync, but not Color to another Color, so at least one (or both) of the color sensors will not be synced.
Is this implemented under hardware synchronization. Has the official confirmed and conducted experiments to reach this conclusion

I would like to ask if the external HW sync, implicitly offers internal RGB-D sync (which is still in Intel's known bug lists) (on D435i or D455 devices).

Color to color sync has never been supported by hardware sync.  It may be possible to instead sync two streams from different cameras using the time_of_arrival timestamp though, as described at https://github.com/IntelRealSense/librealsense/issues/2186#issuecomment-409944362
Depth + RGB sync has never been supported for D435i.  Intel explored implementing RGB sync for D455 but decided not to proceed.
In theory, D415 supports depth + RGB hardware sync in Inter Cam Sync Mode 3 ('Full Slave') but in practice RGB sync never worked well and is no longer supported by Intel (though mode 3 is still selectable).

Why cannot depth and color sensors be synchronized in time and not placed on official documents. As an ordinary person, buying an RGBD camera assumes that the depth and color sensors are synchronized by default

On most RealSense camera models except D415 and D455, the depth and RGB sensors are not mounted on the same circuit board inside the camera and the RGB sensor is attached separately to the circuit board via a cable.  This means that sync between depth and color has to be performed by software mechanisms in the RealSense SDK.

But you don't have a method to synchronize depth sensors and color sensors on D455 either!

Hardware sync requires support in the firmware driver.  Support of RGB sync for D455 in the firmware was considered but implementation was not proceeded with.

Do you have a white paper for multi camera soft synchronization that you can check

No unfortunately, the only reference to multicam software sync is the one that I linked to earlier.
https://dev.intelrealsense.com/docs/multiple-depth-cameras-configuration#b-collecting-synchronous-frames

How to ensure that the order of their arrival is consistent when using multi camera synchronization. For example, when synchronizing for the first time, if the data from five cameras arrives in the order of 1, 2, 3, 4, and 5, will all synchronized data arrive in this order. The slave receives a trigger signal and my program receives data. The time difference between the slave's data arrival and the master's data arrival on the PC is 12ms. Can you reduce this time.

It should not matter which order the data of the slave cameras arrives in if their pipelines were all started at approximately the same time, as their timestamps will be synced to those of the master.
It is possible to set a specific start order for the cameras if that is your preference by using the serial number of each individual camera.
If you are hardware synching the cameras with sync cables connecting the cameras together then you could check the electronics of the sync wiring to make sure that there isn't latency that delays the arrival of the trigger from the master to the slaves.  If your sync wires are long then the trigger signal could become degraded as it travels over distance.

@MartyG-RealSense  Can't the colors, depth, and imu in D455 be turned on simultaneously, otherwise it may cause data lag in depth. I have seen in other issues before that either depth and imu are enabled, or depth and color are enabled. Why is this? What are the issues with opening simultaneously

You should not enable depth, color and IMU simultaneously in the RealSense Viewer because of an issue for which there is no fix, where one of the streams (usually RGB) becomes No Frames Received.  It is possible to use all three streams with program scripting with workarounds though.
In Python you can do it by creating two separate pipelines and putting depth + color on one pipeline and IMU on its own on the other pipeline.  The best Python example code for this is at https://github.com/IntelRealSense/librealsense/issues/5628#issuecomment-575943238
In C++ language you can accomplish it by using callbacks in your script - see https://github.com/IntelRealSense/librealsense/issues/5291

All filters are spatial Filter consumes the most performance. Is there a document regarding the performance requirements of these types of filters.
When I synchronize hardware with 5 cameras, each depth image undergoes a space filter, which sometimes results in synchronization failure due to inability to process (the master frame lags behind the other slots by two frames, and the device time is compared (their respective device times are recorded during the first successful synchronization). Has this issue been encountered by other colleagues

Decimation > Depth to Disparity > Spatial > Temporal > Disparity to Depth     What is the difference between Depth to Disparity and Disparity to Depth

@MartyG-RealSense

If you want to use 5 cameras (D435i and D455), can you use i7 CPU for processing. Still need to use a more advanced CPU

A RealSense team member at https://github.com/IntelRealSense/librealsense/issues/4468#issuecomment-513485662 states that "spatial filter is the one taking the most time and giving least quality improvement, so you might decide to drop it".
There is documentation about processing times for different filters at the link below.
https://dev.intelrealsense.com/docs/depth-post-processing#example-results-and-trade-offs

There is not a simple explanation for the difference between the depth to disparity and disparity to depth filters, except - as the names suggest - one converts a depth map to a disparity map and the other converts a disparity map to a depth map.  Technical information about this subject can be found at https://github.com/IntelRealSense/librealsense/issues/7431#issuecomment-700665046

In 2018 the recommendation from Intel was an Intel Core i7 processor or equivalent for 4 cameras.  As Intel processor technology has advanced considerably since 2018, a modern-day i7 is likely to be sufficient for 5 cameras.
The most obvious sign of a problem with a large set of cameras may be all but one of the cameras working (for example, 3 cameras working in a set of 4 and the 4th camera not working).
With a multiple camera setup, if you are using a USB hub then you also need to bear in mind the total data bandwidth that the cameras are consuming.  The more streams that are enabled on each camera and the higher the resolution and FPS, the more bandwidth that will be consumed.  This principle is demonstrated in multiple camera tables provided by Intel at the link below.
https://dev.intelrealsense.com/docs/multiple-depth-cameras-configuration#2-multi-camera-considerations
Modern hubs will commonly have a bandwidth allowance of 5 Gbps (gigabits per second), though 10 Gbps models are also available.

Under multi camera synchronization, it is common to send the same depth data (global time, frame ID, and device time are consistent). Why is this? Under what judgment mechanism does the underlying layer choose to send the same depth data as the previous one

Global Time is enabled by default on RealSense 400 Series cameras.  When multiple cameras are being used, Global Time generates a common timestamp for all streams, as described at https://github.com/IntelRealSense/librealsense/pull/3909

I do not know the answer to that question, unfortunately.

Texturecountthreshold, texturedifferencethreshold: What is the physical meaning

Most of the Advanced Mode functions, including scanlinep1 and scanlinep1onediscon, are not documented.  This is because these functions interact with each other in complex ways and so Intel chose to control them with machine learning algorithms.  RealSelse users are welcome to perform experimentation with the functions to see how changes affect the image though.
However, there is a detailed explanation of the meaning of texturecountthreshold and texturedifferencethreshold provided by my Intel RealSense colleagues at https://github.com/IntelRealSense/librealsense/issues/10608#issuecomment-1183341367

The RealSense SDK has a C++ example called rs-record-playback that records depth data to a bag file, , with an option to pause and resume the recording.
https://github.com/IntelRealSense/librealsense/tree/master/examples/record-playback

Is the depth image (0,0) and color image (0,0) of D455 directly aligned? No action required

Depth and RGB color are not aligned by default.
However, if the D455's infrared stream is used and its format set to output RGB8 color instead of Y8 infrared then the depth and color images will be perfectly aligned.  This is described at the link below.
https://dev.intelrealsense.com/docs/tuning-depth-cameras-for-best-performance#use-the-left-color-camera

Shouldn't an infrared stream only generate grayscale images? Why do we generate color images

The monochrome color is because of the Y8 infrared format.  The D405, D415 and D455 camera models are capable of providing color from the left infrared sensor by setting infrared to a color format instead of Y8 infrared.
The image contains IR dots because the camera's projector component casts a pattern of dots onto objects in the real-world scene to aid in depth analysis.  These are invisible to the human eye and only visible on infrared.
You can make the dots less visible by reducing the value of the Laser Power setting (though this reduces the quality of the depth image) or remove them completely by disabling the projector by setting Emitter Enabled to Off.

Is there any method for removing these projectors from images? ColorCorrection={0.520508, 1.99023, 1.50684, -2, -2, -0.0820312, 1.12305, 1.01367, 1.69824, -2, 0.575195, -0.411133 Can this method effectively remove project points

The D415 model supports a Visual Preset called Left Imager Color w/o IR pattern that removes the dot pattern from the IR image.

Iit does so by configuring the color correction matrix to a certain configuration.
https://raw.githubusercontent.com/wiki/IntelRealSense/librealsense/d400_presets/D415_RemoveIR.json
Those particular color correction values do not affect the dots on the D455 model though.

Can't  the dot pattern on D455 be removed？

I cannot recall a past case where somebody has succeeded in doing so.

“depth units” (the depth step size) to 100um instead of the default 1000um。How to set it in C++code because my depth range is below 2m. Is there a better setting

You can set the step size by accessing Advanced Mode, though it is simpler instead to change the depth scale using the instruction RS2_OPTION_DEPTH_UNITS (for example, changing the default depth unit scale of the 400 Series cameras from 0.001 to 0.0001 or 0.1).  A C++ script at https://github.com/IntelRealSense/librealsense/issues/6683 demonstrates both methods.
Depth unit scale
depth_sensor.set_option(RS2_OPTION_DEPTH_UNITS, 0.001);
Advanced Mode depth steps
STDepthTableControl depth_table = advanced_device.get_depth_table();
depth_table.depthClampMax = 1000;
depth_table.depthUnits = 1000;
advanced_device.set_depth_table(depth_table);

0.0001 is 0.1mm?  Do I choose 0.0001 for my 100um ？ Do I only need to select one of the above two settings

0.001 is millimeter scale and there are 1000 millimeters in a meter.
0.01 is centimeter scale.  There are 100 centimeters in a meter.  So I would recommend using 0.01 as the equivalent of 100.

Why is the red area not visible in the right eye, but the depth can be measured

The rough edge typically found at the left side of the depth image is due to a phenomenon called the Invalid Depth Band.  Page 87 of the current edition of the data sheet document for the 400 Series cameras has the following explanation for it.

The depth data generated by the D4 Vision Processor utilizes the left imager as the reference for the stereo matching algorithm, resulting in a non-overlapped region in the camera’s field of view.  This non-overlapped region (at the left edge of the frame) contains no depth data.  The invalid depth data band decreases as the distance from the camera/module to the scene increases.

So the left IR sensor cannot fully perceive depth in that far left-side edge of the camera's field of view.
In regard to temporal filtering, if the filter smooth alpha setting is reduced below the default value of 0.4 then the depth image will update more slowly, causing visible delay if the camera is moving quickly because the depth image cannot update fast enough to hide the change from one depth state to another.  Filter Smooth Alpha could be increased above 0.4 but the depth values may fluctuate more.

If you need to capture depth at high speed then you could use 848x480 and 90 FPS, or use High Speed Capture mode (848x100) that captures at 848x100 and 300 FPS, though reducing the vertical height of the image to a 100-tall strip at the center of the image so that it runs at 300 FPS but does not use any greater processing than 90 FPS.

what is filter by sequence id?

Filter By Sequence ID is used by the High-Dynamic Range feature of the RealSense SDK that allows exposure to alternate between two different values.  Usually when HDR is used, the infrared stream flickers rapidly.  Configuring the Sequence ID can stop the flickering.
https://dev.intelrealsense.com/docs/high-dynamic-range-with-stereoscopic-depth-cameras

Can subpixel errors and RMS errors be calculated using the realsense viewer tool

The Viewer does not have this function but the Depth Quality Tool does.  You can view these values in the side-panel of the tool.

Has a texture which is scale-invariant – meaning that it will show structure at many different ranges. This is mainly relevant if the projector is not mounted together with the stereo imaging system, or if multiple independent cameras look at the same object, but may be located at different distances away.
How should I understand why projector is not bound to the stereo camera. Do projectors require focal length processing？

So long as the projected pattern has a texture that is scale-invariant then it does not matter if a camera with a built-in projector or an external projector is moved around as the camera will still be able to analyze the pattern to aid in depth analysis of the observed scene.  The focal length is not a factor in the analysis of the projected pattern.

No RealSense camera model uses RGB for depth solving.  The depth image is constructed by capturing a pair of infrared images (left and right).  These images are captured in the camera hardware, and are not the same as the Infrared and Infrared 2 streams.  This is why depth can be streamed even when the infrared streams are inactive.

If a strong pattern projection is not present in the scene then the camera has to rely on the texture of the materials that objects / surfaces are made from and also the amount of light (artificial or natural) in the environment.  If the scene is dimly lit or the observed objects / surfaces have little or no texture on their materials (such as walls, doors or desks) then the camera will have difficulty reading depth from those surfaces.  The projected pattern casts a readable texture onto the surface of objects that the camera is able to analyze.

If a surface cannot be read easily, or at all, then there may be empty gaps in the depth image or the depth values may fluctuate wildly instead of remainng stabke.

Why is the fill rate of 0lux/fix close to 100%. Why does 102lux/STD decrease the fill rate when increasing transmission power

Does Gaussian Blur30x100x175back 8.5x11. pdf have an A4 sized image. Has anyone printed it in Chinese size

The diagram is much easier to read and interpret if it is magnified 2x, as you can then see that there are two different types of the same line color (solid for the relationship between fill rate and power, and dotted for the relationship between ambient light and power).

As laser power increases, fill rate (the amount of detail on the depth image) increases, increasing the image quality as holes and gaps are reduced.
But if the ambient environmental lighting level in the scene is increased then this causes a decrease in contrast and therefore reduces the fill rate (depth image quality) and increases RMS error (error that increases linearly as distance of the observed object from the camera increases).  This effect is likely caused because light in the scene makes a projected pattern more difficult for the camera to see.
The graph illustrates a trend that as the ambient lighting level is reduced, the fill rate reduces as laser power is increased.  The higher the ambient lighting level, the less that the fill rate reduces as laser power is increased.
So regarding your question about the fill rate, it appears that at 0 lux, the lack of ambient illumination means that there is minimal reduction in contrast and therefore maximum fill rate.  The opposite is true: at 102 lux, the negative effect on contrast is maximized and so fill rate drops significantly.

My understanding of the Gaussian calibration image is that there is not an A4 size version available, but if you select the 'print to fit' option when printing onto A4 then it will not matter as the self-calibration white paper states that "the exact nature of the texture is not critical, as long as it is semi-random and fairly “noisy” with high spatial frequencies".

thank you! May I ask you what the 'u diameter' in Census Enable Regs means? If this parameter is set to 1, it will mainly be processed on the D4 chip, and will it take too much time

The purpose of Census Enable Reg is not documented but it can be observed in the RealSense Viewer that when u-diameter is set to '1', colors that are strongly different to areas of color surrounding it change to match the surrounding color.
= 9

= 1

Additionally, the use of the color data to smooth and inpaint the depth data with an edge-preserving blur is often
helpful, such as with a domain transform [3].  how to use this  color  feature?

The [3] quote is talking about the original RealSense R200 stereo depth camera from 2015 and not the current RealSense 400 Series stereo cameras.

The 400 Series has post-processing filters that support domain transforms from depth to disparity and from disparity to depth, but these filters are only for depth data.

Usually it is better to use the Medium Density visual preset instead of High Accuracy, which often removes excessive amounts of depth detail from the image.  Medium Density provides a good balance between accuracy and the amount of detail on the image.

The Spatial post-processing filter has edge preserving properties, so you could try applying and configuring that filter to see whether it makes a difference to the right-angled area.

Do we need to first convert depth image data to disparity image data representation to use Spatial filtering for ealsense D435I

No, you do not need to apply the depth to disparity or disparity to depth filters in order to use Spatial filtering.

One transforms depth data to disparity data to produce a disparity map.  The other transforms disparity data back to depth data to produce a depth map.
There is not a better explanation available than that for what these functions do though, unfortunately.  The majority of RealSense users do not use these filters in their scripts.

Hi @chenxiaocongAI  Do you require further assistance with this case, please?  Thanks!

Close,thank you
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Mon,Sep 18,2023 5:44 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
Hi @chenxiaocongAI  Do you require further assistance with this case, please?  Thanks!
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>

You are very welcome.  Thanks very much!

from Whitepaper_External_Synchronization_of_Intel_RealSense_Cameras paper.
When the Genlock mode is selected, the camera will wait indefinitely for a trigger. Once the trigger arrives, exposure will start, as shown in Figure 1. This detail is important to note when temporally synching with
events from other cameras or devices, as there is up to 1 frame delay between trigger and readout. Since the stereo camera exposure is global shutter, the camera sensor will accumulate charge during the exposure time, and when done, it will read it out.
My question :Is it possible for the camera to have one frame delay, whether in external synchronization or master slave mode? Is this delay an accidental occurrence, or is there already a delay of one frame when the camera is turned on?

@chenxiaocongAI  The delay is not accidental.  In genlock mode, once a trigger is received then capture subsequently takes place after the exposure period has been completed.  You can set the exposure time manually, and so influence how much delay there will be before capture is initiated.  Or you can have auto-exposure enabled and leave the exposure timing to the camera to handle.

When using the non-genlock mode 2 (Slave), the camera does not wait to initiate capture.  It will listen for a hardware sync trigger for a certain time period on each frame and if it does not detect a trigger within that time period then it proceeds to capture the frame unsynched.

So is the delay here due to a long exposure time, resulting in a lag of one frame

The trigger signal cannot be faster than half the FPS value that the camera is set to.  So if your camera is set to 60 FPS then it is correct that the trigger signal should be half that - approximately 30 FPS.
A burst count of 1 means that if the camera is set to 60 FPS then each time that the trigger is released, the camera will burst 1 frame at 60 FPS and then wait for the next trigger.
Increasing the burst count increases the number of frames released by each individual burst - for example, a 3 frame burst at 60 FPS if the camera FPS is 60 and the burst count is set to 3.
The 'Frame Drops Per Second' graph is usually not a useful tool to refer to.  The important information will be the current FPS of the depth stream.  You can overlay this real-time information onto the depth image by clicking on the 'i' icon at the top of the depth stream panel.  In the image below, you can see that the Frame Drops Per Second graph is at its maximum height but the real-time depth FPS is a stable 59.96.

When I used an external trigger for synchronization, I found that there is a 1-2ms time difference between the timestamps of two cameras in the same frame. Is it because they are running their own crystal oscillators, resulting in a significant difference in the global timestamps of the two cameras

It looks as though the two cameras are on different frame counts, with the left camera on frame 610 and the right camera on frame 2161.  This indicates that the left camera's depth stream was started after the right camera's.  As the Viewer cannot start all cameras simultaneously because the depth stream for each camera has to be enabled manually, each camera will always be on a different frame.
It is possible to start all cameras simultaneously when using program scripting.

Even if the code starts the camera, there will still be a priority issue. You cannot start both cameras at the same time. What I want to confirm is whether the difference in timestamps between each camera is less than 1ms when external trigger synchronization is enabled
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Sat,Oct 7,2023 6:57 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
It looks as though the two cameras are on different frame counts, with the left camera on frame 610 and the right camera on frame 2161.  This indicates that the left camera's depth stream was started after the right camera's.  As the Viewer cannot start all cameras simultaneously because the depth stream for each camera has to be enabled manually, each camera will always be on a different frame.
It is possible to start all cameras simultaneously when using program scripting.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>

I do not have a means to confirm that unfortunately as I do not have hardware sync equipment to test with and the genlock sync system is no longer supported so it is not possible to seek advice from Intel about it.  I do apologize.

In external trigger mode, synchronize depth and color, both using manual exposure. When the exposure time of color exceeds 10ms, the merging of color and depth will cause confusion. You will find that a color device time has two corresponding depth device times.The situation of depth and color only occurs in external trigger mode.

coming frame  !!!!; color_device_time = 503649408 ; depth_device_time = 503637976
coming frame  !!!!; color_device_time = 503649408 ; depth_device_time = 503671304
coming frame  !!!!; color_device_time = 503682736 ; depth_device_time = 503671304
coming frame  !!!!; color_device_time = 503682736 ; depth_device_time = 503704630
**

I also encountered a problem above, which is that the combination of rgb and depth is chaotic, and when the color exposure time is too long
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Fri,Oct 20,2023 8:49 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
It's great to hear that you achieved 30Hz.  Thanks very much for the details!
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>

In genlock, RGB can only be synchronized in Inter Cam Sync Mode '3' (Full Slave).  Otherwise, depth will be synched and RGB will be unsyched.
However, RGB sync in genlock mode '3' was intended only for use with the D415 camera model and never worked well anyway, unfortunately.

@MartyG-RealSense
When I was synchronizing in external mode and using callback to obtain a frame of data, there was a situation where the color was not updated but the depth was constantly updated. At the beginning, the color was still updated, but it was more than 100 milliseconds different from the depth, but the color update did not exceed the depth, and in the end, the color was not updated. Is this a bug in the SDK? The SDK I am using is 2.53, and the FW is 05.14

Hardware sync does not sync RGB, so the RGB stream will capture independently of the depth stream's timings.
The External Synchronization (genlock) hardware sync system has Inter Cam Sync Mode '3' for synching RGB and depth, but it was designed for the D415 camera model rather than D435i,  Even then it did not work well, and the whole genlock hardware system ceased to be supported by Intel (though modes 3 and above are still accessible in the SDK).  Modes 1 and 2 are now th eonly officially supported Inter Cam Sync Mode values.

@MartyG-RealSense

Hardware sync does not sync RGB, so the RGB stream will capture independently of the depth stream's timings.
The External Synchronization (genlock) hardware sync system has Inter Cam Sync Mode '3' for synching RGB and depth, but it was designed for the D415 camera model rather than D435i, Even then it did not work well, and the whole genlock hardware sync system ceased to be supported by Intel (though modes 3 and above are still accessible in the SDK). Modes 1 and 2 are now the only officially supported Inter Cam Sync Mode values.

I don't require it to synchronize RGB at the moment. My current question is that in the frameset provided by the SDK, the depth is constantly updated, but the color is always old and has not been updated (device time remains the same). Can you see my question clearly before answering it

My response about depth and RGB not being synched was in reply to your statement that the color "was more than 100 milliseconds different from the depth" at the beginning before it stopped updating by the end.
If you are using a callback, have you put the word callback in the brackets of your pipeline start line so that the SDK knows that it is a callback script?  For example.
pipe.start(callback,cfg)

my code:
_cfg.enable_device(_dev_sn_str);
if (! _cfg.can_resolve(std::shared_ptr<rs2_pipeline>(*_pipe)) )
{
    LOG->error("startPipe(): Cannot Resolve Config for the pipe");
    exit(-1);
}

rs2::pipeline_profile selection = _pipe->start(_cfg, std::bind(&RS_Driver::frameCallback,this, std::placeholders::_1));

Do you mean that once the color falls behind the depth of 100ms, the color data will not be updated again? Is there a solution to this problem?

@MartyG-RealSense    I installed SDK using apt-install. Have there been any previous issues with this issue? If so, how can we solve it

There was a Python case at https://github.com/IntelRealSense/librealsense/issues/5417 where a RealSense user was using depth and RGB in a callback but said that the callback only contained data from one of the two streams.  The user found that in their particular case they needed to "call as_frameset() on the frame the callback was processing and then iterate over the frames".

@MartyG-RealSense Are the officials aware of this bug and have they addressed it in the new version

It may not be a bug but an issue in the script.  You could test the SDK's official rs-callback C++ program which streams depth and color to see whether you experience any problems with color frame updating in that script too.
https://github.com/IntelRealSense/librealsense/tree/master/examples/callback

@MartyG-RealSense
What is the essential difference between registering functions and your rs callback

My callback programming knowledge is admittedly limited so I do not have an answer for that question, unfortunately.  I do apologize.

Why is this problem not a bug? It has already affected the normal operation of my program, and the official has not provided a solution to the problem. What should you do if the customer encounters this problem? Can relevant developers be asked to answer this question head-on?
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Tue,Nov 21,2023 10:00 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
My callback programming knowledge is admittedly limited so I do not have an answer for that question, unfortunately.  I do apologize.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>

I tested the rs-callback example program and both depth and color functioned correctly, showing the same frame count without any slowdown of the update.  This suggests that there is not a bug affecting the color frame, at least not in this particular callback program.  I do not exclude the possibility that problems might occur if a depth-color callback was implemented in a different way to how rs-callback works.
My recommendation would be to not use callback in a program unless there is a vital reason for doing so, such as the IMU needing to be streamed in addition to depth + color (since depth-color-IMU does not work well without callback).
I will highlight your case to my Intel RealSense colleagues to seek their development advice.  Thanks very much for your patience.

@MartyG-RealSense
There is a viewpoint: if you do not reproduce it, it does not mean that the problem does not exist. Now that I have encountered this problem, you should look at it based on my own, rather than reproducing it and suspecting that my problem does not exist. Additionally, you cannot just give me one direction to try, you should help me investigate the cause of this problem and provide a fundamental solution

My Intel RealSense colleagues have reviewed this case, including the image that you provided earlier.

They confirmed that the screenshot appears to show that the color stream stops arriving but the depth stream continues.  They agreed with my suggestion to test the rs-callback C++ example program to see how the depth and color frames behave.  Since rs-callback has been confirmed to be functioning correctly, if the color frame is not being delivered when tested on your own computer then it could indicate an issue with your computer's configuration or your SDK installation.
They also suggested testing depth and color streaming in the RealSense Viewer to see whether color stream slowdown occurs in your Viewer.
Lastly, they suggested disabling Auto-Exposure Priority - as mentioned earlier in this discussion at https://github.com/IntelRealSense/librealsense/issues/12072#issuecomment-1677103476 - to see whether it forces the color stream to keep up with the depth stream.

@MartyG-RealSense
My framework hopes to use depth and color, IMU. Even if you give a special case that can use depth and color, it will not meet my future needs.my sdk install is use apt，2.53.1 is my version.
Can you confirm if your SDK is causing the color not to be updated, or is the color camera hardware not uploading data? Can the problem be analyzed step by step to confirm whether it is a software or hardware issue. Even if you say the callback is okay, can it prove that this phenomenon will not exist? Even if there is no problem with the callback you mentioned, it can only indicate that there is currently no problem, and cannot prove that the problem has been resolved.

In order to open an investigation into a potential bug, it is important to first establish evidence that a problem may be a bug and not an issue related to one particular customer's computer or scripting that is not occurring for other users.
The requests to perform testing of rs-callback and the RealSense Viewer on your computer are important to this evidence process, because if the color stream was also lagging / non-updating in these programs then it could indicate a problem with color streaming in general on your particular system rather than an SDK callback bug.
My colleagues provided further advice after reviewing your case.  They noted your mentions in October of using genlock hardware sync with multiple cameras.  If the camera is still on a genlock sync connection when testing your depth+color callback program then they suggest testing with just one camera or without hardware sync enabled.

I did do this experiment based on hardware synchronization. I tried using only one camera and turning on external hardware synchronization, but the problem still exists.
If I drive five cameras without using hardware synchronization, and the color is not updated and the depth is not updated, will you not continue the next step of investigation? Why does the PC hardware or system version cause this problem? I can't think clearly about this step. Can you tell me under what circumstances pc hardware or software will affect this result?

If you test with hardware sync off and you still have the color problem then I can certainly follow up again with my colleagues in the coming week to continue to explore your issue.
They provided some further advice.

If the RGB stream is stopped or drops a lot of frames, the SDK keeps using the last available frame.
One way to narrow down the problem would be to start simple by using only one camera without hardware sync and see if the problem persists.  Then gradually move to multi camera and hardware sync mode.

When doing external hardware synchronization, the signal generator generally cannot reach the true 30Hz. Therefore, through the oscilloscope, I should adjust the signal generator to be above 30.01 or below 29.06. When I am doing a single D455 camera display depth and color (without hardware synchronization), it often shows that color is less than depth. This is because I did not disconnect the connection line between the camera and the signal generator when doing external pulses. I would like to ask if my previous phenomenon was due to the mismatch between the frequency of the pulse signal and the camera frequency, resulting in no depth matching problem.The external hardware signal generator should not only have a frequency close to 30Hz, but also maintain a high level for 100us. How long does it take for the rise delay to reach the high level? What else should be noted

External hardware signal generators need to have a frequency close to 30Hz and a high level lasting for 100us. How long does it take for the rise delay to reach the high level? What else should be noted?
If the external frequency is 30Hz and the depth output is 30Hz, then the depth frequency should be set to 60Hz. If you want the color output to be 30Hz, should its frequency be set to 60 or 30？ @MartyG-RealSense

My undertanding is that when a waveform is square, the time for the trigger pulse to reach the 'high' state is instantaneous, and the height of the trigger is determined by the voltage (1.8 V in this case), with the base of the trigger representing 0 V and the peak of the trigger representing 1.8 V.  The width of the trigger (the length of time that it remains at the peak of 1.8 V before it falls back down to 0) is determined by the us value.
When using an external trigger, the trigger width is recommended to be at least 100 us.  When a master camera is generating the trigger pulse instead of an external device, the trigger width is just 50 us.
Below is an image from the genlock external sync paper.

In the genlock hardware sync system, the FPS that the camera is set to should be 2x the trigger frequency.  So if the trigger is 30 Hz, set the camera FPS to 60.

I am in external mode and have five cameras (2 D455 and 3 D435i) participating in hardware synchronization. They all enable depth, while D455 also enables color sensors. I found that in external mode, one of the cameras lost one frame every five frames in depth, but the color was not lost. Has anyone else encountered this situation? But when this camera does not participate in hardware synchronization, its depth and color are normal, and there is no frame loss in depth. But only the depth of the D455 camera has intermittent frame loss.  @MartyG-RealSense

Whilst you can use different models of RealSense camera in a hardware sync setup, ideally they should all be the same model otherwise differences in the hardware design of the different models could cause issues with achieving sync.
Inter Cam Sync Modes usually do not have color sync, only depth.  To sync both RGB and color, only mode 3 (Full Slave) can be used.
Slave modes 2 and 3 operate under different rules to mode 4+.  The camera does not wait indefinitely for a trigger pulse, but instead only waits for a certain period of time on each frame when listening for a trigger pulse before giving up listening on that frame and triggering capture independently (unsyched).
Also, mode 3 was intended for use only with the D415 camera model and even then it was unreliable.  Intel eventually dropped support for genlock sync (though it remains accessible in the SDK), and modes 1 and 2 (Master and Slave) became the only officially supported Inter Cam Sync Modes.

Can you ask the realsense professional team to help me investigate a problem? I don't care if the color is synchronized when I use the external mode for depth synchronization.  I just want to use color in external mode.
When the device time of the color is less than the depth device time and greater than 100ms, the color will continue to be updated (to approach the depth device time). However, when the color is updated to near depth but less than 30ms, will the SDK continue to only update depth without updating color.
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.727526
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.761374
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.795260
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.829184
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.863140
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.897140
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.931169
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.980000color_current_time =<PHONE_NUMBER>.965158
sm =<PHONE_NUMBER>18 ;depth_device_time =<PHONE_NUMBER> ;color_device_time =<PHONE_NUMBER> ;depth_backend_time =<PHONE_NUMBER>.020000color_current_time =<PHONE_NUMBER>.965158

<EMAIL_ADDRESS>callback duration: 2.043701 ms
25/11 11:43:40,986 DEBUG [140523419436800] (sensor.cpp:425) FrameAccepted,Depth,Counter,41,Index,0,BackEndTS,1700912620978.167969,SystemTime,1700912620986.205078 ,diff_ts[Sys-BE],8.037109,TS,1700912620986.333740,TS_Domain,Global Time,last_frame_number,40,last_timestamp,1700912620952.987061
25/11 11:43:40,986 DEBUG [140523419436800] (syncer-processing-block.cpp:55) --> syncing [Depth/120 #41 @1700912620986.33/Global Time]
25/11 11:43:40,986 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:40,986 DEBUG [140523419436800] (sync.cpp:123) <-- [Depth/120 #41 @1700912620986.33/Global Time]  (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128)
25/11 11:43:40,986 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:40,986 DEBUG [140523419436800] (sync.cpp:346) ... have [Depth/120 #41 @1700912620986.33/Global Time]
25/11 11:43:40,986 DEBUG [140523419436800] (sync.cpp:202) <-- [[Depth/120 #41 @1700912620986.33/Global Time]]  (CI: (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128))
25/11 11:43:40,986 DEBUG [140523419436800] (syncer-processing-block.cpp:20) <-- queueing [[Depth/120 #41 @1700912620986.33/Global Time]]
25/11 11:43:40,986 DEBUG [140523419436800] (syncer-processing-block.cpp:76) --> frame ready: [[Depth/120 #41 @1700912620986.33/Global Time]]
sm =<PHONE_NUMBER>18 ;delta device time = -860446  ; delta backend time = -0.861000 ; delta global time = -0.864640
sm =<PHONE_NUMBER>18 ;depth_device_time = 584627713 ;color_device_time = 583767267 ;depth_backend_time =<PHONE_NUMBER>.978000color_current_time =<PHONE_NUMBER>.121694
last_color_device_time = 583767267 ;color_device_time = 583767267
25/11 11:43:40,988 DEBUG [140523419436800] (sensor.cpp:34<EMAIL_ADDRESS>callback duration: 1.997314 ms
25/11 11:43:41,019 DEBUG [140523419436800] (sensor.cpp:425) FrameAccepted,Depth,Counter,42,Index,0,BackEndTS,1700912621011.520020,SystemTime,1700912621019.539062 ,diff_ts[Sys-BE],8.019043,TS,1700912621019.665283,TS_Domain,Global Time,last_frame_number,41,last_timestamp,1700912620986.333740
25/11 11:43:41,019 DEBUG [140523419436800] (syncer-processing-block.cpp:55) --> syncing [Depth/120 #42 @1700912621019.67/Global Time]
25/11 11:43:41,019 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,019 DEBUG [140523419436800] (sync.cpp:123) <-- [Depth/120 #42 @1700912621019.67/Global Time]  (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128)
25/11 11:43:41,019 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,019 DEBUG [140523419436800] (sync.cpp:346) ... have [Depth/120 #42 @1700912621019.67/Global Time]
25/11 11:43:41,019 DEBUG [140523419436800] (sync.cpp:202) <-- [[Depth/120 #42 @1700912621019.67/Global Time]]  (CI: (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128))
25/11 11:43:41,019 DEBUG [140523419436800] (syncer-processing-block.cpp:20) <-- queueing [[Depth/120 #42 @1700912621019.67/Global Time]]
25/11 11:43:41,019 DEBUG [140523419436800] (syncer-processing-block.cpp:76) --> frame ready: [[Depth/120 #42 @1700912621019.67/Global Time]]
sm =<PHONE_NUMBER>18 ;delta device time = -893801  ; delta backend time = -0.894000 ; delta global time = -0.897971
sm =<PHONE_NUMBER>18 ;depth_device_time = 584661068 ;color_device_time = 583767267 ;depth_backend_time =<PHONE_NUMBER>.011000color_current_time =<PHONE_NUMBER>.121694
last_color_device_time = 583767267 ;color_device_time = 583767267
25/11 11:43:41,021 DEBUG [140523419436800] (sensor.cpp:34<EMAIL_ADDRESS>callback duration: 2.104492 ms
25/11 11:43:41,052 DEBUG [140523419436800] (sensor.cpp:425) FrameAccepted,Depth,Counter,43,Index,0,BackEndTS,1700912621044.871094,SystemTime,1700912621052.877686 ,diff_ts[Sys-BE],8.006592,TS,1700912621052.984619,TS_Domain,Global Time,last_frame_number,42,last_timestamp,1700912621019.665283
25/11 11:43:41,052 DEBUG [140523419436800] (syncer-processing-block.cpp:55) --> syncing [Depth/120 #43 @1700912621052.98/Global Time]
25/11 11:43:41,053 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,053 DEBUG [140523419436800] (sync.cpp:123) <-- [Depth/120 #43 @1700912621052.98/Global Time]  (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128)
25/11 11:43:41,053 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,053 DEBUG [140523419436800] (sync.cpp:346) ... have [Depth/120 #43 @1700912621052.98/Global Time]
25/11 11:43:41,053 DEBUG [140523419436800] (sync.cpp:202) <-- [[Depth/120 #43 @1700912621052.98/Global Time]]  (CI: (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128))
25/11 11:43:41,053 DEBUG [140523419436800] (syncer-processing-block.cpp:20) <-- queueing [[Depth/120 #43 @1700912621052.98/Global Time]]
25/11 11:43:41,053 DEBUG [140523419436800] (syncer-processing-block.cpp:76) --> frame ready: [[Depth/120 #43 @1700912621052.98/Global Time]]
sm =<PHONE_NUMBER>18 ;delta device time = -927156  ; delta backend time = -0.927000 ; delta global time = -0.931291
sm =<PHONE_NUMBER>18 ;depth_device_time = 584694423 ;color_device_time = 583767267 ;depth_backend_time =<PHONE_NUMBER>.044000color_current_time =<PHONE_NUMBER>.121694
last_color_device_time = 583767267 ;color_device_time = 583767267
25/11 11:43:41,054 DEBUG [140523419436800] (sensor.cpp:34<EMAIL_ADDRESS>callback duration: 1.965820 ms
25/11 11:43:41,086 DEBUG [140523419436800] (sensor.cpp:425) FrameAccepted,Depth,Counter,44,Index,0,BackEndTS,1700912621078.226074,SystemTime,1700912621086.230713 ,diff_ts[Sys-BE],8.004639,TS,1700912621086.292480,TS_Domain,Global Time,last_frame_number,43,last_timestamp,1700912621052.984619
25/11 11:43:41,086 DEBUG [140523419436800] (syncer-processing-block.cpp:55) --> syncing [Depth/120 #44 @1700912621086.29/Global Time]
25/11 11:43:41,086 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,086 DEBUG [140523419436800] (sync.cpp:123) <-- [Depth/120 #44 @1700912621086.29/Global Time]  (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128)
25/11 11:43:41,086 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,086 DEBUG [140523419436800] (sync.cpp:346) ... have [Depth/120 #44 @1700912621086.29/Global Time]
25/11 11:43:41,086 DEBUG [140523419436800] (sync.cpp:202) <-- [[Depth/120 #44 @1700912621086.29/Global Time]]  (CI: (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128))
25/11 11:43:41,086 DEBUG [140523419436800] (syncer-processing-block.cpp:20) <-- queueing [[Depth/120 #44 @1700912621086.29/Global Time]]
25/11 11:43:41,086 DEBUG [140523419436800] (syncer-processing-block.cpp:76) --> frame ready: [[Depth/120 #44 @1700912621086.29/Global Time]]
sm =<PHONE_NUMBER>18 ;delta device time = -960512  ; delta backend time = -0.961000 ; delta global time = -0.964598
sm =<PHONE_NUMBER>18 ;depth_device_time = 584727779 ;color_device_time = 583767267 ;depth_backend_time =<PHONE_NUMBER>.078000color_current_time =<PHONE_NUMBER>.121694
last_color_device_time = 583767267 ;color_device_time = 583767267
25/11 11:43:41,088 DEBUG [140523419436800] (sensor.cpp:34<EMAIL_ADDRESS>callback duration: 2.059570 ms
25/11 11:43:41,119 DEBUG [140523419436800] (backend-v4l2.cpp:1501) FD_ISSET: no data on video node sink
25/11 11:43:41,119 DEBUG [140523419436800] (backend-v4l2.cpp:1585) video_md_syncer - synchronized video and md could not be pulled
25/11 11:43:41,119 DEBUG [140523419436800] (sensor.cpp:425) FrameAccepted,Depth,Counter,45,Index,0,BackEndTS,1700912621111.581055,SystemTime,1700912621119.613525 ,diff_ts[Sys-BE],8.032471,TS,1700912621119.589111,TS_Domain,Global Time,last_frame_number,44,last_timestamp,1700912621086.292480
25/11 11:43:41,119 DEBUG [140523419436800] (syncer-processing-block.cpp:55) --> syncing [Depth/120 #45 @1700912621119.59/Global Time]
25/11 11:43:41,119 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0x6981f223, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,119 DEBUG [140523419436800] (sync.cpp:123) <-- [Depth/120 #45 @1700912621119.59/Global Time]  (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128)
25/11 11:43:41,119 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0x6981f223, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,119 DEBUG [140523419436800] (sync.cpp:346) ... have [Depth/120 #45 @1700912621119.59/Global Time]
25/11 11:43:41,119 DEBUG [140523419436800] (sync.cpp:202) <-- [[Depth/120 #45 @1700912621119.59/Global Time]]  (CI: (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128))
25/11 11:43:41,119 DEBUG [140523419436800] (syncer-processing-block.cpp:20) <-- queueing [[Depth/120 #45 @1700912621119.59/Global Time]]
25/11 11:43:41,119 DEBUG [140523419436800] (syncer-processing-block.cpp:76) --> frame ready: [[Depth/120 #45 @1700912621119.59/Global Time]]
sm =<PHONE_NUMBER>18 ;delta device time = -993869  ; delta backend time = -0.994000 ; delta global time = -0.997895
sm =<PHONE_NUMBER>18 ;depth_device_time = 584761136 ;color_device_time = 583767267 ;depth_backend_time =<PHONE_NUMBER>.111000color_current_time =<PHONE_NUMBER>.121694
last_color_device_time = 583767267 ;color_device_time = 583767267
25/11 11:43:41,121 DEBUG [140523419436800] (sensor.cpp:34<EMAIL_ADDRESS>callback duration: 2.080811 ms
25/11 11:43:41,152 DEBUG [140523419436800] (sensor.cpp:425) FrameAccepted,Depth,Counter,46,Index,0,BackEndTS,1700912621144.935059,SystemTime,1700912621152.946289 ,diff_ts[Sys-BE],8.011230,TS,1700912621152.873535,TS_Domain,Global Time,last_frame_number,45,last_timestamp,1700912621119.589111
25/11 11:43:41,153 DEBUG [140523419436800] (syncer-processing-block.cpp:55) --> syncing [Depth/120 #46 @1700912621152.87/Global Time]
25/11 11:43:41,153 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,153 DEBUG [140523419436800] (sync.cpp:123) <-- [Depth/120 #46 @1700912621152.87/Global Time]  (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128)
25/11 11:43:41,153 DEBUG [140523419436800] (metadata-parser.h:179) Metadata mismatch - actual: 0xce287f63, expected: 0x80000000 (Intel Depth Control)
25/11 11:43:41,153 DEBUG [140523419436800] (sync.cpp:346) ... have [Depth/120 #46 @1700912621152.87/Global Time]
25/11 11:43:41,153 DEBUG [140523419436800] (sync.cpp:202) <-- [[Depth/120 #46 @1700912621152.87/Global Time]]  (CI: (TS: Depth/120 Infrared/121 Infrared/122 Color/123 Accel/127 Gyro/128))
25/11 11:43:41,153 DEBUG [140523419436800] (syncer-processing-block.cpp:20) <-- queueing [[Depth/120 #46 @1700912621152.87/Global Time]]
25/11 11:43:41,153 DEBUG [140523419436800] (syncer-processing-block.cpp:76) --> frame ready: [[Depth/120 #46 @1700912621152.87/Global Time]]
sm =<PHONE_NUMBER>18 ;delta device time = -1027226  ; delta backend time = -1.027000 ; delta global time = -1.031179

Genlock hardware sync mode does not have technical support provided by Intel for it any more, and so if someone chooses to use genlock then the Intel RealSense support team unfortunately cannot advise about new problems that arise from it that are not already referenced in previous cases.
If color sync is not important to you then technical support can only be provided for an external sync problem if all of the cameras use mode 2 (Slave), the camera FPS is set to 30 and the trigger frequency is matched as closely as possible to the actual FPS of the camera (for example, 30.02 Hz) using an external generator device such as an oscilloscope.    The white-paper guide for use of mode 2 is at the link below.
https://dev.intelrealsense.com/docs/multiple-depth-cameras-configuration

That is to say, if I can prove that this situation also occurs in Mode 2, will you help me solve it?

Yes, our team certainly can provide advice if it also occurs in Mode 2.

Although my problem appears in the external model, it is very similar to the master slave mode, except that external does not generate data flow without triggering signals. Are you not helping me solve this problem just because I am in the external model mode? You don't even know the cause of the problem, and just because I am an external model, you don't help me solve it?
I believe this issue can definitely be reproduced in Model 2. So before you reject me, I want your professional team to take a look at this issue. If they refuse because of this model, then I have nothing to say. Additionally, when purchasing your product, please indicate in the product manual that external mode is no longer supported.

External trigger sync is still supported but only when using Inter Cam Sync mode 1 and 2.
Support for genlock sync was withdrawn by removing its white-paper document from the directory page of white papers so that it was no longer accessible.  Mode 3 and above continues to be supported in the SDK for those who need it though.
https://dev.intelrealsense.com/docs/whitepapers
A PDF copy of the withdrawn paper is provided by me for those who need to use genlock because mode 1 and 2 cannot meet their project requirements, but on the understanding that genlock sync is no longer officially supported.
If you can test in mode 2 yourself and confirm that color is still not updating correctly on that particular D455 then I will be pleased to seek further advice from the RealSense support team about your problem.

Can you help me ask the realsensen team this question first? If they don't support me, I can continue to verify whether this problem exists in Model 2 mode

I have contacted them with the details of your described problem.  That you have a five camera setup of mixed D435i and D455 and are performing synced depth from all cameras, and unsynced color from the two D455.  And with one of the two D455, the color stream stops updating but works normally when not part of the hardware sync setup.
I will update you with their response as soon as I receive it, which should be during the coming week.  Thank you for your patience.

May I ask why the official does not support external mode? Is there any defect in this method with the camera? We want to understand the issue with using external on our end
发自我的iPhone
------------------ Original ------------------
From: MartyG-RealSense @.>
Date: Sat,Nov 25,2023 8:42 PM
To: IntelRealSense/librealsense @.>
Cc: chenxiaocongAI @.>, Mention @.>
Subject: Re: [IntelRealSense/librealsense] Multiple D435i cameras aresynchronized in depth, can the master enable imu without damaging thesynchronization function (Issue #12072)
I have contacted them with the details of your described problem.  That you have a five camera setup of mixed D435i and D455 and are performing synced depth from all cameras, and unsynced color from the two D455.  And with one of the two D455, the color stream stops updating but works normally when not part of the hardware sync setup.
I will update you with their response as soon as I receive it, which should be during the coming week.  Thank you for your patience.
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you were mentioned.Message ID: @.***>


Possible to delete specific image cache based on URL?

Hi,
Tried the library and works like a charm! (other than solving dependency issues)
Anyone know how I can clear specific cache?
This is because I am caching images from a dynamic list of items.
Some items will be permanently removed, therefore I'd like to remove the image from cache to save memory.
Thanks!

Closing in favour of #106


Can't set border color with the new lua API

Hi,
it seems that a recent update now ignores the configuration set within vim globals.
I used to set the border color like so:
vim.g.tokyonight_colors = { border = "blue0" }

it worked as expected.
With the current API I thought I needed to specify this within the setup (as the vim.g does not work) call like the following:
vim.cmd([[colorscheme tokyonight-night]])

require("tokyonight").setup({
	on_colors = function(colors)
		colors.border = colors.blue0
	end,
})

but it does nothing, nor the old vim.g.tokyonight_colors = { border ...
Maybe I've missed a section in the README?
Thanks!

My bad!
Didn't see the big
 ❗ configuration needs to be set BEFORE loading the color scheme with colorscheme tokyonight

closing the issue


Permission Boundary Issues

One of the interesting problems we hit is that our AWS setup requires all IAM roles to have a specific permissions boundary applied (DevBoundary). There is no good way yet to enforce that in SST.
The Error
Three different failures to do with creating roles in the bootstrap process. Here's one of them (with sensitive data redacted):
CDKToolkit |  2/12 | 7:18:46 AM | CREATE_FAILED        | AWS::IAM::Role          | ImagePublishingRole Resource handler returned message: "User<EMAIL_ADDRESS>is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::_________:role/cdk-hnb659fds-image-publishing-role-________-us-east-2 with an explicit deny in an identity-based policy (Service: Iam, Status Code: 403, Request ID: 5_________0)" (RequestToken: 9___________1, HandlerErrorCode: AccessDenied)

Things I Tried that did not work
Applying to config (this works, but not for all the roles in the bootstrap template):
export default {
  config(_input) {
    return {
      name: "deploy",
      region: "us-east-2",
      cdk: {
        customPermissionsBoundary: 'DevBoundary'
      }
    };
  },

Applying to the stack:
  const boundary = iam.ManagedPolicy.fromAwsManagedPolicyName('DevBoundary');
  iam.PermissionsBoundary.of(stack).apply(boundary);

Applying to the app:
  stacks(app) {
    const boundary = iam.ManagedPolicy.fromAwsManagedPolicyName('DevBoundary');
    iam.PermissionsBoundary.of(app).apply(boundary);

    app.stack(Backend, { permissionsBoundary: PermissionsBoundary.fromName('DevBoundary') });
  }

Adding a cdk.context.json with the following:
{
    "@aws-cdk/core:permissionsBoundary": {
        "name": "DevBoundary"
    }
}

How I finally got it working
I had to export the bootstrap template using
cdk bootstrap --show-template > template.yaml
Then, modify the template, adding this block to every AWS::IAM::Role:
      PermissionsBoundary:
        Fn::If:
          - PermissionsBoundarySet
          - Fn::Sub: arn:${AWS::Partition}:iam::${AWS::AccountId}:policy/${InputPermissionsBoundary}
          - Ref: AWS::NoValue

There are 5 roles in the template, and only one of them already has this block applied.
And finally, I updated the InputPermissionsBoundary to default to our custom DevBoundary.
Then I had to install the cdk cli and use that to bootstrap CDK with the altered template. Now that it's done, it shouldn't need to be done again unless we move to a different AWS account, or someone destroys the CDKToolkit stack in CloudFormation.

Related Issues:
https://github.com/sst/sst/issues/3105
https://github.com/sst/sst/issues/1056

It might be that we missed these after our recent updates. Can you share all the ones that failed? So we can go update them internally?

Sure. The one that already had the code block is: CloudFormationExecutionRole and the ones that I added the code block to are:

FilePublishingRole
ImagePublishingRole
LookupRole
DeploymentActionRole

Thanks! I'll check.

@cgcompassion hmm.. looking at CDK's bootstrap template, the permission boundary is indeed only set on the ExecutionRole — https://github.com/aws/aws-cdk/blob/6a7a24afcc1ebebf71c267b890732a455e865cc8/packages/aws-cdk/lib/api/bootstrap/bootstrap-template.yaml#L554-L558
SST could patch CDK's template.. but keeping the patch up to date over time might be tricky.
I think the it makes sense to submit a PR to CDK. And I can nudge them to expedite the review.

That's great insight, thanks. That should cover the CDKToolkit template, but what about the SSTBootstrap stack? I'm now encountering similar issues with that stack, but I don't see how to edit the template for that one... Thoughts?
SSTBootstrap stack is failing with errors like
User: arn:aws:sts::9____2:assumed-role/cdk-h___s-cfn-exec-role-9____2-us-east-2/AWSCloudFormation is not authorized to perform: iam:CreateRole on resource: arn:aws:iam::9___2:role/SSTBootstrap-CustomS3AutoDeleteObjectsCustomResourc-e___V with an explicit deny in a permissions boundary

This is because on our account, new IAM roles are not allowed unless they have a specific permission boundary applied.

We are transition this repo to https://github.com/sst/v2 and are closing this issue for now. If it is still relevant please reopen it there - sorry for the trouble


[SPARKTA-506][WEB]: Remove overLast attribute from cube triggers

OverLast attribute has been removed from cube triggers.
OverLast attribute is still configured to transformation triggers.

:shipit:

Comment accepted. Will treat it ASAP

Squashing and checks in progress.


Add a short description #65

Hey @MichalPorag, Thanks for your comment.
I'll take care of that later.


Expose natsjskv Watcher

Adds a Watch method to the nats-js-kv store. This exposes the underlying natsjs watcher and allows reacting to changes in the store.

Pipelines broken unrelated?
go: open /home/runner/work/plugins/plugins/v5/acme/certmagic/go.mod: no such file or directory

@asim is this something we would like to be merged?

If the test pass and it's been go fmt then sure, why not

If the test pass and it's been go fmt then sure, why not

@asim tests seem broken due to v5 update. Not sure what is going wrong. Unrelated to this PR:
go: open /home/runner/work/plugins/plugins/v5/acme/certmagic/go.mod: no such file or directory

I think the acme dir is gone?

I think the acme dir is gone?

I do not know to be honest. I was not involved in v5 update and also didn't see any PRs. So I do not know what the change between v4 and v5 is and neither do I know how this affects v4 builds.

I don't know what you're doing in your branch but you need to merge main otherwise this won't work.

It is up-to-date with main. Previous commit before this one is cc7e2f89efe751d5c0701f79b7ba5706dfc0eecc

I'm not near a computer but I'd do 'grep -r plugins/v5/acme' to see what's referencing this non existent path.

@asim I am having same issue. Other ones are also missing
./v5/acme/certmagic
./v5/codec/bsonrpc
./v5/sync/consul
./v5/sync/etcd
./v5/sync/memory

If the test pass and it's been go fmt then sure, why not

@asim tests seem broken due to v5 update. Not sure what is going wrong. Unrelated to this PR:
go: open /home/runner/work/plugins/plugins/v5/acme/certmagic/go.mod: no such file or directory

So it's a go work issue then. Fixing in a separate PR https://github.com/micro/plugins/pull/146

There still seems to be something wrong:
go: downloading github.com/Microsoft/go-winio v0.5.2
     | pattern ./...: directory prefix . does not contain modules listed in go.work or their selected dependencies

I tried go mod tidy but it doesn't help.

Try delete and reinitialise go work

Seems to be even more broken after the go work sync.
go<EMAIL_ADDRESS>requires
<EMAIL_ADDRESS>reading github.com/micro/protoc-gen-micro/go.mod at revision v1.0.0: git ls-remote -q origin in /home/runner/go/pkg/mod/cache/vcs/28cfbca4f5e41691076780b2017d5a1000b007b1d3d37b7a9d3b562c7adc9377: exit status 128:
	fatal: could not read Username for 'https://github.com/': terminal prompts disabled

I think this is somehow related to the v5 update. Pipelines were green before it. Did we change build mechanics with v5?


Feature: Bring back GraphQL extension

About
Apparently, the GraphQL extension got removed with 7c19eca78a10744b. It might want to be restored from version 2.0.7.
References

GH-547

Version 2.0.7 still included the GraphQL extension, so I guess we need to bring it back before the upcoming 2.1.0 release.
That patch brings it back.

GH-554


rename target to hosting

Signed-off-by: Ian Zhang<EMAIL_ADDRESS>CRD update is at:
https://github.com/stolostron/backplane-operator/pull/170

remember to update docs.

/retest

@ianzhang366 CI failed, please check.

@zhujian7

/lgtm


Fix/1.6.0 spice harvester fix

Description
Fix spice harvester for Authorities.
Since roles field is casted as array it should be also stored as array.
Also events start_date and end_date were not harvested properly.
And also not stored properly - since the database used DATE type which doesn't support years from before 1000-01-01.
Type of change

[x] Bug fix (non-breaking change which fixes an issue)
[ ] New feature (non-breaking change which adds functionality)
[ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)

Checklist:

[ ] I have updated the CHANGELOG
[x] I have requested at least 1 reviewer for this PR
[ ] I have made corresponding changes to the documentation

@rastislav-chynoransky however the biggest problem is still, that all hasMany relationships are causing duplications. method processHasMany() behaves bit weird.
also it would be more then nice to have option for some attributes to always replace hasMany relationships (especially for authorities) - to cover also when some event/name/.. is deleted in CEDVU.

@rastislav-chynoransky however the biggest problem is still, that all hasMany relationships are causing duplications. method processHasMany() behaves bit weird.
also it would be more then nice to have option for some attributes to always replace hasMany relationships (especially for authorities) - to cover also when some event/name/.. is deleted in CEDVU.

What entities are being duplicated? For each of them there are defined attributes to match against and should be easy to modify.
Items are being deleted by specifing such request via status attribute. Do we want to delete relationships when not present in export?

What entities are being duplicated?

e.g. names and events in Authority

For each of them there are defined attributes to match against and should be easy to modify.
Items are being deleted by specifing such request via status attribute. Do we want to delete relationships when not present in export?

eventually yes. e.g. for names & events definitely. the only source is from harvest / import. it's not possible to set them manually. they should stay 100% identical as in the source.

@rastislav-chynoransky good point. thank you for being on alert :)
well.. your code seems to be right. but it behaves weird - often in returns null even if condition "should pass". and creates another record. (but not always).
I tried this - and it works exactly as expected.
Beside the fact that it will ignore non-fillable attributes (what might be problem). But if you keep all "fillable" to be fillable - then it works fine.
Anyway - @mcudrnak said, that the best scenario would be to replace the data anyway (to be able to also remove from relationship). so I will probably update it in that way. (or option to specify relationships_to_always_replace)
Your suggestions are more then welcome.


Make git package management optional

For instances where git is managed elsewhere, include an optional parameter to let the git module know wether or not to manage the git package. The default for this parameter is true. This does require moving the call to the git module out of deps.pp into init.pp as you cannot pass parameters to a base class via inherits.

@jvervlied Thanks for the contribution! I decided to go with @timhughes idea to remove the module dependency in favor of ensure_packages.

Great! Just glad it's resolved either way. I think the other solution is a little more elegant anyways.


hi

you got any idea how to avoid segfaulting on arch64?
im' clueless here,
what arch did you run this at?
with what clang version?
the generated fuzzers segfaults for me...
in all sorts of different places
best

nevermind this is the answer: https://stackoverflow.com/questions/53610512/i386-architecture-deprecated-in-macos-error

ho wel.. thats not the answer...
i guess this is too old and dysfunctional..


Tooltip control should have "hovered over series" knowledge

The WPF tooltip control base (IChartTooltip) does not have a field for exposing the "currently hovered-over" series (the thicker-lined one in CartesianChart).
Right now, I have an elaborate workaround that involves detecting the DataHover event/command and shoving it into a subclass of IChartTooltip, but this breaks encapsulation.
If the IChartTooltip TooltipData exposed the series that is being hovered over this would become a lot easier.
The default LiveCharts tooltip control should also be updated to use this so that the hovered-over series title is displayed in bold.
Again, thanks for the awesome library and for the fast turnaround in gitter on this issue.

Thanks for the report, since version 0.9.7 you will be able to find which series fired the tooltip at IChartTooltip.Data.SenderSeries this should make it easier.
Regards!

Is the SenderSeries label set to FontWeight Bold by default? If so, am not able to see the Bold font. Am I missing something here? Sorry if this is a simple question. Am kind of newbie.


Hierarchy: nothing shown without IRI

No root entites are shown if useLegacy=false. With useLegacy=true it's working.
Can be reproduced in the Storybook in the HierarchyWidget story ClassHierarchy when removing the IRI.

:tada: This issue has been resolved in version 2.10.1 :tada:
The release is available on:

GitHub release
npm package (@latest dist-tag)

Your semantic-release bot :package::rocket:


add missing package.json file. now npm install adds missing package

missing package.json file blocks npm install of needed request package.
for some reason it was missing on some system, but hey, i'm not an npm expert.

@utzl i created a pull request which fixes #3


[CNVS Upgrade] Fix Nodes routes

This PR fixes the node routes.
I moved the component previously called NodesPage to NodesOverview, and created a new component called NodesPage which is a simple page wrapper for all of the nodes routes.
Because all of the node children routes render within the new NodesPage, I removed all of the Page component wrappers that were previously used by the child routes.

Working great :) Thanks for fixing this so quickly John.

LGTM! As discussed with @philipnrmn - there will likely be plenty of alterations here with the refactor. 🚢  it


chore: bdd-nh-1583398955 to 0.0.1

chore: Promote bdd-nh-1583398955 to version 0.0.1

[APPROVALNOTIFIER] This PR is NOT APPROVED
This pull-request has been approved by:
To fully approve this pull request, please assign additional approvers.
We suggest the following additional approvers:
If they are not already assigned, you can assign the PR to them by writing /assign  in a comment when ready.
The full list of commands accepted by this bot can be found here.
The pull request process is described here

Needs approval from an approver in each of these files:

OWNERS

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment


Skip dependents if a tap fails

If a tap fails, then any subsequent commands can grossly misbehave. For example:
tap 'example/formula', 'user@git.example.com:example/homebrew-formulas.git'

brew 'example/formula/internal-tool'

If tap fails, then bundle currently continues and will attempt to tap (and clone) https://github.com/example/homebrew-formula to much sad failure.
This PR changes bundle to skip any dependent installations when a tap fails. The other stanzas, brew, cask, mas, whalebrew, and others are unchanged and do not abort; my rationale is that their failures are isolated and don't impact each other.

Thanks for this @quad, I really like this idea. I'd love to see the scope narrowed a little bit so e.g. tap "cantino/mcfly" only causes an immediate failure if e.g. brew "cantino/mcfly/mcfly" is present.
Thoughts?

I thought about that but went this PR for the following reasons:

The installer would need to look ahead, making it more complex
A tap prefix is optional. e.g. brew "internalpackage" and brew "example/formula/internalpackage" are the same
Taps can change homebrew's behaviour, e.g. services or … bundle 😁
When would a tap not be used?

I don't have the confidence I can get the corner cases right. Especially since this PR is driven by a corner-case.

A tap prefix is optional. e.g. brew "internalpackage" and brew "example/formula/internalpackage" can resolve to the same formula

They can but: the latter will try to tap it and the prior will not. brew bundle dump always outputs the latter format (and may do for casks, I'm not sure).

Taps can change homebrew's behaviour, e.g. services or … bundle 😁

Kinda; these add behaviour/commands but arguably don't change it. They are also both auto tapped when run.

4. When would a tap not be used?

I've seen cases where people want to have a tap just so they can install from the packages available in it but might not want it to be fatal.

I'm still open to merging this as-is. @Homebrew/bundle any thoughts from you folks?

Since:

the majority of installs would likely be from core taps
core taps aren't likely to be b0rked
b0rked taps are not very likely if the Brewfile is recent

a more user-friendly approach might be:

If a tap fails, print an error and flag the tap name, but continue.
If a formula/cask begins with a flagged tap name, print a warning and continue.
Consolidate and print a list of failures at the end (this might already be happening, but I haven't had any bundle failures so far, so I can't be sure).

the majority of installs would likely be from core taps
core taps aren't likely to be b0rked
b0rked taps are not very likely if the Brewfile is recent

👍🏻 agreed with all this.

If a formula/cask begins with a flagged tap name, print a warning and continue.

I think this should be extended to "don't try to install it and print a warning stating why". This would avoid the need for lookahead while also partially addressing e.g. https://github.com/Homebrew/homebrew-bundle/issues/803..

3. Consolidate and print a list of failures at the end (this might already be happening, but I haven't had any bundle failures so far, so I can't be sure).

We don't do this but the output is minimal enough that I think it's probably not necessary.

A tap prefix is optional. e.g. brew "internalpackage" and brew "example/formula/internalpackage" can resolve to the same formula

They can but: the latter will try to tap it and the prior will not. brew bundle dump always outputs the latter format (and may do for casks, I'm not sure).

👌

Taps can change homebrew's behaviour, e.g. services or … bundle 😁

Kinda; these add behaviour/commands but arguably don't change it. They are also both auto tapped when run.

External commands from internal taps aren't auto-tapped.

When would a tap not be used?

I've seen cases where people want to have a tap just so they can install from the packages available in it but might not want it to be fatal.

👌 Good point!

a more user-friendly approach might be:
1. If a tap fails, print an error and flag the tap name, but continue.
2. If a formula/cask begins with a flagged tap name, print a warning and continue.
3. Consolidate and print a list of failures at the end (this might already be happening, but I haven't had any bundle failures so far, so I can't be sure).

I will make this change tomorrow morning AEST. It fixes my issue, so yay.
😢 that I'll be the one to make the install loop more complex. I was impressed / easily able to contribute thanks to its straight-forwardness!

@quad definitely don't worry about that, we're super glad to have you involved! ❤

@MikeMcQuaid 😰

@quad some failing tests here and missing test coverage but I think we're really close 😍

@MikeMcQuaid I made that line more idiomatic.
(It's been a minute since I've written Ruby in anger.)

@MikeMcQuaid Tests are passing. I'll investigate coverage.

@quad CI still failing I'm afraid. I think I've now made it so I don't need to re-approve CI each time you push a new commit, though.

@quad You may also wish to rebase on https://github.com/Homebrew/homebrew-bundle/pull/985 which will probably be merged before this PR is. Alternatively, just fix up CI failures here and I can fix up the merge conflicts for you.

Thanks so much for your first contribution!  You rock, @quad!


Hide some options and header type constructors

They are non intended to be used by customers.

https://github.com/Azure/azure-sdk-for-net/issues/7634


Podspec is incorrect

The podspec lists OS X 10.9 as the deployment target but alamofire 1.2.1 will not build using Xcode 6.2 and Xcode 6.3 requires OS X 10.10+

No, that's irrelevant. Just because Xcode 6.3 / OS X 10.10 is required to build an app using Alamofire doesn't mean that those are the requirements to run that app.


Ambient Weather PM25 PM2.5 Wireless Indoor / Outdoor Particulate Monitor

Forgive me if this is not the proper way to start the conversation and please inform me of the correct way as I could not find a direct means of communication.
@bachya I'm looking to purchase the below particle sensor when it is available. I'm wondering if it is currently or will be supported for display in HA? We have farmers who burn their fields when crops are done and I want to be able to use this to determine the changes in air quality.
https://www.ambientweather.com/ampm25.html
Thank you for your work!

Hi @jwood55812 – thanks for reaching out. This issues list is for known issues/bugs; if you would kindly start a topic on the Home Assistant forum (and @-mention me), I'll be happy to chat with you there!


Errors

Hi , I am trying add as component as mention on dovumentation, but it gives some errors. Is there any way to clear them?

Hello, this can be solved by importing namespace "Blace.Editing". So add a @using Blace.Editing at the top of the file.
@page "/"
@using Blace.Editing
@using Blace.Components
<Editor Files="Files" />
@code {
public List<BaseEditorFile> Files { get; set; } = new List<BaseEditorFile>()
{
    new TestEditorFile("Test")
};

public class TestEditorFile : BaseEditorFile
{
    public TestEditorFile(string name) : base(name)
    {
        Name = name;
    }

    public override Task<string> LoadContent()
    {
        return Task.FromResult("This is the content");
    }

    public override Task<bool> SaveContent()
    {
        return Task.FromResult(true);
    }
}

}
`
You can checkout https://github.com/florisheyvaert/Blace/tree/main/src/Blace.TestEditor , which contains a test project.

Thanks, for now I have cleared errors, however after building app and running it I am getting an unhandled error message. I am using webassembly and I put ace css links into the header section in the index file. There wa no intruction for the webassembly. Is it usable with webassembly?


Make min function require a getter if the first argument is an array of objects

The min function will accept an array of objects and no getter argument without error which is very error prone (I just found out the hard way).
The Problem
import { min } from 'radash'

const books = [{ title: 'About Trains', published: 298448934 }, { title: 'About Trains: Revised', published:<PHONE_NUMBER> }]

const least = min(books)

This works but it shouldn't! Inside min, the two book objects are being compared (which will always result in false). What we expect is this
const least = min(books, b => b.published)

The Solution
The min function should use better typing to insist that a second arg (the getter function) is required when the first argument is not an array of numbers.
I think this can be done using conditional types, I haven't dug into it yet but possibly something like:
const min = <
    TItem extends number | object,
    TFunc extends TItem extends number ? undefined | (item: number) => number : (item: TItem) => number
> (
  array: readonly TItem[],
  getter?: TFunc
) => {
 // ...
}

I'm not sure if this will work, just something to explore.
AC
min([0, 1]) // ok
min([{ value: 0 }, { value: 1 }]) // type error
min([{ value: 0 }, { value: 1 }], x => x.value) // ok

the examples you showed are right, it shouldn't be an array of objects ?
min([0, 1]) // ok
min([{ value: 0}, {value: 1 }]) // type error
min([{ value: 0}, {value: 1 }], x => x.value) // ok

@rayepps  I don't know if this is exactly what you wanted. I managed to implement something. Using functions because I found more than using "overload". But there must be some way to port this code to const
function min<T extends number>(array: readonly T[], getter?: undefined): T
function min<T extends object>(array: readonly T[], getter: (item: T) => number): T
function min<
  T extends number | object,
  Func extends T extends object ? (item: T) => number : undefined
>(array: readonly T[], getter: Func ): T {
  const get = getter ? getter : (v: any) => v
  return boil(array, (a, b) => (get(a) < get(b) ? a : b))
}

min([0, 1]) // ok
min([{ value: 0 }, { value: 1 }]) // type error
min([{ value: "1" }, { value: "ss" }]) // type error
min([{ value: "a" }, { value: "a" }], x => x.value) // type error
min([{ value: 0, a: "a" }, { value: 1, a: "a" }], x => x.value) // ok

view in typescript playgroud
I used this question on stackoverflow as a basis

Hey @MarlonPassos-git you are totally correct 🙏  I had mistyped those example, just updated them.
Thats so kool you got it to work! and so quickly!  I don't really mind the use of function. I prefer const but this gives us a pretty big advantage with the types so I'd be willing to use it.

@rayepps  Alright, I'll open a PR for that.
Regarding the use of const and function, do you have a specific reason for preferring const? Honestly, until today I haven't been able to find many differences besides the way it is written and how the function can be declared after its use. I don't even know if one is better than the other in some specific cases

For me:

const enforces single assignment. Using function someone could reassign the function a new value. Dangerous.
const does not have its own lexical scope which means no this which I very much like to avoid.
function being hoisted, IMO, is a bug -- not a feature -- so I prefer to use const and structure my modules in a way that function hoisting isn't needed.

Everyone has their reasons but then again, it's really just preference :) There's nothing wrong with using function.


MODCLUSTER-463 converts aliases for a context on -APP message arrival.

Unlike tomcat, that makes all aliases lower case even if you configure them upper case, undertow sends aliases verbatim - i.e. even upper case or camel case.
Our logic relies on comparing them, so this PR converts aliases to lower case on arrival.
Example
From mod_cluster manager console:
Before

Aliases:

default-host
LOCALHOST
KARM.YADA.YADA.REDHAT.COM

After

Aliases:

default-host
localhost
karm.yada.yada.redhat.com

Triggering build using a merge of e0452400d507ec81a377fe2c0e08b447ba0df106 on branch 1.2.x:
Private: https://jenkins.mw.lab.eng.bos.redhat.com/hudson/job/mod_cluster-1.3.x-pull-player-executor/

Build 184 outcome was SUCCESS using a merge of e0452400d507ec81a377fe2c0e08b447ba0df106 on branch 1.2.x:
Private: https://jenkins.mw.lab.eng.bos.redhat.com/hudson/job/mod_cluster-1.3.x-pull-player-executor/184
Public: https://hudson.jboss.org/hudson/job/mod_cluster-1.3.x-pull-player-executor/184

This was merged without a corresponding PR to master at https://github.com/modcluster/mod_proxy_cluster


Testautomation with Selenium

1st test implemented

changes implemented which are required for allOf

Added shuttle to testcases for arrays

All features are cover by at least one test.
More combinations of features in next release


[Docs] Broken links on Should you use Biff article

I noticed some broken links on https://biffweb.com/p/should-you-use-biff/ article.
After "These essays provide some additional background info that might help you further gauge if Biff is right for you:" the link is pointing to path /sites/1227c578-6578-45da-9250-8941140e7fe1/preview?path=/p/philosophy-of-biff/ giving 404, while path is /p/philosophy-of-biff/.
Nice project, thank's!

Thanks! Just fixed the links.


Update how-to-secure-workspace-vnet.md

Comments in the Python code example were wrong (setting image_build_compute to an empty string will bring customer's workspace back to serverless compute, which is the default option, not ACR tasks). Fixed the comment in that Python SDK example and moved the tip I had written in the previous PR to the respective CLI tab.

Made 1 small change, everything else is still the same.

#sign-off


Calculate the amount of time stopped

Hi,
is there any function to calculate the amount of time that the car was stopped with the ignition on or off?
thx

Traccar doesn't have it yet, but it's certainly possible to implement it as long as your device reports ignition info.

ok. thx. ;D


Add Dockerfile

Add Dockerfile to be able to use the Medusa admin inside a docker container.
I think it could be referenced in the docker-compose.yml, in https://github.com/medusajs/medusa-starter-default, so that the starter repo also starts up an admin dashboard.
I opened this issue before creating a PR, but my intention is to contribute :)

Hi, we don't offer support for Docker, and won't be adding it. You can use this community-maintained repo if you are looking for a complete docker setup: https://github.com/medusajs/docker-medusa.


⚠ Bofrost.at has degraded performance

In 94d3892, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 1815 ms

Resolved: Bofrost.at performance has improved in dec2a7f.


How to customize the name of the container?

How to customize the name of the container?（devcontainer up --workspace-folder）
What does the name field in the configuration file represent? for UI what is mean?

A command like this should work:
devcontainer build --workspace-folder <location_of_folder> --push true --image-name <image name I want to use, like docker_publisher/image_name:latest>
Please let me know if you were looking for something else!

@bamurtaugh Thanks.