TypeScript plugin?

A TypeScript plugin for styled-components can greatly enhance dev experience by suggesting CSS autocomplete right inside styled component string literals.
See GraphQL plugin as an example.

This is something I was thinking to do in the next 2-3 weeks.

FYI, an update on the current state. I was able to make the transformer work, the working prototype published from the repo: https://github.com/Igorbek/typescript-plugin-styled-components
I'm going to polish it slightly and add documentation shortly.

@Igorbek how is that plugin looking? Do we want to move it to the styled-components org? It seems like something a lot of people will want!

The plugin is looking pretty well. It does it suppose to do, and I'm pretty happy with that.
Comparing to Babel plugin, it has only one feature - supplying components' names.
In terms of readiness, the only issue right now is that awesome-typescript-loader (one of two the most popular typescript loaders for webpack) doesn't work correctly in watch mode. But they on track to fix it.
I've got a contradictory message from within a babel plugin repo, and I was not quite sure that styled-components org is interested in TS plugin.
Anyway, I'll be happy to move the plugin under SC org.

@philpl how is our webpack stuff going to replace the typescript plugin that adds autocomplete? That doesn't make any sense to me?

@mxstbr From the mentioned issue:

I'm currently working on a plugin for TypeScript that would do mostly the same as this one, so that typescript users don't need to use Babel (in most cases it's problematic). The prototype is working pretty well, however nothing is documented, that's next on the list:

So autocomplete is a super idea :) But the plugin shouldn't drop into what we'll do with our babel/webpack plugins in the future.

Ok, sorry everyone who was confused by my messages. I totally misread the original proposal regarding the TypeScript plugin. I don't know how that come that I understood something different. Maybe because that time I had started to work on the plugin.
The original proposal by @mohsen1 was about adding css auto-completion for editors for improving development experience. However my plugin was intended to be used in compile time for improving debugging experience. That does interfere with what you @philpl @mxstbr do with a webpack plugin, with nuances.
Sorry again, I'm leaving this conversation as too ashamed.

Haha No worries @IgorBek, still thank you very much for making that plugin!

There's now an official styled-components plugin for TypeScript by @Microsoft!! :scream: :100:
See here: https://github.com/Microsoft/typescript-styled-plugin


Bump function deployment runtime to Python 3.12

What is the context of this PR?
Now that we've moved to Python 3.12, we need to adjust the runtime for this cloud function, along with the service account name to allow the compute service account to access the notify_api_key
How to review
Run with the pipeline changes in this PR: https://github.com/ONSdigital/eq-pipelines/pull/637
Check that the cloud function starts without any issue
Checklist
*[ ] Tests updated

Closed - updated with more descriptive branch name


Warning: ClipLoader: React.createClass is deprecated and will be removed in version 16. Use plain JavaScript classes instead. If you're not yet ready to migrate, create-react-class is available on npm as a drop-in replacement.

thanks, I'm working on rewriting the lib in es6.
again, thanks for your report.

@kirillDanshin have you updated any of the files to es6?
I'm more than happy to help convert them, all I might need is just a completed example as a guide 😃

@haydencrain thanks! really glad to see that :)
now I've done test prerelease build script and 6 components. I plan to release full alpha version today or tomorrow.

@kirillDanshin waiting for the new release. I've started using halogenium for now, but I'll love to see those console errors go away.

@kirillDanshin do you plan to release a fix for this soon?

Any progress on getting a release for this soon? Happy to help out if needed.

@navinesh @haydencrain @Vishal0203 @joelfsreis @AlexChesters 2.0.0-rc1 is published

p.s. sorry for late reply

@kirillDanshin Just tried the v2 rc and the errors are still showing up. Is the usage for v2-rc1 the same as the ones shown in the README?

@dnlsandiego yep. I've checked up if errors are still there but after this patch those seems to be fixed

please use just released 2.0.0


accel calibration validation

fail if scale factors are negative

Bonus - validate sensor rotations during calibration

Added in https://github.com/PX4/PX4-Autopilot/pull/15600.


Make deployment automation to Package manager

currently Pinoccio could only be installed through cloning, it would better if Pinoccio could be installed unto a package manager such as npm, yarn, etc.

I think this would help a lot
Example in Yarn
https://yarnpkg.com/en/docs/creating-a-package
https://yarnpkg.com/lang/en/docs/publishing-a-package/


Break out ModelBuilder on the DbContexts and expose them as extensions.

This makes it much easier for integrators to be able to set up migrations on a single context if they desire.
I have implemented this as a single context in my application, but i still require 4 contexts in order to do a Add-Migration and Update-Database from the PackageManager console
If you break it out as such and then just pull in the ModelBuilder, then you will only require a single Context in the main running app in order to use the Migration wizard (sure there's -Context, but that becomes difficult to maintain)

Thanks! I'm about to merge the client and scope dbcontexts, so that should hopefully make life a little easier too.


autoreset doesn't work when no serial is connected

It doesn't work immediately after a reset or after the repl has been disconnected.

Fixed in 86a1d1db3004ce3c3d052e1e54941dfa4c369de7. It was broken by tightening when mp_cdc_enabled is set. We now ignore it because we should process any characters we receive.


When opening an URL the relevant section must be expanded

When I directly open a link to a collapsed section, the section should expand automatically.

this was fixed in the sidebar refactor ✨


[WIP] Bicep Templates for ACR, KeyVault, AppGW, and AKS

Changed source branch of Bicep-related changes. Successor of PR #285

Going to leave the modular approach to the AKS Baseline automation repo.  (recently referenced in #348)


Bounds update II

Hopefully resolve the registration issues with the General Registry

Locally fine by me. @chplate feel free to merge once tests are green here and on your side 👍


docs[patch]: feat: Update Zep Messaging and add links to Zep Cloud examples

Updated Zep Messaging and added links to Zep Cloud Examples for Vector Store, Retriever and Memory.

Thank you!

Can you please run yarn format?

@jacoblee93 Sorry about that, just updated the PR with formatting fixes!

Thank you!


"chrom_list" error

Hey Ruochi,
Previously I tried using Higashi using the config file(copied below), but I am getting the following error:
Traceback (most recent call last):
  File "Process.py", line 627, in <module>
    chrom_list = config['chrom_list']
TypeError: list indices must be integers or slices, not str

Any help with that will be great!
Note: I am using the same chromosome name in all input files.
config.json file:
[[
    {
    "data_dir":"./64CSE_1",
    "structured":false,
    "temp_dir":"./Temp",
    "genome_reference_path": "./64CSE_1/chrom_mm10.sizes",
    "cytoband_path": "./64CSE_1/cytoBand.txt",
    "chrom_list":["chr1","chr2","chr3","chr4","chr5","chr6","chr7","chr8","chr9","chr10","chr11","chr12","chr13","chr14","chr15","chr16","chr17","chr18","chr19","chrX","chr1","chr2","chr3","chr4","chr5","chr6","chr7","chr8","chr9","chr10","chr11","chr12","chr13","chr14","chr15","chr16","chr17","chr18","chr19"],
    "resolution" : 1000000,
    "resolution_cell": 1000000,
	"local_transfer_range":1,
	"dimensions":64,
	"loss_mode":"classification",
	"rank_thres":1,
	"embedding_epoch":60,
	"no_nbr_epoch":45,
	"with_nbr_epoch":30,
	"embedding_name":"test_1",
	"impute_list":["chr1","chr2","chr3","chr4","chr5","chr6","chr7","chr8","chr9","chr10","chr11","chr12","chr13","chr14","chr15","chr16","chr17","chr18","chr19","chrX","chr1","chr2","chr3","chr4","chr5","chr6","chr7","chr8","chr9","chr10","chr11","chr12","chr13","chr14","chr15","chr16","chr17","chr18","chr19"],
	"minimum_distance":1000000,
	"maximum_distance":-1,
	"neighbor_num":5,
	"impute_no_nbr":false,
	"impute_with_nbr":true,
	"cpu_num":-1,
	"gpu_num":4,
	"UMAP_params":{"n_neighbors":30,"min_dist":0.3},
	"TSNE_params":{"n_neighbors":15},
	"random_walk":false
	}
]]

Ah. I see.  The config file should not be wrapped with [[ ]].
BTW, there are duplicated entries in both "chrom_list" and "impute_list" in your shared config file.
I am currently also preparing a tutorial on a toy example dataset. But in the meantime, I'll share the link to the toy example with the corresponding config file with you here so you can mimic the structure of the input files.
https://drive.google.com/drive/folders/1NrKGRUKzcG_jfDjXV6qiYaaWSDg-XM-S?usp=sharing
Feel free to make suggestions if the documentation looks unclear or confusing to you. Thanks!

I will definitely check that out.
Also, I had some quick questions:

could higashi take diploid genome input? (I guess I will have to match chromosome names in all input files?)
it also looks like higashi can use interchromosomal contacts information as well? (looking at scHiCluster...the input file it requires seems only intrachromosomal contacts?)

You spotted a bug, 😄 . It should be the cell names instead of all "1", I'll fix that today.
"Rank" stands for ranking mode while "classification" stands for classification mode. If your dataset at the give resolution, most of the non-zero entries (e.g. > 80%) are just 1, then the classification mode would be sufficient as it just learn to predict nonzero entries. If your non-zero entries has a good continuous span, then the ranking mode would further learn the order of the values in the contact maps.
I don't quite understand the question. Do you just want to train Higashi at step 3? Higashi trains subsequently, the embeddings from step 1 would be important for step 3 as well. We do have options to skip the imputation after step 2. I'm also testing if skipping step 2 would not affect step 3 results as much. Will update the code base once that finished.
The {embedding_name}_0_origin.npy at {temp_dir} is the cell embeddings. You could also use the Higashi_vis to inspect both the embeddings and imputation results. I'll change the documentation to make it clearer

Haha, glad I did!
I understand.
Sorry, what I meant was the training step of Higashi(Step3 from the wiki page and not -s 3). So I have started training the model giving -s 1. This will run all the steps subsequently.
Oh I see now. In my {temp_dir}  I can see the *_0_origin.npy file and also the *_origin.npy files for all of my training chromosomes. So that's what made me confused.
At present, the code is running at epoch 10 (out of 15). I will probably let them all finish before downstream analysis on the embeddings...

It's a parameter that has been deprecated and will no longer be used in the program
Yes. Your understanding is correct
The first 15 epochs are just using bias effects (distance, batch id, chromosome id, cell coverage) to regress out the bias. There will be the following 60 epochs to get the real embeddings

I see. Can I then use UMAP on the {embedding_name}_0_origin.npy data?

Yes.


some questions about the localization

hello,i want to do hloc by my own datas and by the follow steps:
1.my datas:pictures,a fixed camera intrinsics,the true pose from RTK
2.build the sfm model by the triangulation

3.use the sfm model to do hloc in your frame

The sfm model  and  the best matchs in the hloc process seems right ;but the error between the result of the hloc and RTK seems very big,large than 0.8m.What might be the reason? thank you very much.

Sorry for the late reply. Since the keypoint detection is always somewhat noisy, some errors in the pose can be expected. Such errors grow when the 3D structure is more distant from the camera, as in the image pair that you show here. To reduce these errors, you can try to extract the keypoints at a higher resolution (even by upsampling the images).

Yes,you are right,The main reason is that the noise of the feature points in the distance is large .Thank you very much for your reply.


typing: Update main typing notifications protocol documentation.

This is a follow-up PR to #26477 and should be merged after those changes.
Updates the main description of the api/set-typing-status endpoint for the new fields in the POST register response for the typing start, stop, expired time intervals. Previously these were hardcoded by the client-side code and not the server-side code.
Also updates the developer documentation for typing indicators in the subsystems docs. This refreshes a few parts of that doc that were already out of date, as well as adds the information about the new register response fields noted above.
See the Read the Docs build in CI for the updates to the subsystems documentation.
Screenshots and screen captures:

Set "typing" status - main description
Current documentation

Self-review checklist

[ ] Self-reviewed the changes for clarity and maintainability
(variable names, code reuse, readability, etc.).

Communicate decisions, questions, and potential concerns.

[ ] Explains differences from previous plans (e.g., issue description).
[ ] Highlights technical choices and bugs encountered.
[ ] Calls out remaining decisions and concerns.
[ ] Automated tests verify logic where appropriate.

Individual commits are ready for review (see commit discipline).

[ ] Each commit is a coherent idea.
[ ] Commit message(s) explain reasoning and motivation for changes.

Completed manual review and testing of the following:

[ ] Visual appearance of the changes.
[ ] Responsiveness and internationalization.
[ ] Strings and tooltips.
[ ] End-to-end functionality of buttons, interactions and flows.
[ ] Corner cases, error conditions, and easily imagined bugs.

This is great, merged, thanks for cleaning this up @laurynmm!


Incorrect res8 location displayed in Beta

Describe the bug
Some hotspot locations are displayed in the incorrect res8 hex.
To Reproduce
Steps to reproduce the behavior:

Go to https://explorer-beta.helium.com/hotspots/111JUVKK9vkdLS4ZiMryYjLTjaaNmkhGT8e9E9sXtJnEC7PRyx9
The hotspot Chilly Rainbow Stork is displayed in the wrong res8 hex.

Expected behavior
This hotspot should be displayed in the neighbor res8 hex to the NE of what is currently displayed. See screenshot.
Screenshots

Closing this. I was incorrectly getting the resolution 8 hex via GPS coord vs parent of the res12.

Hi @radrob1,
Thanks for reporting this, we are looking into a possible discrepancy between the lat/lng and res12 index with ETL.

@radrob1 This has now been fixed. A new field was location_hex introduced to the ETL/API. The beta explorer should now show the correct res8 hex.


Heroku deploy fix

Overview
changes to css, addition of in progress test (still working on it)

Everything looks good! Feel free to merge!


[Release-1.28] - Access pods running on k3s via multiple interfaces

Backport fix for Access pods running on k3s via multiple interfaces

#9536

typo when backporting.


OpenAPI skill does not support Payload

The current implementation of OpenApi skill does not support Payload, only GET parameters.
As many APIs are using the payload, this is clearly a must from my point of view.
I am going to submit a Pull request to enable a first version of support for payload support if it's ok for you ?

I have been testing the open PR for this issue, and have found something which is missing. Enum values are not included in the payload description causing the AI to try and guess a valid value.
The could be address in a separate PR instead of increasing the scope of the current PR.

Can you confirm this has been resolved and close @SergeyMenshykh ?

Support for payloads for PUT and POST operations has been available since almost day one SK OpenAPI functionality was introduced - link. However, to use it, clients need to know its shape/schema in advance to build and include it as an argument in the arguments collection.
Recently, we extended OpenAPI functionality to support dynamic payload building, eliminating the need to know the payload schema in advance. More details can be found here - link.
Closing the issue for now. Please feel free to open another one if it doesn't suit your scenario.


Code block syntax highlighting differs drastically between editing and reading modes

When I'm working with notes that contain code blocks, the syntax highlighting of the code is very different between the editing and reading modes.
My expectation is that the syntax highlighting would use the same highlighting in both editing and reading modes.
I'm not sure which version is intended to be the "correct" form of syntax highlighting, but the highlighting I see in editing mode looks nicer (to me).
Example of syntax highlighting in editing mode

Example of syntax highlighting in reading mode

Reference source
For reference, here is the Markdown source I used in the example screenshots:
## Example

```python
def binary_search(arr, item):
    low = 0
    high = len(arr) - 1

    while low <= high:
        mid = low + ((high - low) // 2)
        guess = arr[mid]
        if guess == item:
            return mid
        elif guess > item:
            high = mid - 1
        else:
            low = mid + 1

    return None

item_count = sys.maxsize
item_to_find = random.randint(1, item_count)
items = range(1, item_count + 1)

print(f'Item {item_to_find} is at index {binary_search(items, item_to_find)} in the list.')
```

Thanks for reporting this.
I haven't yet had the time to deep dive into this, but looking into other themes, even the default Obsidian theme, this behavior seems to be pretty much present in whatever theme I test. Mostly with the same colors even.

I've yet to find an example of a theme that manages to make codeblocks look the same in preview and editing form and I think I see why.
In the editing view, the input variables to your example would be themeable as cm-hmd-codeblock.cm-variable:

But in the reading view, function variables aren't "adressable" at all, making them use the standard text color:

And the function itself in the editing view would be cm-def.cm-hmd-codeblock:

While in the reading view, this would be themed via token.function:

So I can make sure that Dracula colors are used "wherever possible" in code spans, but I doubt I'll be able to make them look identical in both views, while following the original Dracula color guides.

Thanks for taking a look. Is this a bug in Obsidian's reading view, then?

I hesitate calling it "bugged", but the way Obsidian renders the reading view does make it difficult to impossible to keep the coloring exactly the same for code blocks.
I'll add overrides for the colors that can be themed so they at least match Dracula theming though.

Thanks!

I added code block theming with Version 1.1.0 just now.
Tried to align the code views as best as Obsidian allows. In the editing view, many things share the same CSS tag, namely cm-hmd-codeblock which doesn't allow me to theme every aspect of the code like a regular IDE, but we should now approach true Dracula colors better.
This is an example of the Dracula theme with your example in VSCode:

This is what the editing view looks like now (Most of what shows up as the white foreground color uses the cm-hmd-codeblock, thus isn't possible to be individually themed as of now.

Reading view looks pretty similar, but for example the "None" in line 15 is themed as a keyword in the editing view, while it is tagged as a boolean in the reading view.

I gotta admit though, I leaned heavily on your example and haven't gone out of my way to look for all possible keywords that might require theming. If you have example code where portions stick out after 1.1.0 feel free to reopen paste them here.

This looks great. Thanks!

These changes indeed look awesome !
But I'm just wondering, it is possible to bring back the old background color of code blocks ? On big files it helped making a clear difference between them and regular text (ex. I use them without any language property to list the commits of the day during my internship, and now I just have big chunks of text showing in my files whereas before I clearly distinguished them as being less important than their summary above)

@EDM115 That's a good point. In IDEs using Dracula, the background is the same color as the whole page in Obsidian, so making it lighter behind code listings tends to wash out the colors. I wonder if the background color could be darker as a way to offset the code blocks from text?

Good points both.
I felt the original light background color messed with the text contrast too much and didn't think a distinction was required. I did notice however that between editing an reading view, the background of single line code differs still.
Maybe there is a way to put a border of the lighter background color around the code blocks, instead of changing the background entirely?
Let me try a few mockups of what might work.


Add date added on the column to search the list much easier

If there is a new ui being added its hard to find on the current page

duplicate of #55, and as shown birobirobiro as closed the issue indicating that he is probably not interested in added that feature or might have forgotten to add it.


Remove ga script

While looking into why the bounce rate on docs pages is off (issue #661), DivisonOf noticed that the docs site has a GA script and Tag Manager. This is duplicative because GA is installed sitewide through Tag Manager. They think this redundancy may affect bounce rate because two pageview events are sent when a page loads.
This PR removes the GA script.

This change is

http://cockroach-docs-review.s3-website-us-east-1.amazonaws.com/e7b17f43988e6ac07ba8a821936083f96fbd4bfe/


Suggestion: Mentions

It would be cool to be able to either get a list of comments directed to you (where someone have commented on a text you wrote) or in the editor you can enter "@niklas lindholm" or the user number ("@ #101") and you will see that post when you login presented as a list:
Niklas Lindholm commented your text #15989 in text #16202
... or something.

This would be pretty cool. It would have to be built on top of issue #107 though to handle the notification part.

Tumme upp!


Error Selenium docker

Hey i have this error :
badoo-infinite-scheduler | [2021-06-13 19:54:05 INFO] Operating 50 badoo like attempts, in progress ...
badoo-infinite-scheduler | Traceback (most recent call last):
badoo-infinite-scheduler |   File "liker.py", line 46, in
badoo-infinite-scheduler |     _run_badoo_liker()
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/click/core.py", line 764, in call
badoo-infinite-scheduler |     return self.main(*args, **kwargs)
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/click/core.py", line 717, in main
badoo-infinite-scheduler |     rv = self.invoke(ctx)
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/click/core.py", line 956, in invoke
badoo-infinite-scheduler |     return ctx.invoke(self.callback, **ctx.params)
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/click/core.py", line 555, in invoke
badoo-infinite-scheduler |     return callback(*args, **kwargs)
badoo-infinite-scheduler |   File "liker.py", line 42, in _run_badoo_liker
badoo-infinite-scheduler |     executor.run()
badoo-infinite-scheduler |   File "liker.py", line 29, in run
badoo-infinite-scheduler |     self._liker.start(self._attempts, self._message_to_send)
badoo-infinite-scheduler |   File "/code/badoo/services.py", line 33, in start
badoo-infinite-scheduler |     self._badoo_page.like()
badoo-infinite-scheduler |   File "/code/badoo/web/workflow.py", line 80, in like
badoo-infinite-scheduler |     "profile-action--color-yes"
badoo-infinite-scheduler |   File "/code/badoo/web/support/element.py", line 134, in click
badoo-infinite-scheduler |     self.wait_to_be_clickable()._element().click()
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 80, in click
badoo-infinite-scheduler |     self._execute(Command.CLICK_ELEMENT)
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webelement.py", line 633, in _execute
badoo-infinite-scheduler |     return self._parent.execute(command, params)
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute
badoo-infinite-scheduler |     self.error_handler.check_response(response)
badoo-infinite-scheduler |   File "/usr/local/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response
badoo-infinite-scheduler |     raise exception_class(message, screen, stacktrace)
badoo-infinite-scheduler | selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element
...
 is not clickable at point (292, 796). Other element would receive the click: ...

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element ... is not clickable at point (292, 796). Other element would receive the click: ...

Ok my dab dont run badoo same time...


UP037: autofix removes quotes from Literal["value"] typing when not imported

UP037's autofix removes quotes from typing.Literal["value"] when Literal is not imported, but it's supposed to have str values.
_DTYPE_BACKEND: Literal["pyarrow", "numpy_nullable"]

turns into
_DTYPE_BACKEND: Literal[pyarrow, numpy_nullable]

Details

Version: 0.0.286
Relevant settings: select = ["UP"]
Commands producing the bug:

the VSC extension's autofix
ruff . --fix
ruff . --fix --isolated --select UP

Is it a mistake or intentional that Literal is not imported?

The problem here is that we cannot identify Literal as typing.Literal if it's not imported. We could add an exception for this to avoid false positives but it could introduce have false negatives. Perhaps we can just avoid applying this fix (or reduce the applicability) if there's not a binding for the parent name of the subscript?

Yeah this is largely "working as intended" in that if we can't resolve a symbol to typing.Literal, then we treat values within subscripts in type annotations as type annotations themselves (typing.Literal is an exception).
I suppose we could change the logic to avoid treating values within subscripts as annotations if the subscript itself is unbound, although it would do the wrong thing if the user has any wildcard imports.

I'm not sure how to implement this with the way that we visit type definitions — do you have a suggestion @charliermarsh ?

@zanieb - What if we just treat "Literal" as typing.Literal if the symbol is unresolved...?


How to deploy yolov9-qat model using C++ TensorRT?

Hi, levipereira:
Thank you for your contribution, I want to deploy yolov9-qat model using C++ TensorRT.
Can you provide some reference materials?

The YOLOv9 QAT model utilizes Q/DQ nodes, simplifying the process of constructing the engine file significantly. Simply adding the flags --int8 --fp16 is sufficient to build the model. The remaining process is identical to non-QAT models. There are several TensorRT C++ projects with YOLOv9 on GitHub ready to use. The only difference is that during engine construction, you specify support for INT8.
https://github.com/spacewalk01/tensorrt-yolov9

Thank you very much.

@levipereira , I have deployed yolov9-qat model using C++ tensort, But I find the inference time is same comparing with fp16.
The modification I made on the fp16 code was simply to add a this:
config->setFlag(nvinfer1::BuilderFlag::kINT8);

i.e. I set both fp16 and int8:
config->setFlag(nvinfer1::BuilderFlag::kINT8);
config->setFlag(nvinfer1::BuilderFlag::kFP16);


HCX-69 Fix saving JSON when update HOMS order

Please add pull request number and URL into CHANGELOG.md line.


Fix build issues with DS gradle plugin (devsoap/gradle-vaadin-flow#286)

This PR fixes the current build issues with the project.
Since NPM/Polymer 3 support is a DS PRO feature, you will need to get a DS PRO license to run the project.
You can add your credentials either at runtime with a system property like so:
./gradlew \
      -Ddevsoap.gradle-flow-plugin.license.email=<YOUR LICENSE EMAIL ADDRESS> \
      -Ddevsoap.gradle-flow-plugin.license.key=<YOUR LICENSE KEY> \
      jettyRun

or you can add the following to build.gradle.kts:
devsoap {
    email = "<YOUR LICENSE EMAIL ADDRESS>"
    key = "<YOUR LICENSE KEY>"
}

Thank you, looks good! I'll keep the npm support in the separate branch for now, until the support for development mode has been added.


Implement node-to-node communication layer using sockets

Using sockets for node-to-node communication will decrease shared memory
consumption (messages will not go through the terracotta shared memory),
and increase performance (messages will not be clustered).

Original issue reported on code.google.com by<EMAIL_ADDRESS>on 14 Jan 2010 at 9:06

Original comment by<EMAIL_ADDRESS>on 14 Jan 2010 at 9:28

Changed state: Started

Implemented new communication layer based on Netty.

Original comment by<EMAIL_ADDRESS>on 15 Jan 2010 at 6:04

Changed state: Fixed

Issue 22 has been merged into this issue.

Original comment by<EMAIL_ADDRESS>on 14 Jan 2010 at 9:07


[Bug] donwload custom_services with wrong resource

when downloading custom services with the download option of the provider the resource for custom services is "dynatrace_dashboard" but should be "dynatrace_custom_service".
found in version 1.4 and 1.5
Best
Joerg

Thanks for reporting. This bug must have existed from the very beginning without anynone having noticed it.
It'll be fixed with the next release.

Hello @jonormann, this bug has been fixed with v1.6.0.


syft: 0.50.0 -> 0.51.0, grype: 0.41.0 -> 0.42.0

Description of changes
https://github.com/anchore/grype/releases/tag/v0.42.0

Things done

Built on platform(s)

[x] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

[ ] For non-Linux: Is sandbox = true set in nix.conf? (See Nix manual)
[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[x] Tested basic functionality of all binary files (usually in ./result/bin/)
22.11 Release Notes (or backporting 22.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module
[ ] (Release notes changes) Ran nixos/doc/manual/md-to-db.sh to update generated release notes

[x] Fits CONTRIBUTING.md.

Result of nixpkgs-review pr 181400 run on x86_64-linux 1

2 packages built:

grype
syft


Can we sort the board docs alphabetically?

Is it possible to have:
https://docs.zephyrproject.org/latest/boards/arm/index.html
Sorted alphabetically?

Actually, they are currently sorted... by filename but showing the doc title in the list.  So the unexpected order of titles such as:

Arduino/Genuino Zero
SAM D20 Xplained Pro Evaluation Kit
SAM D21 Xplained Pro Evaluation Kit
BBC MicroBit

is because the "SAM" document files are called atsamd20_xpro and atsamd21_xpro which nicely sort into the list at the end of the A's.
To fix this, we need to rename the board doc filenames consistent with the name of the board (and be consistent with the doc titles to always start with, for example, the manufacturer name.  For example, the title "ARM V2M Beetle" in file v2m_beetle.rst should be "V2M Beetle" (without "ARM" at the beginning).
So, this seems to be mostly a file renaming effort to get the file name constent with the doc title, plus tweaking a few doc titles to start with the manufacturer name (and not just the board name or the architecture).


Configuration settings - save to file

Save configuration to file for reuse. Either:

with file chooser, or
automatically (date & time, common directory).

closing as this was added in https://github.com/lowe-lab-ucl/napari-btrack/pull/26


Procedure to extract Token does not work

I have tried to follow the procedure using an unrooted Android phone and a windows PC.
The MiToolkit.exe could create a Backup and from this it extracted the name and the IP of the vaccum cleaner. Unfortunately the string which should contain the token was empty.
I have been using the latest Xiaomi App.
Please update the documentation or state that the procedure is invalid and thereby the adapter is not usable anymore.

Direkt link zu App:
https://cloud.mail.ru/public/BSos/7YJhcLB2W/MiHome_5.4.13_vevs.apk
вс, 23 сент. 2018 г. в 14:24, BuZZy1337<EMAIL_ADDRESS>
You can use the app available at
http://www.kapiba.ru/2017/11/mi-home.html?m=1
..
Log in normally to your xiaomi account and open the vacuum cleaner.. Then
the token is displayed at the vacuum general network settings.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/ioBroker/ioBroker.mihome-vacuum/issues/56#issuecomment-423812715,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AEXqgDfQqWNMWj78bRBftFsedppeBv3wks5ud313gaJpZM4W1qcy
.

Es ist nicht ganz klar, was du mit "spare phone" meinst. Du hast doch android?

Ich meine ein Telefon, auf dem Sicherheit egal ist und das ich gegebenenfalls platt machen kann.


更改车辆模型  Change Vehicle Model

Thank you for your project. I would like to replace the robot model with my own four-wheel differential model, but I have found that when my robot collides after the replacement, the environment will not reset. I would like to ask the following question: 1. Is the collision detected in your code using radar point cloud data? I found that after replacing the model, I cannot find the topic of point cloud data in rviz, Could it be because of this that collisions cannot be detected. 2. Could it be some other problem that caused this result? 3.//velodyne_points Where did the points topic come from? After I changed the vehicle model, rostopic list was able to find this topic, but I cannot find it in rviz, and I am not using the radar xacro file from your project. Why is this?If possible, could you give me some suggestions.What work does it take to modify the vehicle model based on your project
The picture shows the situation of my robot after collision

Sorry, the previous screenshot was uploaded incorrectly. This is my screenshot. After the collision, the rviz small and medium-sized car continued to move, and the radar data also shifted

Hi,
What kind of changes did you make to the code itself? And what version of the repo are you using?
If you changed the model and implementation, I would not be able to tell you where the sensor information comes from.
Yes, by default we use the velodyne lidar to detect collisions. If you have not connected this lidar to your robot, it will not be able to detect collisions.
https://github.com/reiniscimurs/DRL-robot-navigation/blob/main/TD3/velodyne_env.py#L182
What you can do is use your laser data as input to the collision detection function and update collision distance.

Thank you for your reply. I am using ros Noetic and tried to replace the radar with the original one, but there was still a collision without resetting the environment.I am still unable to choose the /velodyne_points topic in rviz, This may be due to my lack of understanding of the code. Here are the modifications I have made. If possible, could you please help me take a look at the problem.
import math
import os
import random
import subprocess
import time
from os import path
import numpy as np
import rospy
import sensor_msgs.point_cloud2 as pc2
from gazebo_msgs.msg import ModelState
from geometry_msgs.msg import Twist
from nav_msgs.msg import Odometry
from sensor_msgs.msg import PointCloud2
from squaternion import Quaternion
from std_srvs.srv import Empty
from visualization_msgs.msg import Marker
from visualization_msgs.msg import MarkerArray
GOAL_REACHED_DIST = 0.4
GOAL_REACHED_DIST = 0.3
COLLISION_DIST = 0.5
COLLISION_DIST = 0.35
TIME_DELTA = 0.1
Check if the random goal position is located on an obstacle and do not accept it if it is
def check_pos(x, y):
goal_ok = True
if -3.8 > x > -6.2 and 6.2 > y > 3.8:
    goal_ok = False

if -1.3 > x > -2.7 and 4.7 > y > -0.2:
    goal_ok = False

if -0.3 > x > -4.2 and 2.7 > y > 1.3:
    goal_ok = False

if -0.8 > x > -4.2 and -2.3 > y > -4.2:
    goal_ok = False

if -1.3 > x > -3.7 and -0.8 > y > -2.7:
    goal_ok = False

if 4.2 > x > 0.8 and -1.8 > y > -3.2:
    goal_ok = False

if 4 > x > 2.5 and 0.7 > y > -3.2:
    goal_ok = False

if 6.2 > x > 3.8 and -3.3 > y > -4.2:
    goal_ok = False

if 4.2 > x > 1.3 and 3.7 > y > 1.5:
    goal_ok = False

if -3.0 > x > -7.2 and 0.5 > y > -1.5:
    goal_ok = False

if x > 4.5 or x < -4.5 or y > 4.5 or y < -4.5:
    goal_ok = False

return goal_ok

class GazeboEnv:
"""Superclass for all Gazebo environments."""
def __init__(self, launchfile, environment_dim):
    self.environment_dim = environment_dim
    self.odom_x = 0
    self.odom_y = 0

    self.goal_x = 1
    self.goal_y = 0.0

    self.upper = 5.0
    self.lower = -5.0
    self.velodyne_data = np.ones(self.environment_dim) * 10
    self.last_odom = None

    self.set_self_state = ModelState()
    # self.set_self_state.model_name = "r1"
    self.set_self_state.model_name = "autolabor_pro1"
    self.set_self_state.pose.position.x = 0.0
    self.set_self_state.pose.position.y = 0.0
    self.set_self_state.pose.position.z = 0.0
    self.set_self_state.pose.orientation.x = 0.0
    self.set_self_state.pose.orientation.y = 0.0
    self.set_self_state.pose.orientation.z = 0.0
    self.set_self_state.pose.orientation.w = 1.0

    self.gaps = [[-np.pi / 2 - 0.03, -np.pi / 2 + np.pi / self.environment_dim]]
    for m in range(self.environment_dim - 1):
        self.gaps.append(
            [self.gaps[m][1], self.gaps[m][1] + np.pi / self.environment_dim]
        )
    self.gaps[-1][-1] += 0.03

    port = "11311"
    subprocess.Popen(["roscore", "-p", port])

    print("Roscore launched!")

    # Launch the simulation with the given launchfile name
    rospy.init_node("gym", anonymous=True)
    if launchfile.startswith("/"):
        fullpath = launchfile
    else:
        fullpath = os.path.join(os.path.dirname(__file__), "assets", launchfile)
    if not path.exists(fullpath):
        raise IOError("File " + fullpath + " does not exist")

    subprocess.Popen(["roslaunch", "-p", port, fullpath])
    print("Gazebo launched!")

    # Set up the ROS publishers and subscribers
    self.vel_pub = rospy.Publisher("/cmd_vel", Twist, queue_size=1)
    # self.vel_pub = rospy.Publisher("/r1/cmd_vel", Twist, queue_size=1)
    self.set_state = rospy.Publisher(
        "gazebo/set_model_state", ModelState, queue_size=10
    )
    self.unpause = rospy.ServiceProxy("/gazebo/unpause_physics", Empty)
    self.pause = rospy.ServiceProxy("/gazebo/pause_physics", Empty)
    self.reset_proxy = rospy.ServiceProxy("/gazebo/reset_world", Empty)
    self.publisher = rospy.Publisher("goal_point", MarkerArray, queue_size=3)
    self.publisher2 = rospy.Publisher("linear_velocity", MarkerArray, queue_size=1)
    self.publisher3 = rospy.Publisher("angular_velocity", MarkerArray, queue_size=1)
    self.velodyne = rospy.Subscriber(
        "/velodyne_points", PointCloud2, self.velodyne_callback, queue_size=1
    )
    self.odom = rospy.Subscriber(
        # "/r1/odom", Odometry, self.odom_callback, queue_size=1
        "/odom", Odometry, self.odom_callback, queue_size=1
    )

# Read velodyne pointcloud and turn it into distance data, then select the minimum value for each angle
# range as state representation
def velodyne_callback(self, v):
    data = list(pc2.read_points(v, skip_nans=False, field_names=("x", "y", "z")))
    self.velodyne_data = np.ones(self.environment_dim) * 10
    for i in range(len(data)):
        if data[i][2] > -0.2:
            dot = data[i][0] * 1 + data[i][1] * 0
            mag1 = math.sqrt(math.pow(data[i][0], 2) + math.pow(data[i][1], 2))
            mag2 = math.sqrt(math.pow(1, 2) + math.pow(0, 2))
            beta = math.acos(dot / (mag1 * mag2)) * np.sign(data[i][1])
            dist = math.sqrt(data[i][0] ** 2 + data[i][1] ** 2 + data[i][2] ** 2)

            for j in range(len(self.gaps)):
                if self.gaps[j][0] <= beta < self.gaps[j][1]:
                    self.velodyne_data[j] = min(self.velodyne_data[j], dist)
                    break

def odom_callback(self, od_data):
    self.last_odom = od_data

# Perform an action and read a new state
def step(self, action):
    target = False

    # Publish the robot action
    vel_cmd = Twist()
    vel_cmd.linear.x = action[0]
    vel_cmd.angular.z = action[1]
    self.vel_pub.publish(vel_cmd)
    self.publish_markers(action)

    rospy.wait_for_service("/gazebo/unpause_physics")
    try:
        self.unpause()
    except (rospy.ServiceException) as e:
        print("/gazebo/unpause_physics service call failed")

    # propagate state for TIME_DELTA seconds
    time.sleep(TIME_DELTA)

    rospy.wait_for_service("/gazebo/pause_physics")
    try:
        pass
        self.pause()
    except (rospy.ServiceException) as e:
        print("/gazebo/pause_physics service call failed")

    # read velodyne laser state
    done, collision, min_laser = self.observe_collision(self.velodyne_data)
    v_state = []
    v_state[:] = self.velodyne_data[:]
    laser_state = [v_state]

    # Calculate robot heading from odometry data
    self.odom_x = self.last_odom.pose.pose.position.x
    self.odom_y = self.last_odom.pose.pose.position.y
    quaternion = Quaternion(
        self.last_odom.pose.pose.orientation.w,
        self.last_odom.pose.pose.orientation.x,
        self.last_odom.pose.pose.orientation.y,
        self.last_odom.pose.pose.orientation.z,
    )
    euler = quaternion.to_euler(degrees=False)
    angle = round(euler[2], 4)

    # Calculate distance to the goal from the robot
    distance = np.linalg.norm(
        [self.odom_x - self.goal_x, self.odom_y - self.goal_y]
    )

    # Calculate the relative angle between the robots heading and heading toward the goal
    skew_x = self.goal_x - self.odom_x
    skew_y = self.goal_y - self.odom_y
    dot = skew_x * 1 + skew_y * 0
    mag1 = math.sqrt(math.pow(skew_x, 2) + math.pow(skew_y, 2))
    mag2 = math.sqrt(math.pow(1, 2) + math.pow(0, 2))
    beta = math.acos(dot / (mag1 * mag2))
    if skew_y < 0:
        if skew_x < 0:
            beta = -beta
        else:
            beta = 0 - beta
    theta = beta - angle
    if theta > np.pi:
        theta = np.pi - theta
        theta = -np.pi - theta
    if theta < -np.pi:
        theta = -np.pi - theta
        theta = np.pi - theta

    # Detect if the goal has been reached and give a large positive reward
    if distance < GOAL_REACHED_DIST:
        target = True
        done = True

    robot_state = [distance, theta, action[0], action[1]]
    state = np.append(laser_state, robot_state)
    reward = self.get_reward(target, collision, action, min_laser)
    return state, reward, done, target

def reset(self):

    # Resets the state of the environment and returns an initial observation.
    rospy.wait_for_service("/gazebo/reset_world")
    try:
        self.reset_proxy()

    except rospy.ServiceException as e:
        print("/gazebo/reset_simulation service call failed")

    angle = np.random.uniform(-np.pi, np.pi)
    quaternion = Quaternion.from_euler(0.0, 0.0, angle)
    object_state = self.set_self_state

    x = 0
    y = 0
    position_ok = False
    while not position_ok:
        x = np.random.uniform(-4.5, 4.5)
        y = np.random.uniform(-4.5, 4.5)
        position_ok = check_pos(x, y)
    object_state.pose.position.x = x
    object_state.pose.position.y = y
    # object_state.pose.position.z = 0.
    object_state.pose.orientation.x = quaternion.x
    object_state.pose.orientation.y = quaternion.y
    object_state.pose.orientation.z = quaternion.z
    object_state.pose.orientation.w = quaternion.w
    self.set_state.publish(object_state)

    self.odom_x = object_state.pose.position.x
    self.odom_y = object_state.pose.position.y

    # set a random goal in empty space in environment
    self.change_goal()
    # randomly scatter boxes in the environment
    self.random_box()
    self.publish_markers([0.0, 0.0])

    rospy.wait_for_service("/gazebo/unpause_physics")
    try:
        self.unpause()
    except (rospy.ServiceException) as e:
        print("/gazebo/unpause_physics service call failed")

    time.sleep(TIME_DELTA)

    rospy.wait_for_service("/gazebo/pause_physics")
    try:
        self.pause()
    except (rospy.ServiceException) as e:
        print("/gazebo/pause_physics service call failed")
    v_state = []
    v_state[:] = self.velodyne_data[:]
    laser_state = [v_state]

    distance = np.linalg.norm(
        [self.odom_x - self.goal_x, self.odom_y - self.goal_y]
    )

    skew_x = self.goal_x - self.odom_x
    skew_y = self.goal_y - self.odom_y

    dot = skew_x * 1 + skew_y * 0
    mag1 = math.sqrt(math.pow(skew_x, 2) + math.pow(skew_y, 2))
    mag2 = math.sqrt(math.pow(1, 2) + math.pow(0, 2))
    beta = math.acos(dot / (mag1 * mag2))

    if skew_y < 0:
        if skew_x < 0:
            beta = -beta
        else:
            beta = 0 - beta
    theta = beta - angle

    if theta > np.pi:
        theta = np.pi - theta
        theta = -np.pi - theta
    if theta < -np.pi:
        theta = -np.pi - theta
        theta = np.pi - theta

    robot_state = [distance, theta, 0.0, 0.0]
    state = np.append(laser_state, robot_state)
    return state

def change_goal(self):
    # Place a new goal and check if its location is not on one of the obstacles
    if self.upper < 10:
        self.upper += 0.004
    if self.lower > -10:
        self.lower -= 0.004

    goal_ok = False

    while not goal_ok:
        self.goal_x = self.odom_x + random.uniform(self.upper, self.lower)
        self.goal_y = self.odom_y + random.uniform(self.upper, self.lower)
        goal_ok = check_pos(self.goal_x, self.goal_y)

def random_box(self):
    # Randomly change the location of the boxes in the environment on each reset to randomize the training
    # environment
    for i in range(4):
        name = "cardboard_box_" + str(i)

        x = 0
        y = 0
        box_ok = False
        while not box_ok:
            x = np.random.uniform(-6, 6)
            y = np.random.uniform(-6, 6)
            box_ok = check_pos(x, y)
            distance_to_robot = np.linalg.norm([x - self.odom_x, y - self.odom_y])
            distance_to_goal = np.linalg.norm([x - self.goal_x, y - self.goal_y])
            if distance_to_robot < 1.5 or distance_to_goal < 1.5:
                box_ok = False
        box_state = ModelState()
        box_state.model_name = name
        box_state.pose.position.x = x
        box_state.pose.position.y = y
        box_state.pose.position.z = 0.0
        box_state.pose.orientation.x = 0.0
        box_state.pose.orientation.y = 0.0
        box_state.pose.orientation.z = 0.0
        box_state.pose.orientation.w = 1.0
        self.set_state.publish(box_state)

def publish_markers(self, action):
    # Publish visual data in Rviz
    markerArray = MarkerArray()
    marker = Marker()
    marker.header.frame_id = "odom"
    marker.type = marker.CYLINDER
    marker.action = marker.ADD
    marker.scale.x = 0.1
    marker.scale.y = 0.1
    marker.scale.z = 0.01
    marker.color.a = 1.0
    marker.color.r = 0.0
    marker.color.g = 1.0
    marker.color.b = 0.0
    marker.pose.orientation.w = 1.0
    marker.pose.position.x = self.goal_x
    marker.pose.position.y = self.goal_y
    marker.pose.position.z = 0

    markerArray.markers.append(marker)

    self.publisher.publish(markerArray)

    markerArray2 = MarkerArray()
    marker2 = Marker()
    marker2.header.frame_id = "odom"
    marker2.type = marker.CUBE
    marker2.action = marker.ADD
    marker2.scale.x = abs(action[0])
    marker2.scale.y = 0.1
    marker2.scale.z = 0.01
    marker2.color.a = 1.0
    marker2.color.r = 1.0
    marker2.color.g = 0.0
    marker2.color.b = 0.0
    marker2.pose.orientation.w = 1.0
    marker2.pose.position.x = 5
    marker2.pose.position.y = 0
    marker2.pose.position.z = 0

    markerArray2.markers.append(marker2)
    self.publisher2.publish(markerArray2)

    markerArray3 = MarkerArray()
    marker3 = Marker()
    marker3.header.frame_id = "odom"
    marker3.type = marker.CUBE
    marker3.action = marker.ADD
    marker3.scale.x = abs(action[1])
    marker3.scale.y = 0.1
    marker3.scale.z = 0.01
    marker3.color.a = 1.0
    marker3.color.r = 1.0
    marker3.color.g = 0.0
    marker3.color.b = 0.0
    marker3.pose.orientation.w = 1.0
    marker3.pose.position.x = 5
    marker3.pose.position.y = 0.2
    marker3.pose.position.z = 0

    markerArray3.markers.append(marker3)
    self.publisher3.publish(markerArray3)

@staticmethod
def observe_collision(laser_data):
    # Detect a collision from laser data
    min_laser = min(laser_data)
    if min_laser < COLLISION_DIST:
        return True, True, min_laser
    return False, False, min_laser

@staticmethod
def get_reward(target, collision, action, min_laser):
    if target:
        return 100.0
    elif collision:
        return -100.0
    else:
        r3 = lambda x: 1 - x if x < 1 else 0.0
        return action[0] / 2 - abs(action[1]) / 2 - r3(min_laser) / 2

In this code file, I only modified the vehicle name and cmd_ The topics of vel and odom have not been modified

  <include file="$(find gazebo_ros)/launch/empty_world.launch" >
   <arg name="world_name" value="$(find multi_robot_scenario)/launch/TD3.world" />
   <!-- <arg name="world_name" value="$(find multi_robot_scenario)/launch/boxworld1.world" />  -->
 </include>

This is the launch file where I started the robot model

  <include file="$(find gazebo_ros)/launch/empty_world.launch" >
   <arg name="world_name" value="$(find multi_robot_scenario)/launch/TD3.world" />
   <!-- <arg name="world_name" value="$(find multi_robot_scenario)/launch/boxworld1.world" />  -->
 </include>

This is the launch file where I started the robot model

This is the launch file where I started the robot model

           #####

This is my robot launch file

<!-- 运行gazebo仿真环境 -->
<!-- <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(arg world_name)" />
    <arg name="debug" value="$(arg debug)" />
    <arg name="gui" value="$(arg gui)" />
    <arg name="paused" value="$(arg paused)"/>
    <arg name="use_sim_time" value="$(arg use_sim_time)"/>
    <arg name="headless" value="$(arg headless)"/>
</include> -->

<!-- 加载机器人模型描述参数 -->
<param name="robot_description" command="$(find xacro)/xacro --inorder '$(find autolabor_description)/urdf/xacro/gazebo/autolabor_pro1_rplidar_gazebo.xacro'" />

<!-- Publish the robot state -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher">
  <param name="publish_frequency" value="20.0"/>
</node>

<!-- Provide simulated control of the robot joint angles -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher">
  <param name="use_gui" value="True" />
  <param name="rate" value="20.0"/>
</node>
<!-- 在gazebo中加载机器人模型-->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
      args="-urdf -model autolabor_pro1 -param robot_description -x -0.1 -y -0.1 -z  0.1"/>

This is my robot xacro file, where I replaced the radar with the radar in your project, but the above problem still occurs

<xacro:include filename="$(find autolabor_description)/urdf/autolabor_pro1.xacro" />
<!-- <xacro:include filename="$(find autolabor_description)/urdf/sensors/lidar_gazebo.xacro" /> -->
  <xacro:include filename="$(find multi_robot_scenario)/xacro/laser/hokuyo.xacro"/>

<xacro:laser name="front_laser" parent="base_link" xyz="0 0 0.31" rpy="0 0 0" meshes="package://gazebo_plugins/test/multi_robot_scenario/meshes/laser"/>
<xacro:include filename="$(find autolabor_description)/urdf/sensors/camera_gazebo.xacro" />
<xacro:property name="camera_offset_x" value="0.09" />
<xacro:property name="camera_offset_y" value="0" />
<xacro:property name="camera_offset_z" value="0.31" />
<!-- <xacro:property name="lidar_offset_x" value="0" />
<xacro:property name="lidar_offset_y" value="0" />
<xacro:property name="lidar_offset_z" value="0.31" /> -->

<!-- lidar -->
<!-- <joint name="lidar_joint" type="fixed">
    <origin xyz="${lidar_offset_x} ${lidar_offset_y} ${lidar_offset_z}" rpy="0 0 0" />
    <parent link="base_link"/>
    <child link="laser_link"/>
</joint> -->

<!-- <xacro:rplidar prefix="laser"/> -->

<joint name="camera_joint" type="fixed">
    <origin xyz="${camera_offset_x} ${camera_offset_y} ${camera_offset_z}" rpy="0 0 0" />
    <parent link="base_link"/>
    <child link="camera_link"/>
</joint>

<xacro:usb_camera prefix="camera"/>

<autolabor_pro1/>

I don't know why a few lines of code were lost during upload, but the main code is there. If possible, could you help me check where the problem occurred

Your collision detection is still based on velodyne lidar input:
# read velodyne laser state     done, collision, min_laser = self.observe_collision(self.velodyne_data)
You have not attatched velodyne to your robot so collisions will not be detected. If you want to just use the hokuyo laser, then you will have to read the laser state from this hokuyo lidar instead.
On P3DX robot the velodyne laser is added here:
https://github.com/reiniscimurs/DRL-robot-navigation/blob/main/catkin_ws/src/multi_robot_scenario/xacro/p3dx/pioneer3dx.xacro#L26-L29

Thank you for your reply. I have resolved the issue of changing the vehicle model radar topic, but there are currently some other issues. Could you please give me some suggestions again

My radar data seems to shift while the car is moving. When I change the Fixed Frame to World, it seems that the radar does not shift, but the target point will move with the car, which I believe is abnormal. Here is my tf_ Tree and rqt_ Graph.The first two images show the selection of Odom and World for Fixed Frame

2.Due to my larger vehicle model, I attempted to change the COLLISION_ The value of DIST has been increased, but there has been a constant reset. I found in your other replies that it seems to be a def check_ The issue with pos (x, y), but I don't know the basis for setting the parameters in this function, so I don't know how to change it< Box size="0.7248 0.4302 0.195"/>These are the parameters of my chassis. Could you please give me some suggestions.

This would most likely be something dependent on your implementation and setup between the robot and the world. If setting fixed frame to world works for you, you can try publishing the goal points and markers in that frame as well. By default they are published in odom frame : https://github.com/reiniscimurs/DRL-robot-navigation/blob/main/TD3/velodyne_env.py#L366

You collision is quite obviously detected from your own robot. Meaning that the laser detects your own robot base, and since the laser values are so close, reset is triggered. The function check_pos will not have any influence on this and is used only for placing a random goal position. It has nothing to do with triggering reset. I do not see the robot model clearly, but it seems that you have also placed velodyne lidar sensor on top of your 2D lidar. This could also cause collisions to be detected. In any case, the issue is caused due to suboptimal placement of your lidar sensors.

I would suggest going through the code and really understanding what each function does in detail. It will be really difficult making changes without understanding what parts of the code take care of what. There is a code guide provided and it should help you understand the meaning of functions and their use.

hi  I am using a branch of Melodic
With your suggestion, I set the fixed frame to world and made changes in the code, as well as changing the position of the 3D LiDAR. Now the collision can reset the environment normally. Due to my larger robot model, I changed the min in the code_ Range set to 0.6, Dist<0.6. Now my radar data and target point do not follow the deviation of the car, but I have found that the TF of the odom will shift. I cannot understand the reason for this. Now, my car passes through the target point but does not reset the environment. I suspect it is due to the deviation of the odom. My tf_ The tree is the same as above. If possible, could you please give me some suggestions? Thank you again!

Here is my modified velodyne_ Env.py code，
import rospy
import subprocess
from os import path
from visualization_msgs.msg import Marker
from visualization_msgs.msg import MarkerArray
from numpy import inf
import numpy as np
import random
import math
from gazebo_msgs.msg import ModelState
from squaternion import Quaternion
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan, PointCloud2
import sensor_msgs.point_cloud2 as pc2
from nav_msgs.msg import Odometry
from std_srvs.srv import Empty
import os
import time
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
Check if the random goal position is located on an obstacle and do not accept it if it is
def check_pos(x, y):
goalOK = True
if -3.8 > x > -6.2 and 6.2 > y > 3.8:
    goalOK = False

if -1.3 > x > -2.7 and 4.7 > y > -0.2:
    goalOK = False

if -0.3 > x > -4.2 and 2.7 > y > 1.3:
    goalOK = False

if -0.8 > x > -4.2 and -2.3 > y > -4.2:
    goalOK = False

if -1.3 > x > -3.7 and -0.8 > y > -2.7:
    goalOK = False

if 4.2 > x > 0.8 and -1.8 > y > -3.2:
    goalOK = False

if 4 > x > 2.5 and 0.7 > y > -3.2:
    goalOK = False

if 6.2 > x > 3.8 and -3.3 > y > -4.2:
    goalOK = False

if 4.2 > x > 1.3 and 3.7 > y > 1.5:
    goalOK = False

if -3.0 > x > -7.2 and 0.5 > y > -1.5:
    goalOK = False

if x > 4.5 or x < -4.5 or y > 4.5 or y < -4.5:
    goalOK = False
return goalOK

Function to put the laser data in bins
def binning(lower_bound, data, quantity):
width = round(len(data) / quantity)
quantity -= 1
bins = []
for low in range(lower_bound, lower_bound + quantity * width + 1, width):
bins.append(min(data[low:low + width]))
return np.array([bins])
class GazeboEnv:
"""Superclass for all Gazebo environments.
"""
metadata = {'render.modes': ['human']}
def __init__(self, launchfile, height, width, nchannels):

    self.odomX = 0
    self.odomY = 0

    self.goalX = 1
    self.goalY = 0.0

    self.upper = 5.0
    self.lower = -5.0
    self.velodyne_data = np.ones(20) * 10

    self.set_self_state = ModelState()
    self.set_self_state.model_name = 'autolabor_pro1'
    # self.set_self_state.model_name = 'r1'
    self.set_self_state.pose.position.x = 0.
    self.set_self_state.pose.position.y = 0.
    self.set_self_state.pose.position.z = 0.
    self.set_self_state.pose.orientation.x = 0.0
    self.set_self_state.pose.orientation.y = 0.0
    self.set_self_state.pose.orientation.z = 0.0
    self.set_self_state.pose.orientation.w = 1.0
    self.distOld = math.sqrt(math.pow(self.odomX - self.goalX, 2) + math.pow(self.odomY - self.goalY, 2))
    self.gaps = [[-1.6, -1.57 + 3.14 / 20]]
    for m in range(19):
        self.gaps.append([self.gaps[m][1], self.gaps[m][1] + 3.14 / 20])
    self.gaps[-1][-1] += 0.03

    port = '11311'
    subprocess.Popen(["roscore", "-p", port])

    print("Roscore launched!")

    # Launch the simulation with the given launchfile name
    rospy.init_node('gym', anonymous=True)
    if launchfile.startswith("/"):
        fullpath = launchfile
    else:
        fullpath = os.path.join(os.path.dirname(__file__), "assets", launchfile)
    if not path.exists(fullpath):
        raise IOError("File " + fullpath + " does not exist")

    subprocess.Popen(["roslaunch", "-p", port, fullpath])
    print("Gazebo launched!")

    self.gzclient_pid = 0

    # Set up the ROS publishers and subscribers
    self.vel_pub = rospy.Publisher('/cmd_vel', Twist, queue_size=1)
    # self.vel_pub = rospy.Publisher('/r1/cmd_vel', Twist, queue_size=1)
    self.set_state = rospy.Publisher('gazebo/set_model_state', ModelState, queue_size=10)
    self.unpause = rospy.ServiceProxy('/gazebo/unpause_physics', Empty)
    self.pause = rospy.ServiceProxy('/gazebo/pause_physics', Empty)
    self.reset_proxy = rospy.ServiceProxy('/gazebo/reset_world', Empty)
    topic = 'vis_mark_array'
    self.publisher = rospy.Publisher(topic, MarkerArray, queue_size=3)
    topic2 = 'vis_mark_array2'
    self.publisher2 = rospy.Publisher(topic2, MarkerArray, queue_size=1)
    topic3 = 'vis_mark_array3'
    self.publisher3 = rospy.Publisher(topic3, MarkerArray, queue_size=1)
    topic4 = 'vis_mark_array4'
    self.publisher4 = rospy.Publisher(topic4, MarkerArray, queue_size=1)
    self.velodyne = rospy.Subscriber('/velodyne_points', PointCloud2, self.velodyne_callback, queue_size=1)

# Read velodyne pointcloud and turn it into distance data, then select the minimum value for each angle
# range as state representation
def velodyne_callback(self, v):
    data = list(pc2.read_points(v, skip_nans=False, field_names=("x", "y", "z")))
    self.velodyne_data = np.ones(20) * 10
    for i in range(len(data)):
        if data[i][2] > -0.2:
            dot = data[i][0] * 1 + data[i][1] * 0
            mag1 = math.sqrt(math.pow(data[i][0], 2) + math.pow(data[i][1], 2))
            mag2 = math.sqrt(math.pow(1, 2) + math.pow(0, 2))
            beta = math.acos(dot / (mag1 * mag2)) * np.sign(data[i][1])  # * -1
            dist = math.sqrt(data[i][0] ** 2 + data[i][1] ** 2 + data[i][2] ** 2)

            for j in range(len(self.gaps)):
                if self.gaps[j][0] <= beta < self.gaps[j][1]:
                    self.velodyne_data[j] = min(self.velodyne_data[j], dist)
                    break

# Detect a collision from laser data
def calculate_observation(self, data):
    min_range = 0.6
    min_laser = 2
    done = False
    col = False

    for i, item in enumerate(data.ranges):
        if min_laser > data.ranges[i]:
            min_laser = data.ranges[i]
        if (min_range > data.ranges[i] > 0):
            done = True
            col = True
    return done, col, min_laser

# Perform an action and read a new state
def step(self, act):
    target = False

    # Publish the robot action
    vel_cmd = Twist()
    vel_cmd.linear.x = act[0]
    vel_cmd.angular.z = act[1]
    self.vel_pub.publish(vel_cmd)

    rospy.wait_for_service('/gazebo/unpause_physics')
    try:
        self.unpause()
    except (rospy.ServiceException) as e:
        print("/gazebo/unpause_physics service call failed")

    data = None
    while data is None:
        try:
            # data = rospy.wait_for_message('/r1/front_laser/scan', LaserScan, timeout=0.5)
            data = rospy.wait_for_message('/scan', LaserScan, timeout=0.5)
        except:
            pass

    laser_state = np.array(data.ranges[:])
    v_state = []
    v_state[:] = self.velodyne_data[:]
    laser_state = [v_state]

    done, col, min_laser = self.calculate_observation(data)

    dataOdom = None
    while dataOdom is None:
        try:
            # dataOdom = rospy.wait_for_message('/r1/odom', Odometry, timeout=0.5)
            dataOdom = rospy.wait_for_message('/odom', Odometry, timeout=0.5)
        except:
            pass
    time.sleep(0.1)
    rospy.wait_for_service('/gazebo/pause_physics')
    try:
        pass
        self.pause()
    except (rospy.ServiceException) as e:
        print("/gazebo/pause_physics service call failed")

    # Calculate robot heading from odometry data
    self.odomX = dataOdom.pose.pose.position.x
    self.odomY = dataOdom.pose.pose.position.y
    quaternion = Quaternion(
        dataOdom.pose.pose.orientation.w,
        dataOdom.pose.pose.orientation.x,
        dataOdom.pose.pose.orientation.y,
        dataOdom.pose.pose.orientation.z)
    euler = quaternion.to_euler(degrees=False)
    angle = round(euler[2], 4)

    # Calculate distance to the goal from the robot
    Dist = math.sqrt(math.pow(self.odomX - self.goalX, 2) + math.pow(self.odomY - self.goalY, 2))

    # Calculate the angle distance between the robots heading and heading toward the goal
    skewX = self.goalX - self.odomX
    skewY = self.goalY - self.odomY
    dot = skewX * 1 + skewY * 0
    mag1 = math.sqrt(math.pow(skewX, 2) + math.pow(skewY, 2))
    mag2 = math.sqrt(math.pow(1, 2) + math.pow(0, 2))
    beta = math.acos(dot / (mag1 * mag2))
    if skewY < 0:
        if skewX < 0:
            beta = -beta
        else:
            beta = 0 - beta
    beta2 = (beta - angle)
    if beta2 > np.pi:
        beta2 = np.pi - beta2
        beta2 = -np.pi - beta2
    if beta2 < -np.pi:
        beta2 = -np.pi - beta2
        beta2 = np.pi - beta2

    # Publish the robot action
    vel_cmd = Twist()
    vel_cmd.linear.x = act[0]
    vel_cmd.angular.z = act[1]
    self.vel_pub.publish(vel_cmd)

    # Publish visual data in Rviz
    markerArray = MarkerArray()
    marker = Marker()
    marker.header.frame_id = "world"
    marker.type = marker.CYLINDER
    marker.action = marker.ADD
    marker.scale.x = 0.1
    marker.scale.y = 0.1
    marker.scale.z = 0.01
    marker.color.a = 1.0
    marker.color.r = 0.0
    marker.color.g = 1.0
    marker.color.b = 0.0
    marker.pose.orientation.w = 1.0
    marker.pose.position.x = self.goalX
    marker.pose.position.y = self.goalY
    marker.pose.position.z = 0

    markerArray.markers.append(marker)

    self.publisher.publish(markerArray)

    markerArray2 = MarkerArray()
    marker2 = Marker()
    marker2.header.frame_id = "world"
    marker2.type = marker.CUBE
    marker2.action = marker.ADD
    marker2.scale.x = abs(act[0])
    marker2.scale.y = 0.1
    marker2.scale.z = 0.01
    marker2.color.a = 1.0
    marker2.color.r = 1.0
    marker2.color.g = 0.0
    marker2.color.b = 0.0
    marker2.pose.orientation.w = 1.0
    marker2.pose.position.x = 5
    marker2.pose.position.y = 0
    marker2.pose.position.z = 0

    markerArray2.markers.append(marker2)
    self.publisher2.publish(markerArray2)

    markerArray3 = MarkerArray()
    marker3 = Marker()
    marker3.header.frame_id = "world"
    marker3.type = marker.CUBE
    marker3.action = marker.ADD
    marker3.scale.x = abs(act[1])
    marker3.scale.y = 0.1
    marker3.scale.z = 0.01
    marker3.color.a = 1.0
    marker3.color.r = 1.0
    marker3.color.g = 0.0
    marker3.color.b = 0.0
    marker3.pose.orientation.w = 1.0
    marker3.pose.position.x = 5
    marker3.pose.position.y = 0.2
    marker3.pose.position.z = 0

    markerArray3.markers.append(marker3)
    self.publisher3.publish(markerArray3)

    markerArray4 = MarkerArray()
    marker4 = Marker()
    marker4.header.frame_id = "world"
    marker4.type = marker.CUBE
    marker4.action = marker.ADD
    marker4.scale.x = 0.1  # abs(act2)
    marker4.scale.y = 0.1
    marker4.scale.z = 0.01
    marker4.color.a = 1.0
    marker4.color.r = 1.0
    marker4.color.g = 0.0
    marker4.color.b = 0.0
    marker4.pose.orientation.w = 1.0
    marker4.pose.position.x = 5
    marker4.pose.position.y = 0.4
    marker4.pose.position.z = 0

    markerArray4.markers.append(marker4)
    self.publisher4.publish(markerArray4)

    '''Bunch of different ways to generate the reward'''

    # reward = act[0]*0.7-abs(act[1])
    # r1 = 1 - 2 * math.sqrt(abs(beta2 / np.pi))
    # r2 = self.distOld - Dist
    r3 = lambda x: 1 - x if x < 1 else 0.0
    # rl = 0
    # for r in range(len(laser_state[0])):
    #    rl += r3(laser_state[0][r])
    # reward = 0.8 * r1 + 30 * r2 + act[0]/2 - abs(act[1])/2 - r3(min(laser_state[0]))/2
    reward = act[0] / 2 - abs(act[1]) / 2 - r3(min(laser_state[0])) / 2
    # reward = 30 * r2 + act[0] / 2 - abs(act[1]) / 2  # - r3(min(laser_state[0]))/2
    # reward = 0.8 * r1 + 30 * r2

    self.distOld = Dist

    # Detect if the goal has been reached and give a large positive reward
    if Dist < 0.6:
        target = True
        done = True
        self.distOld = math.sqrt(math.pow(self.odomX - self.goalX, 2) + math.pow(self.odomY - self.goalY, 2))
        reward = 80

    # Detect if ta collision has happened and give a large negative reward
    if col:
        reward = -100

    toGoal = [Dist, beta2, act[0], act[1]]
    state = np.append(laser_state, toGoal)
    return state, reward, done, target

def reset(self):

    # Resets the state of the environment and returns an initial observation.
    rospy.wait_for_service('/gazebo/reset_world')
    try:
        self.reset_proxy()

    except rospy.ServiceException as e:
        print("/gazebo/reset_simulation service call failed")

    angle = np.random.uniform(-np.pi, np.pi)
    quaternion = Quaternion.from_euler(0., 0., angle)
    object_state = self.set_self_state

    x = 0
    y = 0
    chk = False
    while not chk:
        x = np.random.uniform(-4.5, 4.5)
        y = np.random.uniform(-4.5, 4.5)
        chk = check_pos(x, y)
    object_state.pose.position.x = x
    object_state.pose.position.y = y
    # object_state.pose.position.z = 0.
    object_state.pose.orientation.x = quaternion.x
    object_state.pose.orientation.y = quaternion.y
    object_state.pose.orientation.z = quaternion.z
    object_state.pose.orientation.w = quaternion.w
    self.set_state.publish(object_state)

    self.odomX = object_state.pose.position.x
    self.odomY = object_state.pose.position.y

    self.change_goal()
    self.random_box()
    self.distOld = math.sqrt(math.pow(self.odomX - self.goalX, 2) + math.pow(self.odomY - self.goalY, 2))

    data = None
    rospy.wait_for_service('/gazebo/unpause_physics')
    try:
        self.unpause()
    except (rospy.ServiceException) as e:
        print("/gazebo/unpause_physics service call failed")
    while data is None:
        try:
            # data = rospy.wait_for_message('/r1/front_laser/scan', LaserScan, timeout=0.5)
            data = rospy.wait_for_message('/scan', LaserScan, timeout=0.5)
        except:
            pass
    laser_state = np.array(data.ranges[:])
    laser_state[laser_state == inf] = 10
    laser_state = binning(0, laser_state, 20)

    rospy.wait_for_service('/gazebo/pause_physics')
    try:
        self.pause()
    except (rospy.ServiceException) as e:
        print("/gazebo/pause_physics service call failed")

    Dist = math.sqrt(math.pow(self.odomX - self.goalX, 2) + math.pow(self.odomY - self.goalY, 2))

    skewX = self.goalX - self.odomX
    skewY = self.goalY - self.odomY

    dot = skewX * 1 + skewY * 0
    mag1 = math.sqrt(math.pow(skewX, 2) + math.pow(skewY, 2))
    mag2 = math.sqrt(math.pow(1, 2) + math.pow(0, 2))
    beta = math.acos(dot / (mag1 * mag2))

    if skewY < 0:
        if skewX < 0:
            beta = -beta
        else:
            beta = 0 - beta
    beta2 = (beta - angle)

    if beta2 > np.pi:
        beta2 = np.pi - beta2
        beta2 = -np.pi - beta2
    if beta2 < -np.pi:
        beta2 = -np.pi - beta2
        beta2 = np.pi - beta2

    toGoal = [Dist, beta2, 0.0, 0.0]
    state = np.append(laser_state, toGoal)
    return state

# Place a new goal and check if its lov\cation is not on one of the obstacles
def change_goal(self):
    if self.upper < 10:
        self.upper += 0.004
    if self.lower > -10:
        self.lower -= 0.004

    gOK = False

    while not gOK:
        self.goalX = self.odomX + random.uniform(self.upper, self.lower)
        self.goalY = self.odomY + random.uniform(self.upper, self.lower)
        gOK = check_pos(self.goalX, self.goalY)

# Randomly change the location of the boxes in the environment on each reset to randomize the training environment
def random_box(self):
    for i in range(4):
        name = 'cardboard_box_' + str(i)

        x = 0
        y = 0
        chk = False
        while not chk:
            x = np.random.uniform(-6, 6)
            y = np.random.uniform(-6, 6)
            chk = check_pos(x, y)
            d1 = math.sqrt((x - self.odomX) ** 2 + (y - self.odomY) ** 2)
            d2 = math.sqrt((x - self.goalX) ** 2 + (y - self.goalY) ** 2)
            if d1 < 1.5 or d2 < 1.5:
                chk = False
        box_state = ModelState()
        box_state.model_name = name
        box_state.pose.position.x = x
        box_state.pose.position.y = y
        box_state.pose.position.z = 0.
        box_state.pose.orientation.x = 0.0
        box_state.pose.orientation.y = 0.0
        box_state.pose.orientation.z = 0.0
        box_state.pose.orientation.w = 1.0
        self.set_state.publish(box_state)

Hi,
Melodic version of this repo is deprecated and is not supported from my side anymore. As such it is only provided "as is" and any changes you make should be up to you. However, the code itself should not impact your frame drift. Changing the collision distance would not change it either.
Most likely, you need to check your robot implementation and how you are setting up the transforms between different frames. But this is something you should be doing on your side as it is an unfamiliar issue and implementation for me. I do not see any obvious issues here, so I cannot help you with advice here either. Hope you manage to solve the issue.

Thank you for your reply. The problem I am currently facing is that the collision reset environment can be achieved, but when the car reaches the target point, the environment will not be reset. Is this caused by the deviation of my odom or other factors? Can you give me some suggestions? Thank you!

Most likely the target point is actually not arrived at. Since you are displaying in a different frame than odom, it might appear in rviz that the goal is reached. But the reached goal trigger is the relevant distance between the goal and the robot in odom frame. You should print out the distance values to confirm that distance actually never goes below the threshold of triggering a reached goal.
I would guess that something is misaligned with your frames. Unfortunately, I cannot help you there as I have no experience in implementing the robot you are trying to use.

Thank you for your reply. With your suggestion, I attempted to print the distance value from the target point and found that, as you mentioned, when I selected World, it was displayed as arrived but not actually arrived. When I selected Odom, although the radar data would shift with the car's movement, it could still reach the target point normally and reset the environment. I tried debugging my code for a day, but I couldn't find the correct direction. I tried changingtrueto false, but the radar data was still offset when choosing odom. I also tried changing to false and added the tf transformation from world to odom from the launch file. As a result, the radar data also encountered the above problem when choosing world, What I am currently wondering is why radar data is only normal when choosing World. Is it defined in my xacro file?
I will provide you with the xacro file of my car model, and if possible, I would like to receive some suggestions from you.
This is my plugin file

 <gazebo reference="base_footprint">
    <mu1>0.3</mu1>
    <mu2>0.3</mu2>
</gazebo>
<gazebo reference="base_link">
    <mu1>0.3</mu1>
    <mu2>0.3</mu2>
</gazebo>

<gazebo reference="left_front_wheel">
	<mu1>1.5</mu1>
	<mu2>1.5</mu2>
</gazebo>

<gazebo reference="left_back_wheel">
	<mu1>1.5</mu1>
	<mu2>1.5</mu2>
</gazebo>

<gazebo reference="right_front_wheel">
	<mu1>1.5</mu1>
	<mu2>1.5</mu2>
</gazebo>

<gazebo reference="right_back_wheel">
	<mu1>1.5</mu1>
	<mu2>1.5</mu2>
</gazebo>

<gazebo>
    <plugin name="autolabor_driver_gazebo_plugin" filename="libfour_wheel_diff_driver_plugin.so">
        <rosDebugLevel>Debug</rosDebugLevel>
        <commandTopic>cmd_vel</commandTopic>
        <odometryTopic>odom</odometryTopic>

        <odometryFrame>odom</odometryFrame>
        <odometrySource>world</odometrySource>
        <robotBaseFrame>base_link</robotBaseFrame>
        <worldFrame>world</worldFrame>

        <publishWheelTF>false</publishWheelTF>
        <publishOdomTF>true</publishOdomTF>
        <publishWorldTF>true</publishWorldTF>
        <publishWheelJointState>false</publishWheelJointState>
        <legacyMode>false</legacyMode>

        <wheelSeparation>0.80</wheelSeparation>
        <wheelDiameter>0.25</wheelDiameter>
        <wheelAcceleration>0.0</wheelAcceleration>
        <wheelTorque>100.0</wheelTorque>
        <updateRate>10.0</updateRate>

        <leftFrontWheelJoint>joint_left_front</leftFrontWheelJoint>
        <leftBackWheelJoint>joint_left_back</leftBackWheelJoint>
        <rightFrontWheelJoint>joint_right_front</rightFrontWheelJoint>
        <rightBackWheelJoint>joint_right_back</rightBackWheelJoint>
    </plugin>
</gazebo>

<gazebo reference="imu_link">
    <gravity>true</gravity>
    <sensor name="imu_sensor" type="imu">
        <always_on>true</always_on>
        <update_rate>20</update_rate>
        <visualize>true</visualize>
        <topic>imu</topic>
        <plugin filename="libimu_plugin.so" name="imu_plugin">
            <topicName>imu</topicName>
            <bodyName>imu_link</bodyName>
            <updateRateHZ>10</updateRateHZ>
            <gaussianNoise>0.0</gaussianNoise>
            <xyzOffset>0 0 0</xyzOffset>
            <rpyOffset>0 0 0</rpyOffset>
            <frameName>imu_link</frameName>
            <enableOrientation>true</enableOrientation>
            <initialOrientationAsReference>false</initialOrientationAsReference>
        </plugin>
    </sensor>
</gazebo>

<gazebo reference="lider_1_link">
    <sensor name="sensor_ray" type="gpu_ray">
    <!--pose>0.4 0.0 0.3 0.0 0.0 0.0</pose-->
        <ray>
            <scan display="true">
                <horizontal>
                    <samples>500</samples>
                    <resolution>1.0</resolution>
                    <min_angle>-1.0</min_angle>
                    <max_angle>1.0</max_angle>
                </horizontal>
                <vertical>
                    <samples>160</samples>
                    <resolution>1.0</resolution>
                    <min_angle>-0.1</min_angle>
                    <max_angle>0.1</max_angle>
                </vertical>
            </scan>
            <range>
                <min>0.05</min>
                <max>160.0</max>
            </range>
        </ray>

        <plugin name="plugin_1" filename="libblocklaser_plugin.so">
            <gaussianNoise>0.00</gaussianNoise>
            <alwaysOn>true</alwaysOn>
            <updateRate>10</updateRate>
            <topicName>points2</topicName>
            <frameName>lider_1_link</frameName>
        </plugin>
        <always_on>true</always_on>
        <update_rate>10</update_rate>
    </sensor>
</gazebo>

This is my vehicle's xacro file
![1](https://github.com/reiniscimurs/DRL-robot-navigation/assets/115383575/f95be618-a31c-4736-9ab0-78af9af24663)
![2](https://github.com/reiniscimurs/DRL-robot-navigation/assets/115383575/dca53f6b-6d41-4eea-ab07-81e6dd275de8)
![3](https://github.com/reiniscimurs/DRL-robot-navigation/assets/115383575/8b328fc2-31aa-4a8c-b3d4-e2daadac4102)
![4](https://github.com/reiniscimurs/DRL-robot-navigation/assets/115383575/ab258308-f209-47d5-a778-7066dacdf61b)

Sorry, this is outside the scope of this repo. I do not know what your full robot setup is like, I cannot help you with that. All I can say is that I do not understand what is this world frame is and why base_link  has a transform aiming towards it. This seems strange. Most likely, your transforms are set up wrong. But as I said, this is not something I can help you with.

Thank you very much for your help. I found that the problem was caused by the Gazebo driver plugin. I replaced the plugin and the problem was resolved


All downloads seem to be broken?

Version
110.99.3 (Latest)
Operating System

[ ] Any
[ ] Linux
[ ] macOS
[X] Windows
[ ] Other Unix

OS Version
Any version
Processor

[ ] Any
[ ] Arm (using Rosetta)
[ ] PowerPC
[ ] Sparc
[ ] x86 (32-bit)
[X] x86-64 (64-bit)
[ ] Other

System Component
Installation
Severity
Critical
Description
All downloads of legacy SML/NJ versions for Windows seem to be broken.  E.g., this URL does not work:
http://smlnj.cs.uchicago.edu/dist/working/110.99.3/smlnj-110.99.3.msi
This worked a couple of weeks ago for me so I'm guessing it's due to a more recent change.
Sorry if this is the wrong place to report this problem.  I teach SML in my class so it'd be great if this could be fixed soon.
Transcript
No response
Expected Behavior
No response
Steps to Reproduce
Try to follow the link, and you get a 404
Additional Information
No response
Email address
<EMAIL_ADDRESS>

In the middle of migrating the master copy of the web site to GitHub and my scripts for pushing the web pages to the server encountered a permission issue.  The missing files are being restored; should be all there in an hour or so.

Thank you for the fix!


Popup hit boxes in wrong location when screen isn't full window/fullscreen

Godot version
4.0.alpha5
System information
Arch (Linux-lts 5.15.30-1)
Issue description
So I load an instance of a scene with an OptionButton.
But when I want to click on options from a MenuButton or OptionMenu, it fails to register. After a lot of testing and trying I finally figured out what the problem is.
If you don't put the window in fullscreen of let the window take up all the space on the screen, than the hitboxes for the popup are in the wrong location, as can be seen in my screenshot. My mouse is off to the right where the hitboxes would be if it would be in full window.

Now, I am not certain if this is a tiled window manager issue or a general issue, but it still does not work even if I put it in floating window mode
Steps to reproduce
Edit 2022-03-28 12:34:
Create an OptionButton or MenuButton and add it as a child through scripts.
Minimal reproduction project
TestRoom.tar.gz

It looks like i3-wm, I use it too.
But I'm sorry, I can not reproduce this issue in i3-wm. Maybe you should provide a small project with this issue.

It looks like i3-wm, I use it too.
But I'm sorry, I can not reproduce this issue in i3-wm. Maybe you should provide a small project with this issue.

Sorry about that, it took me some time to replicate it. It appears to only happen when loading in a scene with an option button. I attached a small project that has this issue.

In your provided project, the problem seems to be caused by the modified display/window/stretch/mode in the ProjectSettings.

The demo is running with embedded subwindows enabled, so it is not dependent on Window manager and platform. I can reproduce it on macOS as well, but only after the window is resized.

In your provided project, the problem seems to be caused by the modified display/window/stretch/mode in the ProjectSettings.

Seems like it is the case, probably strech mode is not taken into account by window transform for embedded windows.

Yep, that's indeed the culprit. The moment I select any of those modes the problem happens. I do this mainly for UI Scaling, so fine for now but this is really a bug which should be fixed.
I think this has to do that the popup is part of the window node?

Looks like a duplicate of #59573.
It will get fixed by #59118 or #59310.


Reddy Family Medical Clinic - CSV Onboarding

7/8/21 - Mapping is complete.  Changes will be made RS Schema development and testing.  Link is https://docs.google.com/spreadsheets/d/1SzB8MxeVOYDjBECfHR82525KD40pIPjh/edit#gid=2083770358

A draft of the client signoff has been given to Berni.  I'll send an updated request as soon as RS Schema testing is complete.


SA1133 Fix All in Solution appears to throw an exception

I'm working with Newtonsoft.Json.Portable.sln from the recently added churn tests, and ran StyleCopTester with /id:SA1133 /fixall. I haven't yet tracked down the cause.
The fix 'SA1133CodeFixProvider' threw an exception after 39ms:
System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.CodeAnalysis.CSharp.Syntax.SyntaxReplacer.NodeListEditor..ctor(SyntaxNode originalNode, IEnumerable`1 replacementNodes, ListEditKind editKind)
   at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxNode.ReplaceNodeInListCore(SyntaxNode originalNode, IEnumerable`1 replacementNodes)
   at Microsoft.CodeAnalysis.SyntaxNodeExtensions.ReplaceNode[TRoot](TRoot root, SyntaxNode oldNode, IEnumerable`1 newNodes)
   at StyleCop.Analyzers.ReadabilityRules.SA1133CodeFixProvider.FixAll.<FixAllInDocumentAsync>d__5.MoveNext() in J:\dev\github\sharwell\StyleCopAnalyzers\StyleCop.Analyzers\StyleCop.Analyzers.CodeFixes\ReadabilityRules\SA1133CodeFixProvider.cs:line 122
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at StyleCop.Analyzers.Helpers.DocumentBasedFixAllProvider.<GetSolutionFixesAsync>d__5.MoveNext() in J:\dev\github\sharwell\StyleCopAnalyzers\StyleCop.Analyzers\StyleCop.Analyzers.CodeFixes\Helpers\DocumentBasedFixAllProvider.cs:line 107
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.CodeActions.CodeAction.<ComputeOperationsAsync>d__7.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.CodeActions.CodeAction.<GetOperationsCoreAsync>d__5.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.CodeAnalysis.CodeActions.CodeAction.<GetOperationsAsync>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at StyleCopTester.CodeFixEquivalenceGroup.<GetOperationsAsync>d__23.MoveNext() in J:\dev\github\sharwell\StyleCopAnalyzers\StyleCop.Analyzers\StyleCopTester\CodeFixEquivalenceGroup.cs:line 141
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at StyleCopTester.Program.<TestFixAllAsync>d__3.MoveNext() in J:\dev\github\sharwell\StyleCopAnalyzers\StyleCop.Analyzers\StyleCopTester\Program.cs:line 198

This was caused by a bug in #1983, and was corrected in 5fa8d695.


Repository description unclear

I'm not sure what this repo is doing. Can I use any of the stuff here? Can I install and help out? If so, how?
The top description is also confusing: ipfs implementation in node https://github.com/jbenet/ipfs. Does that mean that https://github.com/jbenet/ipfs is a more up-to-date version of this? Or is that just a link to what IPFS is?

@RichardLitt Afaict the link you pointed to is only about the ipfs project itself, which in turn is a protocol that can have many implementations of it. The go-ipfs project is the canonical project and node-ipfs would be a node implementation of the same protocol.

Ok, cool. That should be changed, and added to the Readme for this repository. I'll see if I can do this when I get push access from @jbenet.

@richardlitt: make sure to follow the PR model:
make a branch in this same repo, submit as PR and tag someone (ideally
maintainer, in this case @diasdavid) to CR
On Thu, Sep 10, 2015 at 6:01 PM, Richard Littauer<EMAIL_ADDRESS>wrote:

Ok, cool. That should be changed, and added to the Readme for this
repository. I'll see if I can do this when I get push access from @jbenet
https://github.com/jbenet.
—
Reply to this email directly or view it on GitHub
https://github.com/ipfs/node-ipfs/issues/14#issuecomment-139292187.

Got it. Just changed the description to point to http://ipfs.io, because that is less ambiguous and can't be done in a PR. Will do a README PR now.

Didn't this show to you int he Readme? Also added a https://github.com/ipfs/node-ipfs/issues/15 to help with direction
node-ipfs
=========

> IPFS Node.js entry point and implementation roadmap

# Description

This repo (will) contains the entry point for the Node.js implementation of IPFS spec, similar to go-ipfs. It also presents the roadmap a modules of node-ipfs and their current state.

# Usage

> Not ready for prime time yet

# Roadmap

- Network
  - [ ] libp2p
    - [ ] Peer Routing
      - [x] kad-routing https://github.com/diasdavid/node-ipfs-kad-router
        - discovery mechanisms
          - [x] mDNS-discovery (https://github.com/diasdavid/node-ipfs-mdns)
          - [ ] random-walk (https://github.com/diasdavid/node-ipfs-random-walk)
          - [x] bootstrap-list (https://github.com/diasdavid/node-ipfs-railing)
      - [ ] mDNS-routing
    - [x] swarm (https://github.com/diasdavid/node-ipfs-swarm)
      - [x] stream muxer (https://github.com/diasdavid/node-spdy-stream-muxer)
      - [x] protocol muxer (https://github.com/diasdavid/node-multistream
      - [x] Identify (https://github.com/diasdavid/node-ipfs-swarm/tree/master/src/identify)
    - [ ] Distributed Record Store
      - [ ] record (needs MerkleDAG node) https://github.com/diasdavid/node-ipfs-record
      - [ ] distributed record store
      - [ ] kad-record-store (implements abstract record store)
      - [ ] abstract-record-store
- Exchange
  - [ ] bitswap
- MerkleDAG
  - [x] MerkleDAG node implementation (needs IPLD)
    - [x] https://github.com/diasdavid/node-ipld
    - [x] MerkleDAGStore https://github.com/diasdavid/node-merkledag-store
- Spec
  - https://github.com/ipfs/specs/pull/19

@diasdavid Made a PR. Should close this issue if merged.

Closing as issue is now answered.


Fix type

Motivation:
The intended object cannot be created because the returned type is incorrect.
Modification:

From ServiceConfigBuilder

ServiceConfigSetters  -> ServiceConfigBuilder

From VirtualHostAnnotatedServiceBindingBuilder

ServiceConfigSetters -> VirtualHostAnnotatedServiceBindingBuilder

Result:
You can create the intended object.

Ow - this looks like an ABI change. Might need to deprecate the methods and come up with new names

Wouldn't it be OK as it is with minor version bump, because these methods are only overridden by final builder classes and users will never extend them?

@trustin I think code needs to be recompiled because method linkage takes into account the actual parameter and return types - so any invocation of these methods will fail with NoSuchMethodError without recompilation. While we may expect low chance of dependency hell caused by ABI change to a configuration builder, IIUC, I think it does still break semver.

Hmm, yeah. I was rather thinking of ensuring ABI compatibility between micro bumps and API compatibility between minor bumps.

Hmm - is it ok if it can still cause dependency problems when other libraries may not recompile soon enough? In Java I don't think API without ABI is enough for minor versions, though maybe some exceptions can be made for ones unlikely to be linked to like configuration classes, maybe after GitHub search? Slippery slope though - I remember when Guava caused havoc with an ABI change in Preconditions.

Yeah, I understand your concern. I think the risk is fairly low because the builders changed here are not very likely to be used in a shared component. @minwoox @ikhoon @anuraaga @renaudb @adriancole Would you mind checking the usage of the methods being updated in this class in your repositories and telling us how this will affect them?
@heowc How about adding some automated test cases which check all builder classes override all parent methods whose return type is same with the parent type?

Oh... I didn't know there was such a problem with this PR. 😅

because these methods are only overridden by final builder classes and users will never extend them?

I agree with this.

How about adding some automated test cases which check all builder classes override all parent methods whose return type is same with the parent type?

I am not familiar with this. Would you give me a guide? Can I use reflection API (or reflections)?

It's fixing an unfortunate problem so is a good PR :) I agree that the risk for these methods is very low and it could be acceptable - as long as it's a calculated risk, no problem. But I don't think a general policy of not preserving ABI on minor is ok - for example if the ABI, but not API, was changed for methods on HttpRequest, RequestContext we can expect a disaster. I mentioned Guava, but forgot we had much more direct experience with micrometer ourselves ;)

The way we have addressed this in brave library was to make TODO for next major version literally on the interface that should change. This rightly says something is tech debt, but doesn't cause a break over a minor concern.

I am not familiar with this. Would you give me a guide? Can I use reflection API (or reflections)?

@heowc You can use reflection to checking the return type. The following test code might help you. 😀
https://github.com/line/armeria/blob/df376e920e3e60ba61c4170bf7d93d025359f965/core/src/test/java/com/linecorp/armeria/common/DefaultResponseHeadersBuilderTest.java#L104-L117

Would you mind checking the usage of the methods being updated in this class in your repositories and telling us how this will affect them?

VirtualHostAnnotatedServiceBindingBuilder does not seem to be used in LINE internal repository when searching on the LINE GitHub enterprise.

You can use reflection to checking the return type. The following test code might help you. 😀

@ikhoon Thank you for the content. 😉
I would like to ask once again if I am right.

Would I write tests only for the builder classes I changed?
Would I write tests for all builder classes that meet the condition?

At first, I thought it was the second way, but I guess it wasn't.

At first, I thought it was the second way, but I guess it wasn't.

It would be nice to check and confirm that all builder methods correctly override their parent methods.

At first, I thought it was the second way, but I guess it wasn't.

It would be nice to check and confirm that all builder methods correctly override their parent methods.

If so, there is ambiguity because armeria is multi-module.
Should I just deal with the core module?

@heowc You might want to add some utility or abstract class that implements the common assertions or tests and use them in different modules.

@heowc You might want to add some utility or abstract class that implements the common assertions or tests in testing-internal and use them in different modules.

Aha! That's a good idea. 👌
I will work on it sooner or later.

The job for java8 did not run normally.

But I don't think a general policy of not preserving ABI on minor is ok

That's true.

the risk for these methods is very low and it could be acceptable

That's also true. 😅
In my humble opinion, I think it's okay to just change the return type in this case. 🤔

Thanks a lot, @heowc! We're almost there 😉 How about creating a module under it/builders, pulling all projects into runtime test classpath and testing everything there? You can select all projects using projectsWithFlags('java', 'publish', 'no_aggregation')

good idea. 👍
I will remove the abstract class and the classes I added to each module and move the test code to the builders module.

@minwoox @ikhoon PTAL again, since lots have been changed since the approval.

Happy new year ~ 🌅🥰


Improve debug docs for network issues

Having spent a day trying out microk8s this is a solution for dev / demo environments. However, I lost a couple of hours to debugging a bad networking rule.
When I followed the instructions to raise an issue I discovered that inspect command showed me the issue with my networking configuration.
This PR is intended to add information about using the inspect command to troubleshoot networking issues.

@jgwilson42 This is great, thank you for contributing!

Thanks @jgwilson42


[Android] game.input.activePointer.isDown stopped working on 2.4.1

game.input.activePointer.isDown stays false when I touch on Android (version L, Nexus 5). This worked fine in 2.3 and 2.4.0a
Emailed Richard example links.

Could you all please try the latest build in the dev branch. I've uploaded build files as well for you. But I am pretty sure I've found the cause of it and in my tests in native Cordova apps and on Windows and OSX it's working correctly once again.

This fixed my issue on iOS.

Works well on my end using Android Chrome.


Added three great R books

not clear that R Graphics Cookbook is free: http://www.cookbook-r.com/Graphs/
"R for Data Science" and "The caret Package" are great additions.
Alphabetize the entries. g after f and d before s.

What about books like those on leanpub.com that can be $0?  Are those free?

read the travis report - need to remove trailing slashes.
There are lots of Leanpub books on here. Sometimes, though, the intent of the authors is to use the $0 minimum as a temporary promotional price which is hard to track.

Thanks!


lingua-rs local language detection

Using linuga-rs seems like  a good solution, but the language detection need some threshold  to be built in, as it does not works when there is only  a few character or when there is typo involved mostly. Which is reasonable

with current changes in c19beb9 both memory usage, speed and accuracy improved


Add categories of apps

Can use github labels as a start, and also more consumer friendly appstore labels
Games: action, racing, strategy ...
Apps: entertainment, social networking, lifestyle, photo & video, education, health & fitness, productivity utilities, books, sports, music, business, graphics & design, navigation, reference, travel, news, finance, medical, weather...

Implementation wise should/could this use labels on nostr?
NIP-32 labeling https://github.com/nostr-protocol/nips/blob/master/32.md

https://image.nostr.build/fc3c1da29a2a916de177de2200ca025761d8ca30b1c7713d91eaf81793782d8c.png
@NielLiesmons we completely lost you?

Nope, finally finding time again to go through all this.

Done